重复导jar包导致com.android.builder.dexing.DexArchiveMergerException

最近在用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')
    ...
}

你可能感兴趣的:(重复导jar包导致com.android.builder.dexing.DexArchiveMergerException)