美文网首页
方法数量太多引起的打包故障

方法数量太多引起的打包故障

作者: 小小卒_oO_ | 来源:发表于2019-03-14 16:02 被阅读0次
    • 在Android中一个Dex文件最多存储65536个方法,当方法数量突破65536时,打包时就会抛出异常。
    • 为解决该问题,Android5.0时Google推出了官方解决方案:MultiDex。打包时,把一个应用分成多个dex,例:classes.dex、classes2.dex、classes3.dex…,加载的时候把这些dex都追加到DexPathList对应的数组中,这样就解决了方法数的限制。
    • Andorid 5.0之后,ART虚拟机天然支持MultiDex。
    • Andorid 5.0之前,系统只加载一个主dex,其它的dex采用MultiDex手段来加载。

    一.minSdkVersion 为 21 或更高值

    设置为multiDexEnabled true

    android {
        defaultConfig {
            multiDexEnabled true
        }
    

    二.minSdkVersion 为 20 或更低值

    使用 Dalvik 可执行文件分包支持库

    dependencies {
      compile 'com.android.support:multidex:1.0.3'
    }
    

    在Application中添加MultiDex.install(this);

    // 继承 MultiDexApplication
    public class MyApplication extends MultiDexApplication { ... }
    
    
    // 或者 在Application中添加 MultiDex.install(this);
    public class MyApplication extends Application {
      @Override
      protected void attachBaseContext(Context base) {
         super.attachBaseContext(base);
         MultiDex.install(this);
      }
    }
    

    注意:

    1. SDK版本,如果已经支持了multidex,而又把android-support-multidex.jar放在了项目的libs文件下,就会报错。
    2. Android的Gradle插件在Android Build Tool 21.1开始支持使用multidex。

    扩展:
    Android的类加载机制

    参考:
    https://blog.csdn.net/xiaxl/article/details/83089944
    https://www.cnblogs.com/tonny-li/p/7839306.html
    https://www.cnblogs.com/chenxibobo/p/6076459.html

    相关文章

      网友评论

          本文标题:方法数量太多引起的打包故障

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