uni-app 安卓3.4.7离线打包lib.5plus.base-release.aar 混淆后包命名和交通部SDK包名冲突
uni-app 安卓3.4.7离线打包lib.5plus.base-release.aar 混淆后包命名和交通部SDK包名冲突
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Windows | 10.14.6 | HBuilderX |
### 操作步骤:
- lib.5plus.base-release.aar混淆包名冲突
### 预期结果:
- 希望可以添加专属规则以防和三方包名冲突
### 实际结果:
- 冲突
### bug描述:
- 3.4.7基座和交通部SDK编译时因包名冲突导致失败
- Duplicate class a.a.a.b.a found in modules jetified-lib.5plus.base-release-runtime (lib.5plus.base-release.aar) and jetified-locationsdkgd-androidx-2.0.24-runtime (locationsdkgd-androidx-2.0.24.aar)
问题已经修复,重新下载 更新文件 即可
可以解决
请官方确认是否进行混淆规则控制方式解决,若不解决我们好进行二次编译方式处理
https://www.jianshu.com/p/96c7832eb068
参考此文章,完美解决
在 uni-app 的安卓离线打包过程中,如果你使用了 lib.5plus.base-release.aar
并且进行了混淆(ProGuard 或 R8),可能会遇到与交通部 SDK 包名冲突的问题。这是因为混淆后的类名可能与交通部 SDK 中的类名相同,导致冲突。
解决方案
-
自定义混淆规则
在proguard-rules.pro
文件中,添加自定义的混淆规则,避免lib.5plus.base-release.aar
中的类被混淆成与交通部 SDK 冲突的类名。例如:
# 保留 lib.5plus.base-release.aar 中的特定包名不被混淆 -keep class io.dcloud.** { *; } -keep class com.xxx.** { *; } # 替换为 lib.5plus.base-release.aar 中的实际包名
-
修改交通部 SDK 的包名
如果交通部 SDK 的包名是固定的且无法修改,可以尝试反编译交通部 SDK,修改其包名后重新打包。这种方法需要一定的技术能力,并且可能违反 SDK 的使用协议,需谨慎操作。 -
使用不同的混淆字典
在proguard-rules.pro
中指定一个自定义的混淆字典,避免生成与交通部 SDK 冲突的类名。例如:
-obfuscationdictionary custom-dictionary.txt -classobfuscationdictionary custom-dictionary.txt -packageobfuscationdictionary custom-dictionary.txt
在
custom-dictionary.txt
中定义一组独特的混淆名称,例如:a b c ...
-
排除冲突的类
如果知道具体的冲突类名,可以在proguard-rules.pro
中排除这些类不被混淆。例如:
-keep class com.traffic.sdk.ConflictClass { *; }