Android 2.3(API 9)下的Multidex

6

请问Android 2.3是否支持多dex?

我搜索了一下,但没有找到相关信息。我的项目与此配置相同:https://github.com/mustafa01ali/MultiDexTest

项目可以成功构建,但最终的apk无法在2.3或更低版本的设备上安装。

在安装时,我收到以下错误提示:

Failure [INSTALL_FAILED_DEXOPT]

在Android Studio中,这个显示在logcat中:

E/dalvikvm﹕ LinearAlloc exceeded capacity (5242880), last=1384
W/installd﹕ DexInv: --- END '/data/app/xxx.apk' --- status=0x000b, process failed
E/installd﹕ dexopt failed on '/data/dalvik-cache/data@app@xxx.apk@classes.dex' res = 11

1
请谷歌一下这个内容。这是官方支持的:https://plus.google.com/+IanLake/posts/JW9x4pcB1rj。MultiDex: http://developer.android.com/reference/android/support/multidex/MultiDexApplication.html。 - Jared Burrows
1
请重新阅读您刚刚问我的内容。API 4+是指API 4及以上版本。请参阅:http://developer.android.com/reference/android/support/multidex/MultiDex.html。 - Jared Burrows
1
抱歉,我花了一整天的时间来解决这个问题。我的项目使用“multiDexEnabled true”编译,使用Android Studio RC2和构建工具21.1.1,但在2.3设备上安装apk总是失败。我尝试了一些在github上找到的示例,它们也有同样的问题。也许是构建工具中的某个bug?我真的不知道我错过了什么,无法使其正常工作。 - Zasuk
1
你能发一下你的 build.gradle 文件吗?你的 Android Gradle 插件是哪个版本? - Jared Burrows
获得相同的错误。在Jellybean上能工作但在Gingerbread上失败了。 - neobie
显示剩余5条评论
1个回答

5

您遇到了不同的大小限制(LinearAlloc),根据此错误,Multi-dex无法解决该问题:

https://code.google.com/p/android/issues/detail?id=78035

来自该错误的第7个评论:

dx中已经有一个选项允许强制生成更小的dex文件: --set-max-idx-number= 不幸的是,改变默认值并不是一种解决方案,因为线性分配限制可以在非常不同的层次结构和其他标准下达到。

此外,对于大多数应用程序,转向multidex只能帮助解决安装时的线性分配限制。但是应用程序仍然会在执行时崩溃相同的限制。我知道multidex可以帮助解决linearalloc的唯一有效用例是当apk不包含一个应用程序,而是运行在单独进程中的不同部分。

目前尚不清楚是否有任何方法可以长期解决这个限制,您可能需要简化您的应用程序。这里还有另一个StackOverflow问题,其中提供了一些信息和一些解决方法,可能可以让您暂时恢复正常:

如何避免android的LinearAlloc Exceeded Capacity错误


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接