情况是这样的
我的项目中使用到了百度广告的SDK:BaiduMob1.jar
项目中使用到一个第三方的SDK,这个SDK中的一个aar里面也包含了BaiduMob2.jar
BaiduMob1.jar和BaiduMob2.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 这个包就是我们要删除的对象,给你个文件结构图自己体会:
sdk_player.aar --> class.jar --> com.baidu
哎,藏得好深
首先我们正常思维的步骤一定是这样的:
- 解压sdk_player.aar
- 再解压 class.jar
- 删除 com.baidu 这个包
- 重新打包 class.jar 替换原来的 jar
- 重新打包 sdk_player.aar 替换原来的 aar
手动这样操作当然是麻烦的很,所以我在Github上面发现了这个项目
其实这个项目就是用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,再次运行就可以了
感谢ExcludeJar的作者!!!