Подтвердить что ты не робот

Gradle: Как настроить разрешения Android Manifest?

Для моей системы сборки мне нужно создать несколько вариантов приложения, каждый из которых запрашивает другой набор разрешений. Как это можно сделать с помощью Gradle, не вызывая отдельный script?

4b9b3361

Ответ 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, он объединит его с манифестом в основном.