Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to solve the issue with Dalvik compiler limitation on 64K methods?

My team and I have inherited a large Android project from another team. The whole application with all the included libraries is reported to have around 35000 methods. We now have the task to implement a new service in the app where we need to use Protocol Buffers.

The problem is that the generated .jar file with all the required .proto files creates another couple of 35000 methods, that's 70000 methods. And if you are not aware, the Android compiler has a limitation of 65536 methods per .dex file. We are clearly over that limit and we are getting the following error trying to compile the 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 

Yes, the application architecture should probably be restructured but that will take time. And for now we are trying to figure out a solution to work around this problem temporarily.

Any suggestions?

like image 705
rfgamaral Avatar asked Mar 15 '13 16:03

rfgamaral


2 Answers

You can use another DEX file. This is how you do it:

http://android-developers.blogspot.co.il/2011/07/custom-class-loading-in-dalvik.html

like image 56
Udinic Avatar answered Oct 09 '22 05:10

Udinic


Enable Proguard (http://developer.android.com/tools/help/proguard.html) to remove unused methods. The protobuf generator creates thousands of methods that are never actually used.

Micro-protobuffers (https://code.google.com/p/micro-protobuf/) may also be useful.

like image 43
fadden Avatar answered Oct 09 '22 04:10

fadden