Android Studio deux versions avec différents fichiers de manifeste

J’ai des problèmes avec la définition de deux fichiers manifest différents pour mes versions dans Android Studio. Ceci est ma structure de projet actuelle:

Structure actuelle du projet

Le AndroidManifest.xml dans la version free ressemble à ceci:

       

Le AndroidManifest.xml de la version main n’a aucune autorisation use-permissions, mais contient le rest du code manifeste qui est partagé entre toutes les versions.

Le AndroidManifest.xml de la version pro ressemble à ceci:

     

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 auquel je m’attends est que les différentes versions définissent différentes permissions d’utilisation. Ce n’est pas le cas. Le résultat est actuellement que les deux versions définissent uniquement l’ tel que défini dans AndroidManifest.xml dans la version professionnelle.

J’ai essayé:

  • Projet propre
  • Reconstruire le projet
  • Redémarrez Android Studio
  • Synchroniser gradle

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

EDIT 1

J’ai changé l’emplacement de chaque fichier AndroidManifest.xml des 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 affiche les permissions des fichiers AndroidManifest.xml , des permissions de licence et du réseau (Doit être uniquement un réseau)

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

EDIT 2

J’ai tiré les rapports de fusion en tant que Commonsware a fait allusion, voici 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 

Contexte technique:

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

L’un des plus spécifiques est le tools:node qui indique comment certains nœuds XML du manifeste doivent se comporter lors de la fusion.

Solution:

Pour obtenir certaines permissions dans un autre manifeste, ajoutez TOUTES les permissions dont vous avez besoin au main et dans le manifeste des saveurs supprimez celles dont vous n’avez pas besoin, comme l’exemple ci-dessous:

supprimer free la licence de chèque

  

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

Si vous n’utilisez pas cette bibliothèque dans toutes les versions, utilisez une instruction de comstack aromatisée (par exemple, proComstack ) pour n’utiliser cette bibliothèque que dans cette version.

Si vous utilisez la bibliothèque pour tous les goûts, mais que vous êtes certain de ne pas avoir besoin de l’autorisation dans une version, un atsortingbut tools:node peut être utilisé dans le manifeste pour empêcher cette autorisation fournie par la bibliothèque.

Et le rapport de fusion manifeste est votre ami. 🙂

Cela devrait au moins résoudre le problème. Je trouve cela utile en spécifiant le manifeste exact à utiliser pour chaque variante. À votre santé! Il dirige explicitement vers le fichier manifeste sous chaque dossier de variantes.

  android { productFlavors { prod { manifest.srcFile "prod/AndroidManifest.xml" } dev { manifest.srcFile "dev/AndroidManifest.xml" } } ... } 

Vous devriez changer votre code:

  

pour: