Android Studio deux saveurs avec différents fichiers de manifeste

J'ai des problèmes avec la définition de deux fichiers de manifestation différents pour mes saveurs dans Android Studio. Voici ma structure de projet actuelle:

Structure actuelle du projet

  • Différence entre onSingleTapConfirmed et onSingleTapUp
  • Comment créer un bouton d'action flottante en une seule feuille de matériau
  • Identifier l'algorithme de cryptage GSM
  • La méthode DSL de Gradle n'a pas été trouvée: 'apt ()'
  • Exemple de fuite de mémoire Android de Google I / O
  • Comment créer de multiples lentilles ou un aperçu à l'aide d'une caméra dans Android
  • L' AndroidManifest.xml dans la saveur free ressemble à ceci:

     <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="se.example.package"> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> </manifest> 

    L' AndroidManifest.xml dans la saveur main n'a pas d'autorisations d'utilisation, mais contient le reste du code de manifeste qui est partagé entre toutes les saveurs.

    L' AndroidManifest.xml dans la saveur pro ressemble à ceci:

     <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="se.example.package"> <uses-permission android:name="com.android.vending.CHECK_LICENSE" /> </manifest> 

    Build.gradle définit les deux saveurs comme

     productFlavors { free { applicationId 'se.example.package.free' minSdkVersion 14 targetSdkVersion 21 versionCode 1 versionName '1.0' } pro { minSdkVersion 14 applicationId 'se.example.package.pro' targetSdkVersion 21 versionCode 2 versionName '1.1' } } 

    Le résultat que j'attends, c'est que les différents arômes définissent différentes utilisations-autorisations. Ce n'est pas le cas. Le résultat est actuellement que les deux saveurs définissent uniquement <uses-permission android:name="com.android.vending.CHECK_LICENSE" /> tel que défini dans AndroidManifest.xml dans la saveur pro.

    J'ai essayé:

    • Projet propre
    • Projet de reconstruction
    • Redémarrez Android Studio
    • Sync gradle

    Mais sans succès. Comment puis-je résoudre cela? Toute aide est appréciée.

    EDITER 1

    J'ai changé l'emplacement de chaque fichier AndroidManifest.xml de chacun des dossiers res dossier free et pro . Le résultat de ceci:

    1. La saveur Pro montre l'autorisation de licence comme prévu.
    2. La saveur gratuite montre les autorisations à la fois des fichiers AndroidManifest.xml , des licences et des autorisations réseau (devrait être uniquement réseau)

    Cela ressemble à une question de structure de projet. Que faire de ça?

    EDIT 2

    J'ai tiré les rapports de fusion comme l'a laissé entendre les polices, ce sont les rapports concernant les uses-permissions

    Gratuit:

     uses-permission#com.android.vending.CHECK_LICENSE ADDED from qwknoteGIT:licencing-library:unspecified:26:5 android:name ADDED from qwknoteGIT:licencing-library:unspecified:26:22 

    Pro:

     uses-permission#com.android.vending.CHECK_LICENSE MERGED from qwknoteGIT:licencing-library:unspecified:26:5 

  • Disable EditText curseur clignotant
  • Comment ajouter CustomView à mon clavier personnalisé dans Android comme le clavier GIF
  • Erreur lors de la mise en page de FloatingActionButton: NoSuchMethodException
  • Comment obtenir des clics de bouton dans le fragment d'hôte à partir du fragment de dialogue
  • L'auditeur de l'état du téléphone s'appelle plusieurs fois
  • Android set caché le clavier en press enter (dans un EditText)
  • 3 Solutions collect form web for “Android Studio deux saveurs avec différents fichiers de manifeste”

    Contexte technique:

    Sur ce lien, il explique les techniques et les paramètres qui peuvent être utilisés pour la fusion de manifeste: http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger#TOC-tools:node -Marqueurs

    Un en particulier est les tools:node qui indique comment certains nœuds XML sur le manifeste devraient se comporter tout en fusionnant.

    Solution:

    Pour obtenir des permissions dans un et différent dans un autre manifeste, ajoutez TOUTES les autorisations dont vous avez besoin sur le main et dans les saveurs manifeste supprimer ceux dont vous n'avez pas besoin, comme l'exemple ci-dessous:

    Supprimer free la licence de contrôle

     <uses-permission android:name="com.android.vending.CHECK_LICENSE" tools:node="remove"/> 

    Votre problème vient d'une bibliothèque, pas vos saveurs. Plus précisément, qwknoteGIT:licencing-library demande CHECK_LICENSE .

    Si vous n'utilisez pas cette bibliothèque dans toutes les saveurs, utilisez une instruction de compile aromatisée (p. proCompile ., proCompile ) pour n'utiliser cette bibliothèque que dans cette saveur.

    Si vous utilisez la bibliothèque pour toutes les saveurs, mais vous sentez certain que vous n'avez pas besoin de la permission d'une seule saveur, c'est là qu'un tools:node attribut tools:node peut être utilisé, dans le manifeste de la saveur, pour bloquer cette permission fournie par la bibliothèque.

    Et le rapport de fusion manifeste est votre ami. 🙂

    Cela devrait résoudre au moins le problème. Je trouve utile de spécifier le manifeste exact à utiliser pour chaque variante. À votre santé! Il indique explicitement le fichier manifeste sous chaque dossier variant.

      android { productFlavors { prod { manifest.srcFile "prod/AndroidManifest.xml" } dev { manifest.srcFile "dev/AndroidManifest.xml" } } ... } 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.