Meine App bietet verschiedene Varianten für In-App-Abrechnungssysteme für verschiedene Märkte.
Ich habe eine einzige Bibliothek, die den Basiscode für alle meine Projekte gemeinsam nutzt. Deshalb habe ich beschlossen, diese Zahlungssysteme als Produktaromen in diese Bibliothek aufzunehmen.
Die Frage ist, kann Android-Bibliothek Produktaromen haben?
Wenn ja, wie kann ich verschiedene Geschmacksrichtungen in die jeweilige Geschmacksrichtung der App aufnehmen?
Ich habe viel gesucht und konnte nichts über dieses Szenario finden. Das einzige, was ich in der Nähe fand, war das in http://tools.android.com/tech-docs/new-build-system/user-guide :
dependencies {
flavor1Compile project(path: ':lib1', configuration: 'flavor1Release')
flavor2Compile project(path: ':lib1', configuration: 'flavor2Release')
}
Ich habe die Konfiguration auf verschiedene Dinge geändert, aber es hat nicht funktioniert!
Ich benutze Android Studio 0.8.2.
3.4.2
Version aktualisiere und auf die neueste Version heruntergefahren habe, ist die Kompilierungszeit5.5.1
immer noch fehlgeschlagen, oder die Ressourcenverknüpfung ist in aapt fehlgeschlagen oder ich kann das Symbol in der Bibliothek nicht finden ModulAntworten:
Schließlich habe ich herausgefunden, wie das geht. Ich werde es hier anderen erklären, die vor dem gleichen Problem stehen:
Der Schlüssel besteht darin, PublishNonDefault in der Bibliothek build.gradle auf true zu setzen. Anschließend müssen Sie Abhängigkeiten definieren, wie im Benutzerhandbuch vorgeschlagen.
Das ganze Projekt würde so aussehen:
Bibliothek build.gradle:
Projekt build.gradle:
Jetzt können Sie die App-Variante und das Bedienfeld „Varianten erstellen“ auswählen. Die Bibliothek wird entsprechend ausgewählt, und alle Builds und Ausführungen werden basierend auf der ausgewählten Variante durchgeführt.
Wenn Sie mehrere App-Module haben, die auf der Bibliothek basieren, wird sich Android Studio über einen Konflikt bei der Variantenauswahl beschweren. Es ist in Ordnung, ignorieren Sie ihn einfach.
quelle
Es gibt ein Problem mit Ali Antwort. Wir verlieren eine sehr wichtige Dimension in unseren Build-Varianten. Wenn wir alle Optionen haben möchten (in meinem Beispiel unter 4 (2 x 2)), müssen wir nur benutzerdefinierte Konfigurationen in der Datei build.gradle des Hauptmoduls hinzufügen , um alle Multi-Flavour-Multi-Build-Typen in verwenden zu können
Build Variants
. Wir müssen auch PublishNonDefault in der Datei build.gradle des Bibliotheksmoduls auf true setzen .Beispiellösung:
Lib build.gradle
App build.gradle
quelle
Error:java.lang.RuntimeException: Error: more than one library with package name
, occouredUpdate für Android Plugin 3.0.0 und höher
Laut der offiziellen Android-Dokumentation - Abhängigkeitskonfigurationen für lokale Module migrieren ,
Also in Alis Antwort ändern
zu
Und das Plugin kümmert sich automatisch um variantenspezifische Konfigurationen. Hoffe, es hilft anderen, Android Studio Plugin auf 3.0.0 und höher zu aktualisieren.
quelle
Mein Android-Plugin ist 3.4.0, und ich finde, dass es jetzt keine Konfigurationen benötigt. Sie müssen lediglich sicherstellen, dass die FlavourDimensions und ProductFlavors in der Anwendung einen ProductFlavor mit denselben FlavourDimensions und ProductFlavors in Bibliotheken enthalten. Beispiel:
In mylibrary's build.gradle
build.gradle der Anwendung:
Nach der Synchronisierung können Sie alle Optionen im Fenster "Varianten erstellen" wechseln:
quelle
Damit die Varianten in einer AAR-Bibliothek funktionieren, müssen Sie defaultPublishConfig in der Datei build.gradle Ihres Android Library-Moduls definieren.
Weitere Informationen finden Sie unter: Bibliothekspublikation .
quelle
Im Moment ist es nicht möglich, obwohl, wenn ich mich richtig erinnere, es eine Funktion ist, die sie hinzufügen möchten. (Bearbeiten 2: Link , Link2 )
Bearbeiten: Im Moment benutze ich die
defaultPublishConfig
Option, um zu deklarieren, welche Bibliotheksvariante veröffentlicht wird:quelle
Ich weiß, dass dieses Thema geschlossen wurde, aber nur ein Update mit Gradle 3.0, siehe dies: https://developer.android.com/studio/build/gradle-plugin-3-0-0-migration.html#variant_aware und grep
matchingFallbacks
undmissingDimensionStrategy
. Jetzt ist es viel einfacher, die Abhängigkeiten zwischen Modulvarianten zu deklarieren.... und in diesem genauen Fall mit gradle3.0, da Aromen den gleichen Namen haben, würde gradle sie magisch abbilden, es ist keine Konfiguration erforderlich.
quelle
Ich hatte auch ein Problem beim Kompilieren von Modulen für verschiedene Optionen.
Was ich gefunden habe:
Es sieht so aus, als müssten wir seit Gradle 3.0.1 nicht
publishNonDefault true
in die lib-build.gradle
Datei einfügen .Nach dem Dekompilieren fand eine Klasse
BaseExtension
Folgendes:Und statt:
Wir sollten ... benutzen:
Nur das Wichtigste ist, einen
configurations {...}
Teil zum hinzuzufügenbuild.gradle
.Die letzte Variante der App-
build.gradle
Datei lautet also:Sie können auch Filtervarianten verwenden , um Build-Varianten einzuschränken.
Ps vergessen Sie nicht, Module in die
settings.gradle
Datei aufzunehmen, wie:quelle