码农朱哲
码农朱哲
  • 发布:2022-05-26 13:55
  • 更新:2023-03-30 13:50
  • 阅读:5913

【经验分享】解决打包出现Duplicate class a.a.a.a found in modules

分类:uni-app

背景

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

解决办法

下载新版本 proguard Releases · Guardsquare/proguard

下载后进入bin目录,执行一下操作

  1. 解压aar,得到classes.jar

  2. 然后将classes.jar放到bin目录下

  3. 创建 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 ** {*;}  
  4. 执行sh

    ./proguard.sh @convert.txt  
  5. classes-out.jar替换aar解压后的classes.jar

  6. 使用jar cvf 重新打包aar

    jar cvf output.aar -C aar_unzip/ .  
1 关注 分享
BoredApe

要回复文章请先登录注册

老码农

老码农

好想没有作用,okhttp3冲突,重新生成aar之后还是报冲突
2023-03-30 13:50
码农朱哲

码农朱哲 (作者)

当然了,这个方法仅限【离线打包】和【本地插件】,因为要给予jar/aar文件进行处理
2022-05-26 14:21
码农朱哲

码农朱哲 (作者)

回复 w***@163.com :
这个已经是最简单的方法了
2022-05-26 14:18
w***@163.com

w***@163.com

太复杂了,有更好办法吗
2022-05-26 14:08