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