Архитектура плагинов для Android-приложения?

ЭТОТ ВОПРОС ПЕРЕДАЛ https://softwarerecs.stackexchange.com/info/27841/plugins-architecture-for-an-android-app


Я хочу внедрить систему плагинов для приложение с открытым исходным кодом, потому что оно стало действительно большим, со многими функциями, что только несколько пользователи нуждаются. Освобождение разных приложений не является хорошим решением, поскольку пользователю требуется функция feature7 и feature24, в то время как пользователюB требуется функция39 и feature24.

Где я могу найти хороший пример архитектуры плагина?

Вот что я хотел бы, чтобы плагин мог:

Например, один из плагинов должен добавить кнопку на конкретном экране, и нажатие этой кнопки увеличивает значение в базе данных приложения. Насколько мне известно, это не выполнимо с поставщиками контента и намерениями.

Я хочу избежать сложного кода основного кода приложения с множеством крючков.

Форма плагина может быть файлом на SD-карте, приложении или что-то еще.

Ответ 1

Я создал фреймворк, который работает как Robo-guice с некоторыми из его основных функций IoC. (Сократите коды шаблонов, которые загружают представления/службы и т.д.)

Но ядро, я считаю, является решением вашей проблемы, это возможность загружать отдельные файлы APK "plugin", в том числе "res", а также файлы <layouts>.xml. Файл <layouts>.xml может быть независимо завышен классами внутри этого APK. То есть вы можете загрузить CustomView (который раздувает свой собственный <layout>.xml) в исходное/родительское приложение. Все это делается без App Parent App AP, зная, как пользовательский интерфейс был завышен в плагине APK.

Пример того, что я имею в виду: У меня есть приложение для сопоставления, структура будет динамически сканировать установленный APK, который соответствует "контракту" для плагина "add-on function", и загружает пользовательский интерфейс, специфичный для него, в App View в виде плавающей панели.

Я бы сказал, что плагиновая платформа для Android не нужна, так как Android имеет большинство, если не все необходимые встроенные API, чтобы выполнить это.

Это ваши друзья в этой области разработки плагинов для Android:

  • PackageManager (сканировать пакеты установки, а также плагины)
  • DexClassLoader (ClassNotFoundException будет больно, если вы не используете правильный ClassLoader btw)
  • Отражение Java

Ответ 2

Где я могу найти хороший пример архитектуры плагина?

Роман Нурик из Google реализовал в своем приложении с открытым исходным кодом плагин с плагинами тире данных. Сами плагины - это Services, которые расширяют класс DashClockExtension в API и устанавливаются как полностью независимые файлы APK со своими собственными ресурсами. Это довольно много работы, определяющей протокол связи через AIDL, но он приятный и чистый и работает очень хорошо.

один из плагинов должен добавить кнопку на конкретном экране, а нажатие этой кнопки увеличивает значение в базе данных приложения.

Части основного макета, которые могут быть изменены плагином, должны быть предварительно определены основным приложением и открыты через протокол связи. Должно быть возможно, чтобы плагин раздувал произвольный макет и отправлял его в основное приложение, которое могло бы помещать его внутри заранее выделенной области его собственного макета.

Ответ 3

Если вы только собираетесь увеличить модульность, я бы рекомендовал использовать контейнер для инъекций зависимостей, например PicoContainer, Guice или Spring.

Если вам нужна легкая плагиновая архитектура, перейдите Java Plugin Framework (JPF).

Он позволяет вам определять точки расширения, которые могут быть реализованы вашими модулями. Основная задача фреймворка - предоставить способ, которым вы можете объединить эти модули (как банки), которые динамически обнаруживаются основным приложением и заданы как реализация точки расширения.