Android64K方法编译限制
来源:互联网 发布:网络推广代理平台 编辑:程序博客网 时间:2024/06/06 03:40
什么是64k问题
Android平台的Java虚拟机Dalvik执行Dex程序时,使用的是short类型来索引DEX文件中的方法。这就意味着单个Dex文件可被引用的方法总数被限制为64x1024, 即65536。随着项目发展,有可能就会超过64K方法,这个时候编译将会报错.
Android官方64K说明
解决问题
1. build.gradle添加multidex依赖
dependencies { compile 'com.android.support:multidex:1.0.0'}
2. 项目Appplication继承MultiDexApplication
Modify your manifest to reference the MultiDexApplication class
3. builder.gradle加配置 android {
defaultConfig {
...
minSdkVersion 14
targetSdkVersion 21
...
// Enabling multidex support.
multiDexEnabled true
}
...}
使用mutidex的负面影响
1. 由于是分2个dex文件,安装启动的时候如果需要从这2个dex文件上获取数据,而dex文件太大,有可能会ANR.
2. 在4.0(API level 14)前使用multidex模式可能不能启动, 原因在于Dalvik线性分配的bug(Issue [22586(http://b.android.com/22586)).如果一定要用,详细测试这些api等级
是否有问题,最好是减少代码.
3. 使用multidex会造成巨大的内存分配,可能会oom,由于Dalvik 线性内存分配限制 (Issue 78035).这个限制在Android 4.0 (API level 14)做了增加,但是Android 5.0 (API level 21)前仍有可能有此限制.
4. calsses执行在Dalvik runtime的时候需要在primary dex file.这挺复杂的.Android build tooling 会处理好 Android原本的代码,有些但项目包含的libraries依赖native code(JNI).这些包可能无法使用直到multidex build tools 允许你把类似的特殊classes添加到primary dex file.也就是有些依赖工程或者jra包会有问题.
建议
尽量减少项目不必要的方法数.通过混淆优化代码.
AndroidStudio 2.2版本及以上可以在工具栏Builer->Analyze Apk ->classdex8查看方法数使用详情.
项目有意识的去减少不必要的方法数,触及64K的底线还是挺难的.
- Android64K方法编译限制
- Android64K解决发现
- android64k(方法书超限)
- 越过65K方法数的限制编译APP
- DEX 方法超过64K限制和gradle编译OOM问题解决
- Android的编译过程 & Android dex 方法限制的一些总结
- DEX 方法超过64K限制和gradle编译OOM问题解决
- 限制端口的方法
- 限制foreach循环方法
- (2.2.8.4 & 4.4.15.1)Gradle:multiDexEnabled之DEX 方法超过64K限制和gradle编译OOM问题解决
- 限制用户输入的方法
- 常用限制input的方法
- 限制程序安装的方法
- 常用限制input的方法
- 常用限制input的方法
- 常用限制input的方法
- EditText限制输入类型方法
- UITextField限制字数的方法
- mmap详解
- Git命令
- 点击小图查看大图jQuery插件FancyBox魔幻灯箱
- leetcode_232. Power of Two分析
- c++常见面试题30道
- Android64K方法编译限制
- flume-ng配置文件详解(三)
- 逼格爆表的小软件安装界面
- 汉诺塔
- python设计模式实现
- 记单词004
- mysql高版本在本机安装不了,安装个5.7用用
- 百度地图Ip定位
- BSD和云 – 不可错过的BSD聚会