android dex分包

2017-02-17  本文已影响139人  大批

最简单的dex demo

from http://blog.csdn.net/u013478336/article/details/50734108

demo实现的目标是app加载另外一个dex里面的代码显示一个Toast


讲讲Google的分包方案 multiDex

网上相关的资料比较多这里所说两种情况

defaultConfig {
applicationId "suse.com.mdexdemo"
minSdkVersion 16
targetSdkVersion 25
versionCode 1
versionName "1.0"

    multiDexEnabled true  //多dex编译
}
- 编译的程序(生成的dex文件如下图)
![只有一个dex](https://img.haomeiwen.com/i4203910/6d81227416d08e30.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/400)

- 手动控制主包里面的class有哪些(有些坑哈 和 gradle的版本有关)
![手动控制分包的配置](https://img.haomeiwen.com/i4203910/a9021b5e214523ca.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/400)
- maindexlist.txt 配置
![maindexlist.txt](https://img.haomeiwen.com/i4203910/42a3c8a90de3f71c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/400)
- 生成的apk的dex结构
![](https://img.haomeiwen.com/i4203910/3952b2a84a13cb68.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/400)

- 现在已经有了多个dex了,可是问题又来了,5.0以上安装的时候会扫描apk里面的dex文件将他们合并,5.0之前则只会加载classes.dex(所以现在需要一个方案来加载多个dex,否则可能会出现ClassNotFound)
- 官方提供的一个方案是 compile 'com.android.support:multidex:1.0.0'
- 具体代码是在application attachBaseContext方法里面加载其他的dex
```java
public class DemoApp extends Application{

  @Override
  protected void attachBaseContext(Context base) {
      super.attachBaseContext(base);
      MultiDex.install(this);
  }
}

MultiDex.install(Context c)分析

http://blog.csdn.net/shen330/article/details/42367883


Nothing is certain in this life. The only thing i know for sure is that. I love you and my life. That is the only thing i know. have a good day

:)

上一篇 下一篇

猜你喜欢

热点阅读