Um Ihnen den Kontext zu geben, was ich meine Projektstruktur beschreiben erreichen wollen zuerst will ich:Ist es möglich, eine Abhängigkeit zu verstecken, die sich im Ordner 'libs' in aar befindet?
Application
|
| - Library Module
| |
| | - Core Library Module
| | Module 1
| |- Jar dependency 1
| |
| | Module 2
| |- Jar dependency 2
Modul 1 und 2, wo erstellt 2 JAR-Dateien durch den Schatten gradle Plugin erstellt enthalten Dolch 2 Abhängigkeiten zu verlagern . Dies geschieht, weil die Anwendung Dolch 1 verwendet und sie nicht in regelmäßigen Basen gleichzeitig verwendet werden können.
Core-Bibliothek-Modul enthält die Kernfunktionalität für verschiedene Bibliotheken und deshalb ist eine separate Bibliothek, es verwendet auch Dolch 2 für Dependency-Injektion.
Bibliotheksmodul enthält die Funktionalität, die wir den Anwendungen von unseren Kunden anbieten, es verwendet auch Dolch 2 für die Abhängigkeitsinjektion.
Jetzt ist das eigentliche Problem die Anwendung, weil es Dolch 1 für Abhängigkeitsinjektion verwendet. Mit den Shadowed-Gläsern ist es also möglich, Dolch 1 und 2 im selben Projekt zu verwenden, da Shadow alle Klassen umbenennt und verschiebt, die Dolch 2 verwendet, zum Beispiel @Inject to @ Inject2.
In den Bibliotheken alles wie erwartet funktioniert, weil ich die verlegt und umbenannt Klassen Wie @ verwenden Module2, @ Inject2 usw.
aber in der Anwendung, die ich Dolch 1 die Tags verwenden sind @Inject, @Module als wird normalerweise in Dolch 1 verwendet. Die Abhängigkeit, die in meine build.gradle importiert wird, ist Dolch1. Aber wenn ich die Anwendung erstelle bekomme ich eine Fehlermeldung, dass ich auch die modifizierten Dagger 2 Tags wie @ Module2, @ Inject2 hinzufügen muss. Und genau das will ich nicht.
Gibt es eine Möglichkeit, diese Abhängigkeiten mithilfe von Gradle zu verbergen oder zu ignorieren, damit die Anwendung die geänderten Jars für Dolch 2 nicht sehen kann, aber sie trotzdem in den Bibliotheken verwendet werden können?
Bisher ist die einzige Lösung, die ich habe ist Dagger 2 aus der Bibliothek zu entfernen und die Dependency Injection von mir zu implementieren, aber das ist zeitaufwendig und nicht genau, was ich
bearbeiten will:
komplette Fehler:
Error:(25, 8) error: com.sample.model.ApplicationModule is listed as a module, but is not annotated with @Module2
Edit 2:
relocate 'javax.inject.Inject', 'javax.inject.Inject2'
relocate 'javax.inject.Named', 'javax.inject.Named2'
relocate 'javax.inject.Provider', 'javax.inject.Provider2'
relocate 'javax.inject.Qualifier', 'javax.inject.Qualifier2'
relocate 'javax.inject.Scope', 'javax.inject.Scope2'
relocate 'javax.inject.Singleton', 'javax.inject.Singleton2'
relocate 'dagger.Lazy', 'dagger.Lazy2'
relocate 'dagger.MembersInjector', 'dagger.MembersInjector2'
relocate 'dagger.Module', 'dagger.Module2'
relocate 'dagger.Provides', 'dagger.Provides2'
relocate 'dagger.Provides$Type', 'dagger.Provides$Type2'
relocate 'dagger.internal', 'dagger.internal2'
relocate 'dagger.producers', 'dagger.producers2'
relocate 'dagger.Component', 'dagger.Component2'
Ich aktualisierte die Frage mit dem vollständigen Fehler, aber es ist nicht sehr nützlich – acabezas
Haben Sie umbenannt oder verwendet die richtige '@ Component' Annotation Referenzierung' ApplicationModule.class'? – tynn
Ja, eigentlich ist die Idee, dass die App nicht wissen muss, dass ich die Dolch-2-Bibliotheken umbenannt habe, also verwendet die Anwendung alle Annotationen, wie sie normalerweise mit Dolch verwendet werden 1 – acabezas