Ich hatte dieses Problem, bei dem ich das 64k-Methodenlimit in Dalvik beim Kompilieren der gesamten verwendeten Bibliothek überflutete. Ich fing an, dieses Problem zu haben, als ich die Unterstützungsbibliothek importierte, wie einige bereits in anderen enthalten sind, überstieg es das Limit.
Momentan schließe ich diejenigen aus, die ich sicher kenne, aber es scheint komisch, das von Hand machen zu müssen.
%Vor%Schritt 1
Fügen Sie die Abhängigkeit für die MultiDex-Unterstützungsbibliothek in Ihrem build.gradle
hinzu %Vor%Schritt 2
Aktivieren Sie Multi-Dexing, indem Sie im Abschnitt buildType oder productFlavor Ihrer Gradle-Konfiguration das Flag multiDexEnabled setzen.
%Vor%Abhängig von Ihrem Projekt haben Sie jetzt 3 Optionen:
Wenn Sie keine eigene Application-Klasse erstellt haben, deklarieren Sie einfach android.support.multidex.MultiDexApplication
als Ihre Anwendungsklasse in AndroidManifest.xml
Wenn Sie bereits eine eigene Anwendungsklasse haben, erweitern Sie android.support.multidex.MultiDexApplication
anstelle von android.app.Application
Wenn Ihre Anwendungsklasse eine andere Klasse erweitert und Sie sie nicht ändern möchten oder können, überschreiben Sie attachBaseContext () wie unten gezeigt:
%Vor%Sie können das Terminal öffnen und den Befehl gradlew app: dependencies ausführen, um zu testen, welche Abhängigkeiten bereits in den anderen als transitive Abhängigkeiten für Ihr Projekt mit den jeweiligen Versionen der einzelnen enthalten sind.
Ich habe zum Beispiel das folgende Abhängigkeitsdiagramm für eines meiner Projekte für die Bibliothek com.android.support:design, die ich verwendet habe:
%Vor%hey du kannst meinen Trick versuchen, könnte es für dich nützlich sein
Als erstes sollten Sie externe Bibliotheken vermeiden. Wie in Bibliotheken haben die gleichen Abhängigkeiten. Versuchen Sie also, diese Bibliothek mit Android-Anwendungscode zu verbinden. Dadurch sparen Sie viel Platz für Methoden.
Verwenden Sie nützliche Abhängigkeiten und Bibliotheken wie wenn Sie möchten, dass Google Play-Dienste dann nur nützliche Dienste nicht alle einschließen. Siehe Beispiel
%Vor%Vermeide dies
%Vor%Entfernen Sie unerwünschte Abhängigkeiten. Verwenden Sie sehr wählbare Abhängigkeiten in Ihrem Code.
Wenn alle Dinge nicht wirklich gut funktionieren, dann benutze multidex in deinem Code. Aber er erzeugt mehrere dex-Dateien. Also wird dein Code viel Zeit für die Kompilierung brauchen.
Danke, das wird dir helfen.
und fügen Sie diese Methode auch Ihrer Anwendungsklasse hinzu
%Vor%Klicken Sie auf Datei und dann auf Projektstruktur Klicken Sie links im Popup auf app . Sie sehen mehrere Tabs klicken Sie auf Abhängigkeiten Registerkarte Dann klicken Sie auf plus rechts oben wählen Sie Bibliothek Abhängigkeit suchen Sie Ihre Wunsch-Bibliothek Es wird zeigen, welche Bibliotheken welche sind in Ihrer IDE verfügbar
Obwohl die Bibliothek Multiidex Support Library das Problem löst, ist es das nicht perfekt. Als Erstes sollten Sie ermitteln, wie viele Methoden Ihre App derzeit hat und wie viele von ihnen von jeder ihrer Abhängigkeiten hinzugefügt werden. Früher mussten Sie dies manuell tun, aber jetzt gibt es eine Reihe von Tools zur Verfügung:
‘compile’
-Anweisung auf dieser Website ein, um die Anzahl der Methoden, die Abhängigkeiten und die JAR-Größe zu erfahren und DEX-Größe. Unabhängig davon, mit welchem Tool Sie arbeiten, verwenden Sie die Informationen, die Sie verwenden bietet eine Überprüfung der Abhängigkeiten Ihrer App. Du solltest Suchen Sie nach nicht verwendeten Bibliotheken oder solchen, die minimiert oder sogar reduziert werden können ersetzt durch Ihre eigene einfachere Lösung. Wenn Sie nicht
Proguard
verwenden Um unbenutzten Code zu entfernen, aktivieren Sie ihn zunächst und prüfen Sie, ob er den Code löscht Problem (Überprüfen Sie dies ). % Co_de% zu benutzen ist gut ... nicht lustig, aber wenn du es schaffst es funktioniert richtig, es wird die Anzahl der Methoden erheblich reduzieren. Ich falle Anderenfalls müssen Sie die MultiDex-Unterstützungsbibliothek verwenden.
Schauen Sie sich grelle Aufgaben an, um nicht verwendete Pakete in der Google Play Services-Bibliothek zu entfernen.
Fazit
Während Proguard
das DEX 64K-Problem in den meisten Fällen behebt, sollte es als letztes Mittel behandelt werden. Bevor Sie versuchen, es zu verwenden, sollten Sie Ihr Projekt auf unerwünschte Abhängigkeiten überprüfen und so viel ungenutzten Code wie möglich mit Multidex Support Library
entfernen. Wenn Sie fortfahren und es verwenden, stellen Sie sicher, dass Sie Ihre App auf älteren Geräten testen.
Hoffe, das wird dir helfen.
Tags und Links android gradle appcompat android-multidex android-support-library