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.
Wie hoch ist die Gesamtzahl der Methoden? Wenn es über 65K ist, müssen Sie Multidex aktivieren. –
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) –