这两天一共遇到过两次这样的错误。
第一次,是这样的:
> Task :SSJG_FitfunSDK_marsAD_bugly:transformDexArchiveWithExternalLibsDexMergerForDebug FAILED
AGPBI: {"kind":"error","text":"Program type already present: com.hb.a.a.a.a","sources":[{}],"tool":"D8"}
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':SSJG_FitfunSDK_marsAD_bugly:transformDexArchiveWithExternalLibsDexMergerForDebug'.
> com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives: D:\Plugins\Android\project\AndroidStudio\dlprojectSSJG\SSJG_FitfunSDK_marsAD_bugly\build\intermediates\transforms\dexBuilder\debug\47.jar,
从标红的地方可以最直接看出,是我的一个包重复了,下面的东西可以忽略了。
我的解决方案:
因为在我的项目中,是两个子工程和一个母工程,母工程是公用的,里面包含一个和子工程一样的jar包,所以我肯定得删除子工程中的jar包,再引入母工程,同时,让母工程的依赖包子工程可以随意调用。
具体做法:首先删除 子工程中libs 下面的 jar包以及其依赖;
implementation files('libs/HbTgSdk-1.1.jar')
其次:修改母工程中的jar包依赖为:
api files('libs/HbTgSdk-1.1.jar')
最后:让母工程能够被子工程引用,在build.gradle 中添加:
implementation project(path: ':FitfunSDK_DragonFighterPlugin_ssjg');
第二次遇到的问题也是大同小异,但解决方式不同;
AGPBI: {"kind":"error","text":"Program type already present: com.fitfun.DragonFighter.BuildConfig","sources":[{}],"tool":"D8"}
> Task :SSJG_FitfunSDK_marsAD_bugly:transformDexArchiveWithDexMergerForDebug FAILED
java.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives: D:\Plugins\Android\project\AndroidStudio\dlprojectSSJG\SSJG_FitfunSDK_marsAD_bugly\build\intermediates\transforms\dexBuilder\debug\45, D:\Plugins\Android\project\AndroidStudio\dlprojectSSJG\SSJG_FitfunSDK_marsAD_bugly\build\intermediates\transforms\externalLibsDexMerger\debug\0, D:\Plugins\Android\project\AndroidStudio\dlprojectSSJG\SSJG_FitfunSDK_marsAD_bugly\build\intermediates\transforms\dexBuilder\debug\43.jar, D:\Plugins\Android\project\AndroidStudio\dlprojectSSJG\SSJG_FitfunSDK_marsAD_bugly\build\intermediates\transforms\dexBuilder\debug\44.jar
Program type already present: com.fitfun.DragonFighter.BuildConfig
Learn how to resolve the issue at https://developer.android.com/studio/build/dependencies#duplicate_classes.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
很明显,又是一个jar包冲突的问题,但我仔细找了一些下,发现并没有这个jar 包,那怎么办呢?
网上找了一些方法,基本都不行,有个小伙伴加了一个分包的方法,我试了一下,问题解决了。
具体做法:
在build.gradle 中加入如下代码
defaultConfig { multiDexEnabled true }