Я искал способ внедрения плагинового приложения для Android и нашел this great article, описывая сервисный подход к плагинам.Архитектура плагина с помощью сервисных альтернатив
Мои цели в попытке этот сервис на основе плагина архитектуры были:
- Избегайте статического подключения дополнительного модуля («плагин») к основному приложению.
- Избегайте распространения исходного кода основного приложения или библиотеки.
- При необходимости передайте основное приложение/библиотеку через Proguard, защищая ключевые части.
сервис-ориентированный подход соответствует цели # 1 очень хорошо, но когда дело доходит до цели # 2 и # 3, я нахожусь в бесконечном цикле (т.е. «чеканка мой хвост»):
Демонстрационная версия плагина на основе сервисов, реализованная в статье, отлично работает, потому что ... она возвращает встроенные типы (см. IBinaryOp.aidl
).
Но в моем приложении реального мира, мне нужно вернуть свои классы, некоторые из которых являются сложными и включают в себя «коммерческие секреты».
Является ли это курицей & Яйцо, в какой ситуации, независимо от того, что я делаю, мне всегда придется выставлять некоторые из моих основных классов?
Или эта проблема разрешима? (? Обходной путь действительно)
Один из способов я рассматриваю для решения этого является использование интерфейсов для моих классов-к-быть возвращены, с помощью самой службы и так:
- В плагин (написанный другими) по-прежнему должен знать о моем пространстве имен и, следовательно, мне понадобится JAR в библиотечном проекте в времени сборки, но он не будет иметь никакого доступа к исходному коду реализации.
- Я могу разделить мой текущий монолитный библиотечный проект на 2 JAR: один, содержащий только интерфейсы, а другой даже не выпущенный как JAR, а скорее часть APK моего приложения.
Я думаю в правильном направлении? Или вы заметили некоторые заблуждения?
Есть ли более эффективные способы решения этой проблемы?
Есть ли там демо-проекты, которые уже успешно справились с этой задачей (т. Е. Все 3 цели, описанные выше) и могут использоваться как справочник или учебник?
Спасибо за подробный ответ. Я буду изучать его на некоторое время, прежде чем принимать решение об оптимальном подходе в моем случае. Возвращение только классов акций потребует перепроектирования и повторной записи значительной части моей библиотеки. И спасибо за советы относительно управления версиями, вы определенно заставили меня думать ... – sfinja