Android 64k的string限制
来源:互联网 发布:java中常用的加密算法 编辑:程序博客网 时间:2024/05/10 14:24
Android over 64k methods是一个大家众所周知的问题,这个问题在官方已经有了标准的解决方案,大家可以参考官方的User Guide Configure Apps with Over 64k Methods 虽然这个解决方案并不能完美的解决这个问题(例如:ClassNotFound),但是他几乎可以让绝大部分应用可以正确运行起来。而另外一个问题似乎更好解决以至于没有那么出名。
The limit for strings in a dex files
Android中的64k的限制并不简单是对于方法数的限制,其中还有一个对于string resource的数量限制。如果你的应用使用了超过了2\^16个string的定义后,你就会得到下面这个异常 com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.dex.DexIndexOverflowException: Cannot merge new index 65886 into a non-jumbo instruction!
它虽然和64k methods的问题并不是同一个问题,但是他们都有一个类似的原因,以及很类似的异常com.android.dex.DexIndexOverflowException
。
然而针对这个问题Dex提供了一个jumbo opcodes
的选项以支持32位的string resource引用很简单的进行了修复。只需要简单的在Android Gradle的build script里面开启这个属性
android { // ... dexOptions { jumboMode = true }}
就可以解决这个问题。
Why not always happen
但是为什么这个问题没有被大家发现和重视呢?
其实是因为大部分的应用在遇到string超过这个限制的时候也许早就碰到了over 64k methods这个问题了。通过尝试我发现一旦设置
android { // ... defaultConfig { // ... multiDexEnable = true }}
那么上面的这个string数量的问题也同时被解决了。
针对这个问题我尝试进行搜索答案,但是目前还是没有找到一个很好的解释,因此我只能猜测是在划分dex文件的时候,也把不同的resource索引划分到了不同的dex文件中去。
暂时猜测如此 如果有大神知道原因一定要告诉我
- Android 64k的string限制
- Android 64K解除限制
- Android 方法数超过64k限制的解决办法
- Android 突破64K方法数的限制
- Android 突破64K方法数的限制
- android 64k方法数限制的解决方案
- Android配置方法数超过64K的限制
- Android 突破64K方法数的限制
- Android 突破 DEX 文件的 64K 方法数限制
- Android 突破64K方法数的限制
- Android Studio突破64K方法限制
- Android dex文件64k限制解决办法
- Android DEX 方法超过64K限制
- Android使用MultiDex处理64K限制
- Android 64K限制与解决方案
- MultiDex解决64K限制的问题
- 针对android方法数64k的限制,square做出的努力。精简protobuf
- 针对android方法数64k的限制,square做出的努力
- USACO2014Open Gold optics
- Echarts 学习笔记--JQuery图表插件
- 循环往list中放对象却总是一个对象的问题
- iOS跳转界面时隐藏tabBar的方法(隐藏tabBar底部变黑)
- jsp编码
- Android 64k的string限制
- 斐波那契数列递归算法和非递归算法
- jaxb的优点和用法
- php SeasLog使用以及liunx环境下安装
- PhpStorm连接服务器,开始自动上传功能
- 关于MonoDevelop前面大写英文字母的含义
- EL表达式语言的使用
- 代码行号的打印等
- 制作python docker镜像遇到pip安装依赖包ascii codec cant decode byte错误及解决方法