背景
在某些极端场景下,需要接多个第三方 jar /aar包,但是 jar/aar 包都是各家按自己的规则混淆过的,很容易就出现了两个 jar /aar包中都包含 a.a.a.a 这个类的(前面几个 a 是包名,最后一个 a 是类名)
解决办法
下载新版本 proguard Releases · Guardsquare/proguard
下载后进入bin目录,执行一下操作
-
解压aar,得到classes.jar
-
然后将classes.jar放到bin目录下
-
创建 convert.txt,输入如下内容:
-injars 'classes.jar' -outjars 'classes-out.jar' -dontskipnonpubliclibraryclassmembers -dontshrink -dontoptimize -dontusemixedcaseclassnames # 在这里指定要转换成的包名(将a.a.a替换成的包名) -repackageclasses com.itfenbao -dontpreverify -dontnote -dontwarn -keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,LocalVariable*Table,*Annotation*,Synthetic,EnclosingMethod # 需要注意观察原始 jar 包中哪些是没有混淆的,需要保留 -keep class com.** {*;} -keep class vivo.** {*;} # 因为我们的目的只是替换外层包名,类内部的一些东西都不用管 -keepclassmembers class ** {*;}
-
执行sh
./proguard.sh @convert.txt
-
classes-out.jar替换aar解压后的classes.jar
-
使用jar cvf 重新打包aar
jar cvf output.aar -C aar_unzip/ .
4 个评论
要回复文章请先登录或注册
老码农
码农朱哲 (作者)
码农朱哲 (作者)
w***@163.com