最近在用RePlugin框架开发插件应用,由于插件化开发需要把应用拆分成多个工程,每个工程都会用到一些工具类,于是我把通用的工具类打成了jar包。研究了一番gradle如何打包jar之后,jar包打好了,一用就出问题了,报了个"com.android.builder.dexing.DexArchiveMergerException"异常。
报错如下:
Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'.
com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives:
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
回头仔细看了下每个module的gradle配置,发现是jar包重复导入了
主module的gradle配置
dependencies {
// 在host的主module导入是为了共享给插件apk使用
implementation files('libs/xxx-utils-lib-1.0.0.jar')
...
}
子module的gradle配置
dependencies {
// 用api导入是为了共享给app module使用
api files('libs/xxx-utils-lib-1.0.0.jar')
...
}
将子module的gradle配置关键字更换为compileOnly即可解决问题(较旧的gradle版本使用的是provided关键字)
dependencies {
// 使用compileOnly关键字在打包时不会将jar包打包进apk
compileOnly files('libs/xxx-utils-lib-1.0.0.jar')
...
}