Mon application a plusieurs versions pour plusieurs marchés de systèmes de facturation intégrée.
J'ai une seule bibliothèque qui partage le code de base pour tous mes projets. J'ai donc décidé d'ajouter ces systèmes de paiement à cette bibliothèque en tant que saveurs de produits.
La question est la suivante: la bibliothèque Android peut-elle avoir des saveurs de produits?
Si tel est le cas, comment puis-je inclure différentes saveurs dans la saveur respective de l'application?
J'ai beaucoup cherché et je n'ai rien trouvé sur ce scénario. La seule chose proche que j'ai trouvée était celle-ci dans http://tools.android.com/tech-docs/new-build-system/user-guide :
dependencies {
flavor1Compile project(path: ':lib1', configuration: 'flavor1Release')
flavor2Compile project(path: ':lib1', configuration: 'flavor2Release')
}
J'ai changé de configuration pour différentes choses mais cela n'a pas fonctionné!
J'utilise Android Studio 0.8.2.
3.4.2
version et gradué vers la dernière5.5.1
, cela a toujours échoué avec le temps de compilation, ou la liaison des ressources a échoué dans aapt, ou je ne trouve pas le symbole qui se trouve dans la bibliothèque moduleRéponses:
Enfin j'ai découvert comment faire cela, je vais l'expliquer ici pour les autres confrontés au même problème:
L'élément clé est de définir publishNonDefault sur true dans la bibliothèque build.gradle, puis vous devez définir les dépendances comme suggéré par le guide de l'utilisateur.
L'ensemble du projet serait comme ceci:
Bibliothèque build.gradle:
projet build.gradle:
Vous pouvez maintenant sélectionner la saveur de l'application et le panneau Variantes de construction et la bibliothèque sera sélectionnée en conséquence et toute la construction et l'exécution seront effectuées en fonction de la saveur sélectionnée.
Si vous avez plusieurs modules d'application basés sur la bibliothèque, Android Studio se plaindra du conflit de sélection de variantes, c'est ok, ignorez-le.
la source
Il y a un problème avec la réponse d' Ali . Nous perdons une dimension très importante dans nos variantes de construction. Si nous voulons avoir toutes les options (dans mon exemple ci-dessous 4 (2 x 2)), nous devons simplement ajouter des configurations personnalisées dans le fichier build.gradle du module principal pour pouvoir utiliser tous les multi-buildType multi-saveur dans
Build Variants
. Nous devons également définir publishNonDefault sur true dans le fichier build.gradle du module de bibliothèque .Exemple de solution:
Lib build.gradle
Construction de l'application.
la source
Error:java.lang.RuntimeException: Error: more than one library with package name
,, apparuMise à jour pour Android Plugin 3.0.0 et supérieur
Selon la documentation officielle Android - Migrez les configurations de dépendance pour les modules locaux ,
Donc dans la réponse d'Ali, changez
à
Et le plugin s'occupera automatiquement des configurations spécifiques aux variantes. J'espère que cela aidera les autres à mettre à niveau le plugin Android Studio vers la version 3.0.0 et supérieure.
la source
Mon plug-in Android est 3.4.0, et je trouve qu'il n'a pas besoin de configuration maintenant.Tout ce dont vous avez besoin est de vous assurer que les flavours et productFlavors dans l'application contiennent un productFlavor de la même saveurDimensions et productFlavors dans les bibliothèques.
Dans build.gradle de mylibrary
build.gradle de l'application:
Après la synchronisation, vous pouvez changer toutes les options dans la fenêtre Variantes de construction:
la source
Pour que les versions fonctionnent sur une bibliothèque AAR, vous devez définir defaultPublishConfig dans le fichier build.gradle de votre module de bibliothèque Android.
Pour plus d'informations, voir: Publication de la bibliothèque .
la source
Pour le moment, ce n'est pas possible, même si si je me souviens bien, c'est une fonctionnalité qu'ils veulent ajouter. (Édition 2: lien , lien2 )
Edit: Pour le moment, j'utilise l'
defaultPublishConfig
option pour déclarer quelle variante de bibliothèque est publiée:la source
Je sais que ce sujet a été fermé, mais juste une mise à jour avec gradle 3.0, voir ceci: https://developer.android.com/studio/build/gradle-plugin-3-0-0-migration.html#variant_aware et grep
matchingFallbacks
etmissingDimensionStrategy
. Il est maintenant beaucoup plus simple de déclarer les dépendances entre les variantes de module.... et dans ce cas précis avec gradle3.0, comme les saveurs partagent le même nom, gradle les mapperait comme par magie, aucune configuration n'est requise.
la source
J'ai également rencontré un problème lors de la compilation de modules pour diverses options.
Ce que j'ai trouvé:
Il semble que nous n'avons pas besoin d'ajouter
publishNonDefault true
dans lebuild.gradle
fichier de lib , depuis Gradle 3.0.1 .Après avoir décompilé une classe a
BaseExtension
trouvé ceci:Et au lieu de:
Nous devrions utiliser:
La seule chose importante, c'est d'ajouter une
configurations {...}
partie au fichierbuild.gradle
.Ainsi, la dernière variante du
build.gradle
fichier de l'application est:Vous pouvez également utiliser les variantes de filtre pour restreindre les variantes de construction.
N'oubliez pas d'inclure des modules dans le
settings.gradle
fichier, comme:la source