Question Gradle: Comment personnaliser les autorisations du manifeste Android?


Pour mon système de génération, je dois créer plusieurs variantes d'application, chacune demandant un ensemble d'autorisations différent. Comment cela peut-il être fait avec Gradle, sans invoquer un script séparé?


31
2017-07-01 15:43


origine


Réponses:


Je viens de le faire en ayant différentes saveurs dans mon dossier de classement:

    free {
        packageName 'com.sample.free'
        buildConfigField "boolean", "HAS_AD", "true"
    }

    paid {
        packageName 'com.sample.paid'
        buildConfigField "boolean", "HAS_AD", "false"
    }

et puis j'ai créé un nouveau dossier sous src appelé "libre" et sous cela un dossier appelé "res"

src/
 + free/
 |   + res/
 + src/

et dans ce dossier, créez un nouveau fichier "AndroidManifest.xml" contenant le code suivant:

<?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>

Selon Gradle Plugin Guide de l'utilisateur sur le site du projet Outils Android:

Semblable aux types de construction, les saveurs de produit contribuent également au code et   ressources à travers leurs propres sources.

et

Les règles suivantes sont utilisées pour traiter tous les sources utilisées   pour construire un seul APK:

  • Tous les codes sources (src / * / java) sont utilisés ensemble comme plusieurs dossiers générant une seule sortie.
  • Les manifestes sont tous fusionnés en un seul manifeste. Cela permet aux arômes de produits d'avoir différents composants et / ou   les autorisations, de la même manière que les types de construction.
  • Toutes les ressources (Android res et assets) sont utilisées en utilisant la priorité de superposition où le type de construction remplace la saveur de produit, qui   remplace le sourceSet principal.
  • Chaque variante de génération génère sa propre classe R (ou un autre code source généré) à partir des ressources. Rien n'est partagé entre   variantes.

Cela signifie que vous pouvez créer un dossier avec chaque nom de saveur sous src et y placer vos fichiers personnalisés. Si ce fichier est un AndroidManifest, le dégradé le fusionnera avec le manifeste principal.


58
2017-07-01 22:18