Multidex分包
分包就是一个apk中可以有多个dex。
Multidex分包可以解决什么问题?
分包可以解决65535问题
Java中常见类加载器
- BootstrapClassLoader:纯C++实现的类加载器,没有对应的Java类,主要加载jre/lib/目录下的核心库
- ExtClassLoader:类的全名是sun.misc.Launcher$ExtClassLoader,主要加载/jre/lib/ext/目录下的扩展包
- AppClassLoader:sun.misc.Launcher$AppClassLoader,主要加载CLASSPATH路径下的包
Apk和Dex文件
- .apk文件
Android Package Android安装包 - .dex文件
Dalvik VM executes Android Dalvik虚拟机执行程序
apk文件内容
- AndroidManifest.xml配置信息
- META-INF签名信息
- classes.dex Java字节码文件
- res资源文件
- resources.arsc二进制资源文件
dvm和art
- dvm
Android Dalvik Android虚拟机
- JIT编译
- 应用安装时执行dexopt指令,将dex文件优化为odex文件
- 应用运行时,会将由二进制翻译为机器码的流程
- art
Android Runtime Android运行时、Android4.4引入
- AOT编译
- 应用安装时执行dex2oat指令,将dex文件翻译为oat文件
- 应用运行时,由二进制翻译为机器码的流程
MultiDex使用教程
- 添加MultiDex的依赖
compile "com.android.support:multidex:1.0.0"
- 在配置项中启用MultiDex
multiDexEnabled true
- 在Application中继承MultiDexApplication类
分析apk
在Android Studio中,Build->Analyze Apk,可以看到apk中的内容。