- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个非常大的 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/
最近,我将我的 gradle 版本从 4.0.0 更新到了 7.0.3。此更新后,获取 dexOptions 已过时警告。尽管如此,我仍然可以编译该项目,但不知道如何修复此警告。这就是我目前的实现,
我正在生成一个用于测试的应用程序,但最终它显示错误 java.lang.OutOfMemoryError: GC 开销限制超出错误。 为了解决这个问题,我遵循了此link上的解决方案. 我已在模块 b
我的 Android 构建 ~~ 是 ~~ 非常慢。 3-5 分钟。 我删除了很多依赖项,现在可以在没有 multidex 的情况下构建 - 耶。 尽管如此,我问自己手动设置巨型模式是否有意义....
我在 Android Studio 中使项目使用一些 .so 文件。我犯了一个错误,我更改了项目中的 .so 文件。我在 eclipse 中有类似的项目,我将 .so 文件复制到 Android st
dexOptions.incremental等是什么意思任何机构都可以向我解释。 dex options android { dexOptions { incremental
尝试运行 gradle build 时,我在 Android Studio 2.2 中收到以下警告: 警告:android.dexOptions.incremental 属性已弃用,它对构建过程没有影
Google 正在从 Dalvik 迁移到 ART(Android 运行时)。 我试图了解它将如何提高性能。 我找到的最好的解释是下图: 其中一个发生变化的主要组件是 dexopt 到 dex2oat
首先,我在主模块(:app)上设置了完整版的Gradle设置,其他模块是:核心,常量,反馈......等 当 Gradle 构建运行时,标题中提到的所有设置都会应用于其他模块(从:app,到:core
Android shell 命令 dexopt 的作用是什么? 我在哪里可以找到手册? 最佳答案 dexopt 是一个系统内部工具,用于生成优化的 dex files . 源代码可在此处获得:http
我不知道从什么时候开始,但现在当我将我的应用程序部署到 Android 设备时,我在 logcat 控制台中看到了这些日志: 08-31 10:01:45.437 2157-2219/com.comp
在 build.gradle 中,我们可以添加该参数 android { dexOptions { incremental preDexLibraries
我无法从 android studio 运行应用程序到运行 android 2.3.6 的 samsumg 手机。我收到应用程序安装失败弹出窗口,请参阅下面的屏幕截图。 当我单击“确定”时,日志中出现
根据 this post它允许在 dex 文件中使用更多的字符串,但我真的不明白它的含义以及对构建的影响。 最佳答案 Jumbo mode pertains to the number of stri
我迁移到 Android studio 3.0。因此,该项目无法编译名为“:animator”的模块,并显示此错误: Error:Unable to resolve dependency for
我有一个非常大的 Android 项目,其中包含多个大型第 3 方 jar(如 Android 库)。 我相信我已经达到了 Dex 的最大方法限制(通过 eclipse 编译): [2012-11-1
我是一名优秀的程序员,十分优秀!