Android Program type already present问题解决

Posted mmsx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android Program type already present问题解决相关的知识,希望对你有一定的参考价值。

最近遇到一个很神奇的问题,一个带有网络框架的项目加入开源聊天的界面报错了。刚开始一直怀疑是appcompat-v7和androidX冲突,排查的一番又不是。

1、报错的错误如下

> Task :app:transformDexArchiveWithExternalLibsDexMergerForDebug FAILED
AGPBI: {"kind":"error","text":"Program type already present: io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable","sources":[{}],"tool":"D8"}

Program type already present: io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable

Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'.
> com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives: C:\\SVN\\caring\\app\\build\\intermediates\\transforms\\dexBuilder\\debug\\211.jar
  Program type already present: io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable

重点就是这句 Program type already present: io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable

其实就是库重复冲突了。不是其他原因。找到重复的库就能解决

2、解决办法

提示是ScheduledRunnable这个类重复。那么复制ScheduledRunnable,使用快捷键double shift键,复制查询一下,就能看到冲突的库。从下面截图可以发现rxAndroid和rxJava有重复冲突的库。分别有两个版本。所以去掉一个就行,我是删掉本地libs里面重复。

 删除下面红色框的两个库,再进行编译。如果提示还有别的库,那么再进行删除本地。

我删除掉了本地rxjava-2.2.8.jar 和 rxandroid-2.0.2.aar。删除之后编译又发现有一个重复,又使用同样的方法检查,找到删除本地的库。最终删除了3个库。

3、总结

其实产生这种根本原因是本地libs文件夹存在相同库一个版本。由于新加库本来包含libs某个库,所以要找出来去掉其中一个。如果其他是打包在一起,那么优先去掉libs下面重复的库。

 

以上是关于Android Program type already present问题解决的主要内容,如果未能解决你的问题,请参考以下文章

Android Program type already present问题解决

Android Program type already present问题解决

Program type already present: android.support.design.widget.CoordinatorLayout$1

Error:Program type already present: android.arch.lifecycle.LiveData

我的Android进阶之旅解决Android项目编译报错: Program type already present : com.xxx.xxxx.BuildConfig

Error: Program type already present: okhttp3.Authenticator$1