美文网首页
方法数64K解决方案

方法数64K解决方案

作者: xwp | 来源:发表于2016-10-13 10:08 被阅读207次

    什么是64k问题

    <font size =4> Android平台的Java虚拟机Dalvik执行Dex程序时,使用的是short类型来索引DEX文件中的方法。这就意味着单个Dex文件可被引用的方法总数被限制为64x1024, 即65536。随着项目发展,有可能就会超过64K方法,这个时候编译将会报错.
    <font size = 4>Android官方64K说明#### 解决问题 <font size = 4>1. build.gradle添加multidex依赖 dependencies { compile 'com.android.support:multidex:1.0.0'} <font size = 4> 2. 项目Appplication继承MultiDexApplication Modify your manifest to reference the MultiDexApplication class <font size = 4>3. builder.gradle加配置android {  defaultConfig { ...  minSdkVersion 14 targetSdkVersion 21 ...   // Enabling multidex support. multiDexEnabled true  } ...} #### 使用mutidex的负面影响 <font size = 4>1. 由于是分2个dex文件,安装启动的时候如果需要从这2个dex文件上获取数据,而dex文件太大,有可能会ANR. <font size = 4>2. 在4.0(API level 14)前使用multidex模式可能不能启动, 原因在于Dalvik线性分配的bug(Issue [22586(http://b.android.com/22586)).如果一定要用,详细测试这些api等级是否有问题,最好是减少代码. <font size = 4>3. 使用multidex会造成巨大的内存分配,可能会oom,由于Dalvik 线性内存分配限制 (Issue 78035).这个限制在Android 4.0 (API level 14)做了增加,但是Android 5.0 (API level 21)前仍有可能有此限制. <font size = 4>4. calsses执行在Dalvik runtime的时候需要在primary dex file.这挺复杂的.Android build tooling 会处理好 Android原本的代码,有些但项目包含的libraries依赖native code(JNI).这些包可能无法使用直到multidex build tools 允许你把类似的特殊classes添加到primary dex file.也就是有些依赖工程或者jra包会有问题.#### 建议<font size = 4>尽量减少项目不必要的方法数.通过混淆优化代码.AndroidStudio 2.2版本及以上可以在工具栏Builer->Analyze Apk ->classdex8查看方法数使用详情.项目有意识的去减少不必要的方法数,触及64K的底线还是挺难的.

    相关文章

      网友评论

          本文标题:方法数64K解决方案

          本文链接:https://www.haomeiwen.com/subject/jiuiyttx.html