Для моей системы сборки мне нужно создать несколько вариантов приложения, каждый из которых запрашивает другой набор разрешений. Как это можно сделать с помощью Gradle, не вызывая отдельный script?
Gradle: Как настроить разрешения Android Manifest?
Ответ 1
Мне просто удалось сделать это, имея разные вкусы в моем файле gradle:
free {
packageName 'com.sample.free'
buildConfigField "boolean", "HAS_AD", "true"
}
paid {
packageName 'com.sample.paid'
buildConfigField "boolean", "HAS_AD", "false"
}
а затем я создал новую папку под src под названием "бесплатно" и под этой папкой с именем "res"
src/
+ free/
| + res/
+ src/
и в этой папке создайте новый файл "AndroidManifest.xml" со следующим кодом:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.sample" >
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
</manifest>
В соответствии с Gradle Руководство пользователя плагина на веб-сайте проекта Android Tools:
Подобно типам сборки, Product Flavors также вносят код и ресурсов через собственные исходные наборы.
и
При использовании всех используемых источников используются следующие правила для создания одного APK:
- Все исходные коды (src/*/java) используются вместе как несколько папок, генерирующих один вывод.
- Манифесты объединены вместе в один манифест. Это позволяет Product Flavors иметь разные компоненты и/или разрешений, аналогично строковым типам.
- Все ресурсы (Android res и активы) используются с использованием приоритета оверлея, когда тип сборки переопределяет Product Flavor, который переопределяет основной источник.
- Каждый вариант сборки генерирует свой собственный R-класс (или другой сгенерированный исходный код) из ресурсов. Ничего не разделяют между варианты.
означает, что вы можете создать папку с каждым именем аромата под src и поместить в нее свои пользовательские файлы. Если указанный файл является AndroidManifest gradle, он объединит его с манифестом в основном.