MultiDex浅聊

2019-02-23  本文已影响1人  初心一点

先简单了解下.apk和.dex

  • .apk Android安装包
  1. AndroidManifest.xml配置文件
  2. META-INF 签名信息
  3. classes.dex Java字节码文件
  4. res 资源文件
  5. resources.arsc 二进制配置文件
  • .dex Android Dalvik虚拟机执行文件

什么是MultiDex?

  1. Android中一个Dex文件最多存储65536个方法,也就是一个short类型范围。但随着应用方法数量的不断增加,当Dex文件突破65536方法数量时,打包时就会抛出异常
  2. 为解决该问题,Android5.0时Google推出了官方解决方案:MultiDex
  3. 打包时将一个应用分成多个dex,例:classes.dex、classes2.dex...,加载时把这些dex都追加到DexPathList对应的数组中,这样就解决了方法数的限制
  4. Andorid 5.0之后,ART虚拟机天然支持MultiDex
  5. Andorid 5.0之前,系统只加载一个主dex,其它的dex采用MultiDex手段来加载

如何使用?

  1. build.gradle配置
android {
    defaultConfig {
        ...
        // Enabling multidex support.
        // 如果是android 5.0以上的设备,只需要设置为multiDexEnabled true
        // minSdkVersion 为 20 或更低值,还需执行下面的2、3步
        multiDexEnabled true
    }
    ...
}

dependencies {
compile 'com.android.support:multidex:1.0.0'
}
  1. Manifest声明修改,如果有自己的Application,继承MulitDexApplication
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" ...>
<application
...
android:name="android.support.multidex.MultiDexApplication">
...
</application>
</manifest>
  1. 重写 Application的attachBaseContext()这个方法
@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);     
}

ok了

参考链接

  1. https://www.jianshu.com/p/a5353748159f
  2. https://blog.csdn.net/xiaxl/article/details/83089944
上一篇下一篇

猜你喜欢

热点阅读