情况是这样的

我的项目中使用到了百度广告的SDK:BaiduMob1.jar

项目中使用到一个第三方的SDK,这个SDK中的一个aar里面也包含了BaiduMob2.jar

BaiduMob1.jarBaiduMob2.jar是不同版本的广告jar包,但是里面的包名是一样的com.baidu.mobs,这个时候会导致一个冲突:

Error: Program type already present: com.baidu.mobads.xxxxxx

解决这个冲突的逻辑只有一个,要么删除BaiduMob1.jar要么删除BaiduMob2.jar

当然删除BaiduMob1.jar是很容易的,因为BaiduMob1.jar在你自己的项目里面想删就删。

但是实际情况是BaiduMob2.jar被别人打包在aar中,它可能是一个非常old版本,这样就只能被这个第三方所限制。所以我们理想的方法还是删除第三方aar中的BaiduMob2.jar

移除aar中的jar中的com.baidu

com.baidu 这个包就是我们要删除的对象,给你个文件结构图自己体会:

Android aar或jar中删除某个包或类

sdk_player.aar --> class.jar --> com.baidu
哎,藏得好深

首先我们正常思维的步骤一定是这样的:

  1. 解压sdk_player.aar
  2. 再解压 class.jar
  3. 删除 com.baidu 这个包
  4. 重新打包 class.jar 替换原来的 jar
  5. 重新打包 sdk_player.aar 替换原来的 aar

手动这样操作当然是麻烦的很,所以我在Github上面发现了这个项目

https://github.com/Siy-Wu/ExcludeAar

其实这个项目就是用gradle脚本上面的 5 个步骤

运行项目

去Github下载项目之后,会报一个错误

Unable to resolve dependency for ‘:[email protected]/compileClasspath’: Failed to transform file ‘exclude_library-release.aar’ to match attributes {artifactType=android-exploded-aar} using transform ExtractAarTransform

这个时候莫慌,双击 shift ,输入clean,选择Clean Project,再次运行就可以了

Android aar或jar中删除某个包或类

感谢ExcludeJar的作者!!!

相关文章: