2017-03-16 3 views
0

Ich baue gerade eine Android-App, wo ich meine Hauptanwendung habe und ich habe eine Android-Bibliothek, die die Hauptanwendung verwendet.Android-Bibliothek - Sie müssen die Compilier-Bibliothek sowohl in der Bibliothek als auch in der Haupt-App hinzufügen?

In meiner Bibliothek verwende ich eine bestimmte gradle zusammengestellt Android-Bibliothek wie folgt:

compile 'io.reactivex.rxjava2:rxandroid:2.0.1' 
compile 'io.reactivex.rxjava2:rxjava:2.0.1' 

ich meine Bibliothek dann in die Hauptanwendung hinzufügen wieder Gradle wie folgt verwendet:

compile(group: 'my.apps.package.name', name: 'app', version: "1.0.0") 

Die Rx Die Bibliothek wird nur in der Android-Bibliothek und nicht in der Haupt-App verwendet. Wenn ich jedoch meine Hauptanwendung ausführe, erhalte ich die folgende Fehlermeldung:

Caused by: java.lang.ClassNotFoundException: Didn't find class "io.reactivex.Observable" on path: DexPathList...

Um es zu beheben Ich muss die Rx-Bibliothek zu meiner Hauptanwendungen Gradle-Datei sowie meine Bibliotheken Gradle-Datei hinzufügen, aber das scheint nicht richtig, muss ich die Abhängigkeiten in meiner Bibliothek falsch deklarieren? Kann mir jemand in die richtige Richtung zeigen, um das zu erreichen?

Frage: Verwenden Sie MultiDex? A: Ja, es

// Enabling multidex support. 
    multiDexEnabled true 
+0

Sie müssen diese Bibliothek nicht zur Haupt-App hinzufügen. Was du getan hast, ist richtig. Verwenden Sie Multidex? Es scheint ein Problem mit multidex zu sein. –

+0

Ja multidex ist in der Haupt-App aktiviert, aber nicht in der Bibliothek –

+0

Können Sie versuchen, die Bibliothek zu kompilieren, indem Sie "compile project (': yourlibname') " verwenden? –

Antwort

2

Das Problem ist in der Art und Weise aktivieren Sie die Bibliothek schließen versuchen.

compile(group: 'my.apps.package.name', name: 'app', version: "1.0.0") 

Auf diese Weise werden die externen Abhängigkeiten nicht korrekt aufgelöst und in DexPath enthalten.

Sie sollten die viel einfacheren Ansatz verwenden,

compile project(':yourlibname') 

Dies wird Gradle sagen das Modul und alle externen Abhängigkeiten ordnungsgemäß zu kompilieren.

+0

Das Problem ist, ich muss die Bibliothek zu einem Hosting-Provider veröffentlichen und als solche kann ich nicht kompilieren Projekt (': yourlibname'), da dies nur lokale Kompilierung ist, ich erstellen ein aar der lib und veröffentlichen es, also muss ich wissen, wie man Abhängigkeiten in die aar einbezieht. –

+0

Ja. Sie können die Bibliothek zu Entwicklungszwecken lokal kompilieren. Wenn Sie beabsichtigen, es an andere zu verteilen, können Sie dies natürlich tun. Lass es mich wissen, wenn du Hilfe brauchst, aber das ist eine separate Frage. Wenn dieses Problem behoben ist, ziehen Sie in Betracht, die Antwort zu akzeptieren. –

Verwandte Themen