MultiDex

参考资料: https://www.jianshu.com/p/bd9950ea18cc
https://www.zhihu.com/question/24646415#answer-6809251

打包报错

* What went wrong:
Execution failed for task ':app:transformDexArchiveWithDexMergerForSamplechannelDebug'.
> com.android.build.api.transform.TransformException: com.android.dex.DexException: Multiple dex files define Lcom/heyn/erosplugin/wx_filemanger/module/UtilModule;

Dalvik Executable (DEX)文件的总方法数限制在65536以内,其中包括Android framwork method, lib method,还有你的 code method ,所以请使用MultiDex。
对于5.0以下版本,请使用multidex support library (这个是我们的补丁包!build tools 请升级到21)。
而5.0及以上版本,由于ART模式的存在,app第一次安装之后会进行一次预编译(pre-compilation) ,如果这时候发现了classes(..N).dex文件的存在就会将他们最终合成为一个.oat的文件,嗯看起来很厉害的样子。
同时Google建议review代码的直接或者间接依赖,尽可能减少依赖库,设置proguard参数进一步优化去除无用的代码

MultiDex解决方案

Build.gradle文件

android {
    defaultConfig {
        multiDexEnabled true
        …
    }
    …
}
dependencies {
    …
    compile 'com.android.support:multidex:1.0.0'
    …
}

manifest.xml文件

<application
    …
    android:name=“android.support.multidex.MultiDexApplication”
    >
   …
</application>

如果有自己的Application,继承MulitDexApplication。如果当前代码已经继承自其它Application没办法修改那也行,就重写 Application的attachBaseContext()这个方法。

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

动态加载模块的框架 解决方案

1.先把你的app 的class 拆分成主次两个dex。
2.你的程序运行起来后,自己把第二个dex给load进来。

转载于:https://www.jianshu.com/p/390061e6ef6f

猜你喜欢

转载自blog.csdn.net/weixin_33810302/article/details/91285528