Gradle: Fügen Sie die Abhängigkeit für einen bestimmten Geschmack der Bibliothek hinzu
Habe ich ein Bibliothek-Projekt und eine Anwendung. Ich hätte gerne 2 Produkte Aromen (storedev) für Bibliothek und Anwendung. Wenn ich Baue die store Aroma für die Anwendung, die ich verwenden möchten, die store Geschmack aus der Bibliothek. Auch wenn ich Baue die dev Aroma für die Anwendung, die ich verwenden möchten, die dev Geschmack aus der Bibliothek. Ich habe versucht, das gleiche Produkt-Aromen, für beide Bibliothek und Anwendung, aber es funktioniert nicht.
Hier ist meine Konfiguration:
Bibliothek
apply plugin: 'android-library'
android {
compileSdkVersion 19
buildToolsVersion "19.1.0"
defaultConfig {
applicationId "ro.amarkovits.graddletest.lib"
minSdkVersion 14
targetSdkVersion 19
versionCode 1
versionName "1.0"
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
productFlavors{
store{
}
dev{
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
}
und ich habe diese Dateien:
src/main/res/values/strings.xml
und
src/store/res/values/strings.xml
Anwendung
apply plugin: 'android'
android {
compileSdkVersion 19
buildToolsVersion '19.1.0'
defaultConfig {
applicationId 'ro.amarkovits.mymodule.app'
minSdkVersion 14
targetSdkVersion 19
versionCode 1
versionName '1.0'
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
productFlavors{
store{
}
dev{
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile project(':lib')
}
In dieser situation bekomme ich diesen Fehler: Error:(12, 23) Keine Ressource gefunden, die dem entspricht, Vorname (bei 'text' mit dem Wert "@string/app_name'). Die app_name definiert ist, in string.xml in der Bibliothek (in beiden main und store Verzeichnis)
Wenn ich entfernen Sie die productFlavors aus der Bibliothek, es baut aber immer die values.xml aus der main Verzeichnis
InformationsquelleAutor der Frage amarkovits | 2014-06-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Ihrer Bibliothek, die Sie brauchen, um zu sagen, gradle bauen jedes mal, wenn jede Variante:
Dann in Ihrer Anwendung, da vor kurzem ich denke, Sie können dies tun:
Finden sich in der offiziellen Dokumentation unter Bibliothek Veröffentlichung.
Edit:
Seit version 0.14.3 (2014/11/18)können Sie nun Geschmack-buildType-Kompilieren-Richtlinie:
In deinem build.gradle vor dem android {} scope fügen Sie den folgenden:
Dann können Sie erklären und benutzen verschiedene Versionen Ihrer Bibliothek pro Aroma-BuildType:
Edit:
Management von Abhängigkeiten zwischen den Modulen hat sich geändert, seit Android-Gradle-Plugin 3.0.0. Versucht es automatisch, die Spiele Aromen zwischen Ihrer app und die Bibliotheken/Module abhängt.
Sehen die Dokumentation für die ganze Erklärung!
InformationsquelleAutor der Antwort galex
Definieren spezifische Abhängigkeit für jeden Geschmack, den Sie verwenden können, "nameOfTheFlavorCompile" statt "compile"
InformationsquelleAutor der Antwort
Ich hatte ein ähnliches Problem vor einer Weile, was passiert, ist, dass der compiler ignoriert Produkt-Varianten für die Bibliothek-Projekt. Außerdem, selbst wenn Sie hinzufügen, mehr build-Typen, es hält suchen und zusammenstellen release/debug-Quellen.
Der Grund ist einfach:
Den compiler nie Blick für alles, was Sie im store-Verzeichnis der Bibliothek-Projekt. Also, Sie müssen einen Weg finden, um es.
Einen Weg um ihn herum wäre, sind sowohl Implementierungen mit einer Stufe von Abstraktion, die in Ihrer Bibliothek (über Schnittstellen, mehrere Konstruktoren, etc), und dann lassen Sie Ihr app-Projekt entscheiden, welcher Teil der Bibliothek zu führen. Wenn Sie proguard, es wird automatisch entfernen Sie die nicht benötigten code, wenn es entkoppelt ist gut genug (und möglicherweise so auch wenn es nicht ist).
InformationsquelleAutor der Antwort Hessan Feghhi