Android 解决 jar/aar 包类名冲突
2022-04-25 本文已影响0人
雁过留声_泪落无痕
背景
在某些极端场景下,需要接多个第三方 jar 包,但是 jar 包都是各家按自己的规则混淆过的,很容易就出现了两个 jar 包中都包含 a.a.a.a
这个类的(前面几个 a 是包名,最后一个 a 是类名)
jar 包解决
-
下载新版本 proguard Releases · Guardsquare/proguard (github.com)
-
创建
convert.txt
,输入如下内容:
-injars 'classes.jar'
-outjars 'classes-out.jar'
-dontskipnonpubliclibraryclassmembers
-dontshrink
-dontoptimize
-dontusemixedcaseclassnames
# 在这里指定要转换成的包名
-repackageclasses com.xxx
-dontpreverify
-dontnote
-dontwarn
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,LocalVariable*Table,*Annotation*,Synthetic,EnclosingMethod
# 需要注意观察原始 jar 包中哪些是没有混淆的,需要保留
-keep class com.cmri.** {*;}
# 因为我们的目的只是替换外层包名,类内部的一些东西都不用管
-keepclassmembers class ** {*;}
- 执行如下命令:
cd E:\Program Files\proguard-7.2.1\bin
proguard.bat @C:\Users\xiaobo\Desktop\convert.txt
-
结果如图:
转换前
aar 解决
- 将 aar 拖到 7zFM.exe 图标上,用 7zip 打开
- 把 classes.jar 提取出来
- 按照上面 jar 包的形式进行处理 classes.jar
- 在 7zFM 中删除原来的 classes.jar 并将新的 classes.jar 拖进去
- 得到新的 aar