Gil*_*hum 9 android adt dex dexopt
我有一个非常大的Android项目,包含多个大型第三方jar(作为Android库).
我相信我已经达到了Dex的最大方法限制数量(通过eclipse进行编译):
[2012-11-18 02:28:45 - 在文件中查找] Dx处理classes.dex ...
[2012-11-18 02:28:48 - Dex Loader]无法执行dex:无法将新索引66774合并到一个非巨型指令!
[2012-11-18 02:28:48 - 在文件中查找]转换为Dalvik格式失败:无法执行dex:无法将新索引66774合并到非jumbo指令中!
因此,利用SDK工具21(平台工具16)编辑了我的主项目project.properties进行设置dex.force.jumbo=true.
允许我生成APK的标志.但我无法正确安装(在物理和模拟器上).似乎有一个dex优化器失败:
11-18 20:11:05.338:I/PackageManager(103):运行dexopt on:com.mypackage.myapp
11-18 20:11:08.577:E/dalvikvm(868):乱序method_idx:0x2ae0然后0x1
11-18 20:11:08.577:E/dalvikvm(868):项目1544的问题@偏移量0xf7ae24
11-18 20:11:08.577:E/dalvikvm(868):2006年部分类型的交换失败
11-18 20 :11:08.577:E/dalvikvm(868):错误:字节交换+验证失败
11-18 20:11:08.597:E/dalvikvm(868):优化失败
11-18 20:11:08.597:W/installd( 39):DexInv:--- END'
/data/app/com.mypackage.myapp-1.apk'--- status = 0xff00,进程失败11-18 20:11:08.597:E/installd(39): dexopt在'/data/dalvik-cache/data@app@com.mypackage.myapp-1.apk@classes.dex'res = 65280上失败
11-18 20:11:08.697:W/PackageManager(103):软件包无法安装在/data/app/com.mypackage.myapp-1.apk
11-18 20:11:09.018:D/dalvikvm( 103):GC_EXPLICIT释放1698K,13%免费17034K/19463K,暂停7ms + 135ms
11-18 20:11:09.068:D/AndroidRuntime(780):关闭VM
我是否试图将该dex.force.jumbo标志用于其不适合的目的,或者这个错误是不可预测的?
如果是这样,是否有更好的策略来生成包含大量类/方法的项目?
64K方法限制是Dex格式限制(它使用2个字节来查找方法).
Nandeesh评论指出,jumbo只解决字符串,而不是方法.
我尝试/考虑过的替代品(支撑你们自己,他们都很糟糕):
1 .自己动手 - 丢掉最胖的第三方库并自己编写其功能的确切部分.这是我最终采用的方法,因为我意识到我包含了很多小功能的代码.
2. 在Dalvik中自定义类加载 - 编译单独的Dex并在运行时加载它.缺点:繁琐,需要反思.
3. 代码修剪 -打开详细的类加载,运行应用程序,并尝试删除第三方库,或者说并没有真正使用的库的部分.缺点:由于动态加载类,因此非常耗时且容易出错.
4. 划分和同意 - 在单独的流程(服务)中打包第三方库.此服务将提供第三方库功能.从主程序对此服务执行调用.
我相信这是一个640k的情况应该对任何人都足够或者在 Dalvik的早期设计团队中,这个星球的每一部手机都不会有这个.
如果您想要阅读更多内容或只是向Google发送负载,我就会创建此缺陷:http://code.google.com/p/android/issues/detail?id = 40409
| 归档时间: |
|
| 查看次数: |
7503 次 |
| 最近记录: |