2017-10-19 10 views
0

Ich weiß, es scheint, dass diese Frage bereits gestellt wurde, aber sie sind etwas anders, und ich konnte keine Lösung für mein Problem finden.ClassDefNotFoundError mit lokalen aar

Ich habe eine Android-App, die von mehreren AAR-Bibliotheken abhängt, die wiederum von (reinen Java) -Gläsern abhängig sind. Bei der Entwicklung in Android Studio schließe ich alle Aars und Jars als eine Abhängigkeit von meinem lokalen Nexus ein. Dies funktioniert wie vorgesehen.

Für die Bereitstellung haben wir jedoch lokale aar-Dateien, die ihre jar-Abhängigkeiten bereits in ihrem libs-Ordner enthalten. Im Inneren des eingesetzten build.gradle haben wir folgende Daten ein, sie schließen definiert:

repositories { 
    jcenter() 
    flatDir { 
     dirs '../../libs' 
    } 

    maven { 
     url "https://maven.google.com" 
    } 
} 

dependencies { 

    compile 'com.android.support:appcompat-v7:26.1.0' 
    compile ":NameOfAarFile:[email protected]" 
    compile ":NameOfAnotherAar:[email protected]" 

    compile fileTree(include: ['*.jar'], dir: 'libs') 
} 

Wenn ich das Projekt in Android Studio öffnen, gradle hat seine Kontrollen und lässt mich bauen. Es öffnet sich, aber sobald Sie versuchen, Funktionalität aus einem Glas, das in einem aar war, ich bekomme die NoClassDefFoundError.

Also ich kompilierte die apk von Ausgängen, führen sie durch dex2jar und schaute auf die Klassen mit jd-gui nur um herauszufinden, dass sie an ihrem erwarteten Ort sind.

Jetzt frage ich mich wirklich, woher die NoClassDefFoundError kommt, oder - noch wichtiger - wie man es loswerden?

Die official documentation erwähnt:

Ein Bibliotheksmodul eine JAR-Bibliothek

enthalten können Sie ein Bibliotheksmodul entwickeln, die sich eine JAR-Bibliothek enthält; Sie müssen jedoch den Build Pfad der abhängigen App-Module manuell bearbeiten und einen Pfad zur JAR-Datei hinzufügen.

Ich möchte die Gläser innerhalb der aar, wenn möglich, wirklich verlassen.

Bei Bedarf werde ich weitere Informationen zur Verfügung stellen.

+0

Wie hoch ist die Gesamtzahl der Methoden? Wenn es über 65K ist, müssen Sie Multidex aktivieren. –

+0

Wie man sie zählt? Zählen nur Java-Methoden zu diesem Limit? Aber ich vermute 65k ist viel mehr als ich habe (ich habe nicht mal 10k Methoden) –

Antwort

0

Ich fand heraus, was passiert ist. Es funktioniert, wenn Sie InstantRun in Android Studio deaktivieren.

Verwandte Themen