问题来源:接入两个广告商出现包名冲突,一个是aar,另一个是jar,提示语
检查后发现kj_sdk_1.1.0.jar和hmsdk.aar里面都有一个com.a.a.a.class的类冲突了。捣腾半天无法解决,各种冲突法子都尝试过。本身想让这两个广告商其中一个改一下jar包,最终通过高人指点去改hmsdk.aar里面冲突的包名,在此记录。
如若是jar和jar的冲突可忽略步骤1
步骤1:把hmsdk.aar文件改成hmsdk.zip,解压后如下图所示,可看到classes.jar,这里面就包含着冲突的类。
步骤2:即classes.jar和kj_sdk_1.1.0.jar冲突。(到这一步就是把aar和jar冲突转化成jar和jar的冲突。)
(1)我本地已经有jarjar-1.4.jar,则直接使用。没有的首先下载个工具jarjar.jar,下载地址
https://download.****.net/download/zaq977684/12354348
(2)将jarjar-1.4.jar和classes.jar单独放到我在D盘创建了一个hmsdk_chang_jar文件下,如图:
(3)创建一个rule.txt文件:
写入 rule com.a.** [email protected] 后关闭rule.txt文件
意思为com.a都转成con.hmbol1的包名,只改前面的二级com.a,当然你也可根据需求多改几级
(4)在cmd中输入命令改包名,打开cmd。
1) d: (备注:我文件创建在d盘。则需输入d: 若为其他盘相对应输入字母)
2) cd D:\hmsdk_chang_jar (备注:cd后面跟着你需要改的jar包的路径。我要改的classes.jar和jarjar-1.4.jar的路径是D:\hmsdk_chang_jar)
3) java -jar jarjar-1.4.jar process rule.text classes.jar output.jar (备注 java -jar 下载下来的工具jar包 process 创建更改包名的txt 需要修改的jar 包名修改后的jar)
若成功的执行以上三个命令后 D:\hmsdk_chang_jar文件下就会出现output.jar。
到此jar和jar的包名冲突已解决完毕
验证是否更改成功的方法,可以创建两个文件夹,修改前的包存放classes.jar,修改后的包存放output.jar
分别对两个jar进行解压。如下图所示,则修改成功
步骤3:把output.jar重新命名为classes.jar。把步骤1中hmsdk.zip解压出来的文件夹中的classes.jar替换掉。这一步是修改包名后的jar替换修改前的jar。
选中所有文件右键选择添加到压缩文件夹
注意:选中的文件格式一定是zip的。如下图所示:
得到一个压缩文件hmsdk.zip,再把hmsdk.zip的后缀名改成aar,即hmsdk.aar。最终得到的hmsdk.aar替换掉冲突的hmsdk.aar文件,问题得以解决。
本人耗时比较长的是步骤3,文件的压缩格式为rar改成aar,android studio识别不了aar文件,所以格式一定要注意是ZIP