gpt4 book ai didi

android - 当 dex.force.jumbo=true 时,Dexopt 在非常大的 APK(无序 method_idx)上失败

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:35:05 31 4
gpt4 key购买 nike

我有一个非常大的 Android 项目,其中包含多个大型第 3 方 jar(如 Android 库)。
我相信我已经达到了 Dex 的最大方法限制(通过 eclipse 编译):

[2012-11-18 02:28:45 - Find In Files] Dx processing classes.dex...
[2012-11-18 02:28:48 - Dex Loader] Unable to execute dex: Cannot merge new index 66774 into a non-jumbo instruction!
[2012-11-18 02:28:48 - Find In Files] Conversion to Dalvik format failed: Unable to execute dex: Cannot merge new index 66774 into a non-jumbo instruction!

因此,我利用 SDK 工具 21(平台工具 16)编辑我的主项目 project.properties 以设置 dex.force.jumbo=true
该标志允许我生成 APK。但我无法正确安装它(在物理和模拟器上都一样)。似乎是 dex 优化器失败:

11-18 20:11:05.338: I/PackageManager(103): Running dexopt on: com.mypackage.myapp
11-18 20:11:08.577: E/dalvikvm(868): Out-of-order method_idx: 0x2ae0 then 0x1
11-18 20:11:08.577: E/dalvikvm(868): Trouble with item 1544 @ offset 0xf7ae24
11-18 20:11:08.577: E/dalvikvm(868): Swap of section type 2006 failed
11-18 20:11:08.577: E/dalvikvm(868): ERROR: Byte swap + verify failed
11-18 20:11:08.597: E/dalvikvm(868): Optimization failed
11-18 20:11:08.597: W/installd(39): DexInv: --- END '/data/app/com.mypackage.myapp-1.apk' --- status=0xff00, process failed
11-18 20:11:08.597: E/installd(39): dexopt failed on '/data/dalvik-cache/data@app@com.mypackage.myapp-1.apk@classes.dex' res = 65280
11-18 20:11:08.697: W/PackageManager(103): Package couldn't be installed in /data/app/com.mypackage.myapp-1.apk
11-18 20:11:09.018: D/dalvikvm(103): GC_EXPLICIT freed 1698K, 13% free 17034K/19463K, paused 7ms+135ms
11-18 20:11:09.068: D/AndroidRuntime(780): Shutting down VM

我是否试图将 dex.force.jumbo 标志用于非预期用途,或者此错误是否不可预测?
如果是这样,是否有更好的策略来生成包含大量类/方法的项目?

最佳答案

64K methods limit是一个Dex格式限制(它使用2个字节来查找一个方法)。
Nandeesh 评论指出 jumbo 只解决字符串,而不是方法。

备选方案 我尝试/考虑过(打起精神,它们都很糟糕):
1. Do It Yourself - 扔掉最胖的第 3 方库,自己编写其功能的确切部分。这是我最终采用的方法,因为我意识到我为一个小功能包含了很多代码。
2. Custom class loading in Dalvik - 编译一个单独的 Dex 并在运行时加载它。缺点:繁琐,需要反射(reflection)。
3. 代码修剪 - 打开冗长的类加载,运行应用程序并尝试删除第 3 方库或库中未真正使用的部分。缺点:耗时,容易出错,因为类是动态加载的。
4. Divide And Concur - 在单独的进程(服务)中打包第 3 方库。该服务将提供第三方库功能。从您的主程序对此服务执行调用。

我相信这是一个 640k 的案例应该对任何人都足够 或者 Dalvik 早期的部分不可能在地球上的每 2 部手机上都有这个设计团队。

如果您想阅读更多内容或只是向 Google 求助,我创建了这个缺陷:http://code.google.com/p/android/issues/detail?id=40409

关于android - 当 dex.force.jumbo=true 时,Dexopt 在非常大的 APK(无序 method_idx)上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13556360/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com