Wie löst man das Problem mit der Dalvik-Compiler-Beschränkung für 64K-Methoden?
Mein team und ich haben geerbt, eine große Android-Projekt aus einem anderen team. Das ganze Programm mit allen mitgelieferten Bibliotheken berichtet wird, haben rund 35000 Methoden. Wir haben nun die Aufgabe zu implementieren, ein neuer service in die app, wo wir brauchen, um zu verwenden, Protocol Buffers.
Das problem ist, dass der generierte .jar-Datei mit allen erforderlichen .proto-Dateien erstellt, noch ein paar 35000 Methoden, 70000-Methoden. Und wenn Sie nicht bewusst sind, die Android-compiler hat eine Beschränkung auf 65536 Methoden pro .dex-Datei. Wir sind deutlich über diesem limit, und wir erhalten die folgende Fehlermeldung Sie versuchen, kompilieren Sie die app:
Unable to execute dex: method ID not in [0, 0xffff]: 65536
Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536
Ja, die Anwendung Architektur muss wohl umstrukturiert werden, aber das wird Zeit in Anspruch nehmen. Und jetzt sind wir versuchen, herauszufinden, eine Lösung, um dieses problem zu umgehen, vorübergehend.
Irgendwelche Vorschläge?
InformationsquelleAutor der Frage Ricardo Amaral | 2013-03-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie einen anderen DEX-Datei. Dies ist, wie Sie es tun:
http://android-developers.blogspot.co.il/2011/07/custom-class-loading-in-dalvik.html
InformationsquelleAutor der Antwort Udinic
Aktivieren Proguard ( http://developer.android.com/tools/help/proguard.html ), entfernen Sie nicht verwendete Methoden. Die protobuf-generator erzeugt Tausende von Methoden, die sind eigentlich nie verwendet.
Micro-protobuffers (https://code.google.com/p/micro-protobuf/) kann auch nützlich sein.
InformationsquelleAutor der Antwort fadden
Platz hatte ähnliche Probleme und Sie gebaut Draht Umgang mit der Methode explosion, verursacht durch protobufs. Sie behaupten, getötet zu haben 10,000 Methoden.
InformationsquelleAutor der Antwort Abhay Buch
In Versionen von Google Play services vor 6.5, Sie hatte zu kompilieren, das gesamte Paket von APIs in Ihre app. In einigen Fällen, so tun, erschwert um die Anzahl der Methoden in Ihrer app (einschließlich der framework-APIs, Bibliothek Methoden, Ihren eigenen code) unter der 65,536 begrenzen.
Ab version 6.5, können Sie stattdessen gezielt kompilieren Google Play-service-APIs in Ihre app. Zum Beispiel, um nur das Google Fit und Android Wear-APIs, ersetzen Sie die folgende Zeile in deinem build.gradle-Datei:
mit diesen Zeilen:
weitere Referenz, klicken Sie hier
InformationsquelleAutor der Antwort akshay
Ist dies der erste Einsatz von Protocol buffers, könnten Sie Blick auf alternative JavaME
Implementierungen d.h.
gibt es andere, die aufgeführt sind in Third-party-add-ons. Wenn nicht einer von Ihnen, aber Sie scheinen kleiner zu sein und nicht alle Methoden erstellt, die von der standard-Protokoll-Puffer.
InformationsquelleAutor der Antwort Bruce Martin
Wir haben vor kurzem Hinzugefügt Nano Protobufs zu Android, die deutlich reduziert die Anzahl der Methoden erzeugt.
InformationsquelleAutor der Antwort Wink Saville
Wenn Sie mit eclipse ist dies die einfachste Arbeit rund um Klicken Sie Hier!
InformationsquelleAutor der Antwort mboy