参考资料: 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