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?

Kommentar zu dem Problem
Das Facebook-team einfach eine Nachricht gepostet, in Bezug auf genau dieses Problem, den anderen Tag. facebook.com/notes/facebook-engineering/... Kommentarautor: Rawkode
Wenn Ihre app enthält, dass viele Methoden (und Sie können nicht loswerden, einige von Ihnen) die Lösung wird wohl sein, die Aufteilung der app in kleinere Teile, die gebaut werden können in separaten dex-Dateien. Siehe diesem Beitrag für ein Beispiel, wie dies zu tun. Kommentarautor: Michael
@Rawkode: das Facebook-Problem wurde durch ein winziges "LinearAlloc" Puffer in älteren Android-Versionen (froyo, gingerbread). Die 64K-Methode Referenz-Grenzwert gebacken, die in der Dalvik-Anweisungen selbst. Kommentarautor: fadden

InformationsquelleAutor der Frage Ricardo Amaral | 2013-03-15

Schreibe einen Kommentar