Android 解决 jar/aar 包类名冲突

发布时间 2024-01-02 17:28:29作者: adam.li

背景

在某些极端场景下,需要接多个第三方 jar 包,但是 jar 包都是各家按自己的规则混淆过的,很容易就出现了两个 jar 包中都包含 a.a.a.a 这个类的(前面几个 a 是包名,最后一个 a 是类名)

jar 包解决

-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


链接:https://www.jianshu.com/p/96c7832eb068