La mia squadra e io abbiamo ereditato un grande progetto Android da un'altra squadra. Si dice che l'intera applicazione con tutte le librerie incluse abbia circa 35000 metodi. Ora abbiamo il compito di implementare un nuovo servizio nell'app in cui è necessario utilizzare i buffer del protocollo.Come risolvere il problema con la limitazione del compilatore Dalvik sui metodi 64K?
Il problema è che il file .jar generato con tutti i file .proto richiesti crea un altro paio di 35000 metodi, ovvero 70000 metodi. E se non sei a conoscenza, il compilatore Android ha una limitazione di 65536 metodi per file .dex. Siamo chiaramente oltre quel limite e stiamo ottenendo il seguente errore cercare di compilare l'applicazione:
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
Sì, l'architettura applicativa dovrebbe probabilmente essere ristrutturati, ma ci vorrà del tempo. E per ora stiamo cercando di capire una soluzione per aggirare questo problema temporaneamente.
Qualche suggerimento?
Se la vostra l'app contiene molti metodi (e non è possibile sbarazzarsi di alcuni di essi) la soluzione probabilmente dovrà suddividere l'app in parti più piccole che possono essere costruite in file dex separati. Vedi [questo blogpost] (http://android-developers.blogspot.se/2011/07/custom-class-loading-in-dalvik.html) per un esempio di come farlo. – Michael
Il team di Facebook ha appena pubblicato un messaggio relativo a questo problema esatto, l'altro giorno. https://www.facebook.com/notes/facebook-engineering/under-the-hood-dalvik-patch-for-facebook-for-android/10151345597798920 – Rawkode
@Rawkode: il problema di Facebook era dovuto a un sottotono "LinearAlloc" buffer nelle versioni precedenti di Android (froyo, gingerbread). Il limite di riferimento del metodo 64K è riportato nelle istruzioni di Dalvik. – fadden