Android gradle проект может объединять библиотеки XML-ресурсов

Сначала я динамически генерирую несколько библиотек Android, которые содержат файл xml в файле src / main / res / xml / config.xml, который включает специфичные для библиотеки данные.

Затем, когда я создаю свое приложение для Android с сгенерированными библиотеками в качестве зависимостей, я ожидаю, что сгенерированный apk содержит файл конфигурации xml, объединенный со всеми файлами конфигурации librairies xml, но это не так.

Плагины Манифесты Android объединены в один файл, есть ли что-то, что нужно сделать, чтобы он работал одинаково для файлов XML? Это вообще возможно?

Каждый плагин имеет файл конфигурации, который содержит, например:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<plugins>
    <feature name="Plugin1">
        <param name="package" value="com.example.Plugin1"/>
    </feature>
</plugins>

и я ожидаю, что apk содержит файл конфигурации xml с содержимым для 3 плагинов:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<plugins>
    <feature name="Plugin1">
        <param name="package" value="com.example.Plugin1"/>
    </feature>

    <feature name="Plugin2">
        <param name="package" value="com.example.Plugin2"/>
    </feature>

    <feature name="Plugin3">
        <param name="package" value="com.example.Plugin3"/>
    </feature>
</plugins>

Спасибо

1 ответ

Я не думаю, что это возможно, как вы предлагаете. Альтернативой, которую стоит изучить, будет создание файлов XML в виде ресурсов с уникальными именами (например, assets/plugin-(plugin-name).xml).

У этого есть два свойства, которые сделали бы это возможным во время компиляции и во время выполнения:

  • поскольку имена файлов уникальны, в итоге вы получите набор файлов в каталоге ресурсов, который не будет перезаписан (следуя вашему примеру, можно assets/plugin-Plugin1.xml, assets/plugin-Plugin2.xml, assets/plugin-Plugin3.xml),
  • поскольку они находятся в каталоге ресурсов, они могут быть перечислены.

Благодаря этому вы можете получить эффект, аналогичный тому, что вы ищете во время выполнения. Единственное добавление, которое стоит упомянуть, - это включение подходящего файла правил Proguard в каждый создаваемый плагин, если вы минимизируете свой APK, так как я понимаю, что ваши плагины будут созданы во время выполнения путем отражения.

Другие вопросы по тегам