1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/juefeng_com-xPlugin

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

xPlugin

1. Введение

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

Особенности:

  1. Ресурсный обмен: можно указать Runtime Module, другие модули могут использовать предоставленные им типы и ресурсы.
  2. Изоляция ресурсов: каждый модуль плагина старается использовать свои собственные типы и ресурсы, чтобы избежать конфликтов типов и ресурсов.
  3. Обмен сообщениями: модули взаимодействуют через обмен сообщениями, максимально разделяя зависимости, откладывая загрузку зависимостей и загружая их при вызове модуля (можно настроить автоматическую асинхронную загрузку зависимых модулей).
  4. Близость к нативному: использование системных API близко к нативным, ограничения и решения см. ниже.
Ограничения:
  • Activity: не поддерживает прямой запуск из внешних приложений, рекомендуется регистрация в хост-приложении или реализация пользовательской Activity для перехода.
  • Service: не поддерживает прямой запуск из внешних приложений, сценарии использования ограничены, обновления нечастые, рекомендуется регистрация в хост-приложении.
  • Broadcast: динамическая регистрация, приложение должно быть запущено, статическая регистрация рекомендуется в хост-приложении.
  • ContentProvider: не поддерживает прямой запуск из внешних приложений, рекомендуется регистрация в хост-приложении.
  • Проблемы с ресурсами системного процесса: Notification и другие требуют загрузки ресурсов приложения системным процессом, рекомендуется использовать пакетные интерфейсы для упаковки и предоставления плагину.
  • Проблема с анимацией overridePendingTransition: аналогично проблемам с системными процессами, но можно добавить одноимённые ресурсы в хост-приложение или установить сопоставление через ActivityHelper#registerOverridePendingTransitionAnimId, фреймворк автоматически обработает загрузку.

2. Архитектура программного обеспечения

Обратите внимание: после компиляции основного модуля в демонстрационном проекте ресурсы, зависящие от других модулей, будут выводиться в каталог runtime, позволяя другим модулям использовать ресурсы, предоставляемые основным модулем.

3. Общие интерфейсы

  1. PluginRuntime: класс инициализации плагина, используется при инициализации Application.
  2. Installer: инструмент установки и загрузки плагина, здесь можно получить информацию об установленных и загруженных плагинах.
  3. PluginMsg: сообщения плагина, используемые для связи между плагинами.
  4. PluginEntry: точка регистрации сообщений, соглашение об именах классов: $packageName.PluginEntry, для удобства интеграции во внешние SDK, PluginEntry хоста может быть указан через интерфейс инициализации.
  5. Plugin: родительский класс для хоста (Host) и дочерних модулей (Module), информация о соответствующем плагине может быть получена через Plugin.getPlugin (тип или экземпляр плагина).

4. Инициализация

  1. Добавление зависимостей Gradle:
// Минимальное требование к версии плагина Gradle: com.android.tools.build:gradle:4.0.0

// В хосте
implementation 'org.xutils:xutils:3.9.0'
implementation 'org.xplugin:xplugin:1.3.10'
// В плагине
compileOnly 'org.xutils:xutils:3.9.0' // Необязательно
compileOnly 'org.xplugin:xplugin:1.3.10'
  1. Пример интерфейса инициализации: MyApplication
  2. Добавьте информацию о зависимостях в Manifest хоста или плагина, фреймворк будет автоматически асинхронно загружать зависимые модули плагинов, см. AndroidManifest.xml
  3. Обратитесь к примеру конфигурации проекта Gradle, обратите внимание, что packageId плагина должен быть >= 0x70, но не должен быть установлен на 0x7F, например:
aaptOptions {
    // Для использования packageId меньше 0x80 необходимо добавить '--allow-reserved-package-id'
    // additionalParameters '--allow-reserved-package-id', '--package-id', '0x72',
    additionalParameters '--package-id', '0x80'
}

5. Использование Activity в плагине

См. пример в основном проекте Дополнительная информация

6. Использование Service в плагине

См. пример в основном проекте

7. Использование Broadcast в плагине

См. пример в основном проекте

8. Использование ContentProvider в плагине

См. пример в основном проекте

9. Вызов сообщений между плагинами

См. примеры использования PluginEntry и PluginMsg.

Прочее

Компиляция примера проекта:

  1. Очистить кэш компиляции: ./gradlew clean
  2. Скомпилировать основной модуль: ./gradlew main:build
  3. Скомпилируйте модуль module1: ./gradlew module1:build
  4. Скомпилируйте модуль module2: ./gradlew module2:build

О теме

API Android 28 и ниже не поддерживают ссылки на темы Runtime Module, включая темы с ресурсами пакетов, которые должны быть скомпилированы в плагин с использованием метода реализации.

Проблемы с отражением styleable

Если используется Class.forName(packageName + ".R$styleable").getFields() для отражения получения ресурсов styleable, рекомендуется изменить его на R.styleable.class.getFields(), чтобы обеспечить лучшую совместимость. В противном случае при компиляции плагина необходимо добавить:

aaptOptions {
    additionalParameters '--java', 'src/main/java', '--custom-package', 'app_packageName'
}

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Java и 4 других языков
Apache-2.0
Отмена

Обновления (15)

все

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/juefeng_com-xPlugin.git
git@api.gitlife.ru:oschina-mirror/juefeng_com-xPlugin.git
oschina-mirror
juefeng_com-xPlugin
juefeng_com-xPlugin
develop