如何解决Dalvik编译器限制64K方法的问题?

Ric*_*ral 27 android dalvik protocol-buffers dex

我的团队和我继承了另一个团队的大型Android项目.据报道,包含所有包含库的整个应用程序有大约35000种方法.我们现在的任务是在应用程序中实现我们需要使用Protocol Buffers的新服务.

问题是生成的.jar文件包含所有必需的.proto文件,会创建另外35个方法,即70000个方法.如果您不知道,Android编译器每个.dex文件的限制为65536个方法.我们显然超过了这个限制,我们在尝试编译应用程序时遇到以下错误:

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
Run Code Online (Sandbox Code Playgroud)

是的,应用程序架构可能应该进行重组,但这需要时间.目前我们正试图找出解决方案来暂时解决这个问题.

有什么建议?

Udi*_*nic 12

您可以使用其他DEX文件.这是你如何做到的:

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

  • 这是一个用于计算每个jar中方法数量的脚本:https://gist.github.com/toms972/c83504df2da1176a248a (4认同)

fad*_*den 7

启用Proguard(http://developer.android.com/tools/help/proguard.html)以删除未使用的方法.protobuf生成器创建了数千种从未实际使用过的方法.

微型原型(https://code.google.com/p/micro-protobuf/)也可能有用.

  • 我似乎无法在这个问题上找到任何提及使用带有Eclipse的调试/运行配置的proguard的问题...... (4认同)