Wie man DEX 64K LIMIT durch Importieren der richtigen Bibliothek vermeidet

7

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.

Gibt es eine Möglichkeit zu überprüfen, ob eine Bibliothek im aktuellen Projekt nicht verwendet wird oder bereits durch andere Bibliotheksabhängigkeiten importiert wurde?

Momentan schließe ich diejenigen aus, die ich sicher kenne, aber es scheint komisch, das von Hand machen zu müssen.

%Vor%

Bisherige Lösungen:

  1. Verwenden Sie ein Gradle-Plugin - Wir haben vor einiger Zeit ein extrem einfach zu benutzendes Gradle-Plugin geschrieben, das die Anzahl der Methoden nach Paket zusammen mit der Gesamtzahl auflistet. Mehr Informationen dazu finden Sie hier.
  2. www.methodscount.com - Sie fragen sich, wie viele Methoden eine bestimmte Bibliothek Ihrer Anwendung hinzufügen wird? Geben Sie einfach die 'compile'-Anweisung auf dieser Website ein und Sie erhalten Informationen zu Anzahl, Abhängigkeiten, JAR-Größe und DEX-Größe.
  3. Android Studio Plugin - Dieses ausgezeichnete Plugin zeigt die Anzahl der Methoden jeder Abhängigkeit in Android Studio.
  4. Verwenden der MultiDex Support-Bibliothek Wenn Sie Android Studio verwenden, ist der Prozess sehr einfach. Wenn dies nicht der Fall ist, empfehle ich dringend eine Migration, da Google möglicherweise bald die Unterstützung für das Eclipse ADT-Plug-in und das alte Ant-basierte Build-System fallen lassen wird.

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

%Vor%

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%     
Jaythaking 12.05.2016, 15:52
quelle

5 Antworten

9

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%     
Chebyr 18.05.2016, 11:41
quelle
6

hey du kannst meinen Trick versuchen, könnte es für dich nützlich sein

  1. 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.

  2. 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%
  1. Entfernen Sie unerwünschte Abhängigkeiten. Verwenden Sie sehr wählbare Abhängigkeiten in Ihrem Code.

  2. 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.

    
Saveen 01.10.2016 16:46
quelle
4
%Vor%

und fügen Sie diese Methode auch Ihrer Anwendungsklasse hinzu

%Vor%     
RejoylinLokeshwaran 24.05.2016 11:26
quelle
2

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

    
Misbah Farooqi 22.05.2016 09:32
quelle
2

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:

  1. Benutze ein Gradle-Plugin - Das ist ein extrem einfach zu benutzendes Gradle-Plugin, das die Nummer auflistet der Methoden nach Paket zusammen mit der Gesamtzahl. Sie können weitere Informationen darüber finden hier .
  2. www.methodscount.com - Geben Sie einfach die ‘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.
  3. Android Studio-Plugin - Dieses hervorragende Plugin zeigt die Anzahl der Methoden für jede Abhängigkeit in Android Studio.
  

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.

    
Pravin Divraniya 03.10.2016 11:53
quelle