1

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' 
+0

Ich aktualisierte die Frage mit dem vollständigen Fehler, aber es ist nicht sehr nützlich – acabezas

+0

Haben Sie umbenannt oder verwendet die richtige '@ Component' Annotation Referenzierung' ApplicationModule.class'? – tynn

+0

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

Antwort

0

ApplicationModule scheint ein Dolch 1 Modul zu sein. Der Fehler scheint von Dolch 2 zu kommen. So arbeitet der Dolch-2-Annotationsprozessor offensichtlich auf dem nicht umbenannten @Component. Sie müssen sicherstellen, dass der Prozessor nur mit Dolch 2-Komponenten arbeitet.

+0

Sie hatten Recht, ich vermisste die @ Komponent Annotation umzubenennen, ich habe umbenannt, aber ich bekomme immer noch den Fehler. Ich habe das Skript hinzugefügt, mit dem ich die Klassen umbenenne. Kannst du mir sagen, was ich vermisse? – acabezas

+0

Sie müssen den [Compiler] (https://github.com/google/dagger/tree/master/compiler) verarbeiten. Vielleicht hilft das ein bisschen http://fernandocejas.com/2016/08/03/android-dagger-1-and-2-living-together/ – tynn

+0

Danke, es hat endlich funktioniert. – acabezas

Verwandte Themen