【发布时间】:2013-03-04 10:28:03
【问题描述】:
我和我的团队从另一个团队继承了一个大型 Android 项目。据报道,包含所有库的整个应用程序有大约 35000 个方法。我们现在的任务是在需要使用 Protocol Buffers 的应用中实现新服务。
问题是生成的 .jar 文件包含所有必需的 .proto 文件创建另外几个 35000 个方法,即 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
是的,应用程序架构可能应该进行重组,但这需要时间。目前,我们正在尝试找出一个临时解决此问题的解决方案。
有什么建议吗?
【问题讨论】:
-
Facebook 团队前几天刚刚发布了一条关于这个确切问题的消息。 facebook.com/notes/facebook-engineering/…
-
如果您的应用程序包含这么多方法(并且您无法摆脱其中一些方法),则解决方案可能必须将应用程序拆分为可以构建到单独 dex 文件中的较小部分.有关如何执行此操作的示例,请参阅 this blogpost。
-
@Rawkode:Facebook 问题是由于旧版 Android(froyo、姜饼)中的“LinearAlloc”缓冲区过小所致。 64K 方法参考限制已融入 Dalvik 指令本身。
标签: android protocol-buffers dalvik dex