Ich habe ein base
Modul und ein Funktionsmodul namens query
Modul in meinem Instant App-Projekt.Die Verwendung von im Basismodul des Feature-Moduls definierten Farben schlägt fehl, nachdem die Android Instant App neu erstellt wurde
Meine QueryActivity
innerhalb query
Modul verwendet Farben, die in base
Modul sind.
@ColorInt
val textColor: Int = when (resultCode) {
FetchAddressIntentService.RESULT_SUCCESS -> android.R.color.white
FetchAddressIntentService.RESULT_FAILURE -> R.color.accent // this color is inside the base module
else -> R.color.accent // this color is inside the base module
}
Wenn ich run
das Projekt versuchen, funktioniert es ohne Probleme in Ordnung. Aber wenn ich das Projekt rebuild
, gibt es mir die folgende Fehlermeldung:
../net/epictimes/uvindex/query/QueryActivity.kt
Error:(133, 63) Unresolved reference: color
Error:(134, 27) Unresolved reference: color
Unter Hinweis auf diese Farbwerte.
Ich löste dies, indem ich eine andere colors.xml
Datei innerhalb des query
Moduls hinzufüge und die base
Farben davon referenziert. Es hat gut funktioniert. Sie können das Diff in this commit sehen.
<color name="query_location_success_text">@android:color/white</color>
<color name="query_location_fail_text">@color/accent</color>
Im Moment funktioniert es, aber ich bin mir nicht sicher warum. Ist das der richtige Weg? Meine Frage sollte nicht die Ressourcen innerhalb base
Modul von den Feature-Modulen zugänglich sein?
Versionen:
Android target/compile SDK: 26
Kotlin: 1.1.50
Instant Apps: 1.1.0
Das ist ein Open-Source-Projekt von mir ist, können Sie here ganzes Projekt zu sehen.
Danke
Das Ressourcenmanagement mit Instant-Apps ist in diesem Moment völlig fehlerhaft. Es ist derzeit ein nicht praktikables Stück ... Lint beschwert sich nicht über falsch verwendete R.x-Anweisungen. In vielen Fällen sind Ressourcen nur vom Basismodul verfügbar. mit innerhalb eines Feature-Moduls wird alles brechen, wenn das Include aus dem Basismodul abgerufen werden soll. Und wir haben nicht über die vollständige Zerstörung gesprochen, wenn Sie Proguard verwenden, das keine Querabhängigkeiten zwischen Modulen erkennen kann. –
Sie haben Recht. Jedes Modul erzeugt sein eigenes R.java und das Problem hier ist, dass ich die falsche R-Datei referenzierte. Danke für Ihre Hilfe. Aber ich finde es komisch, dass "run" funktioniert, aber "rebuild" scheitert mit dem ungelösten Referenzfehler. –