Program type already present: com.***.***.classA“的解决经验

AGPBI: {"kind":"error","text":"Program type already present: com.***.***.classA","sources":[{}],"tool":"D8"}的解决经验

       我们在使用Android Studio整合代码框架、导入第三方库的时候,会遇见各种各样的编译报错问题,根据我个人的经验,大多数错误的原因是因为重复导入依赖包导致的,重复的可以是资源,也可以是类。重复导入报错的一般提示就是如本文标题中所写的“Program type already present”,冒号后面跟的是重复的类,如何解决这种问题呢?

第一步、先查找这些类是在哪几个依赖包中重复出现的,方法很简单,双击shift键,会出现如下图所示的弹窗:

在这个弹窗的输入框里面输入报错的类名,输入框下面就会列出该类所有的出处,其中展示的信息里面就有引入该类的aar的名字,既然报重复的错误,一般都会出现两个或者两个以上该类的重复定义;

第二步、根据第一步的搜索结果,删掉重复的依赖,保留一个即可,可顺利解决。这里需要进一步说明的是,有些依赖包不是我们直接依赖的,比如我们依赖了A包,而A包依赖了B包,而B包中的类导致了类重复定义的问题,在第一步的搜索结果中,只会列出B包,而不会出现A包。我们此时知道了是因为B包产生的问题,但是工程的直接依赖里面没有B包,我们需要知道是哪个包间接依赖了B包,即我们要在事先不知情的情况下,找到A包,这时候就需要另一个gradle技巧---查看依赖树。查看依赖树可在Android Studio界面下面的Terminal里面输入下面的命令:

gradlew :app:dependencies --configuration debugCompileClasspath

把app换成我们想要查看的module的名字即可。通过查看依赖树可找到是哪个包依赖了B包。定位到A包之后,有两种解决办法:(1)可能的话,不依赖A包了,当然理想很美好,现实很骨感,一般是去不掉的;(2)利用exclude语句,导入A包的时候屏蔽掉B包的导入,如下面栗子所示:

implementation('com.allenliu.versionchecklib:library:2.0.0') {
  exclude group: 'org.greenrobot', module: 'eventbus'
  exclude group: 'com.squareup.okhttp3', module: 'okhttp'
}

 

 

 

 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Android海纳百川

打赏加微信,送跑车加管理

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值