android 解决混淆导致AGPBI: {“kind“:“error“,“text“:“Type a.a is defined multiple times

当我们代码将minifyEnabled true后开启混淆,最终打包可能会出现AGPBI: {"kind":"error","text":"Type a.a is defined multiple times: F:\classes.jar:a/a.class,出现原因是是因为 R8/Projguard 混淆器 介入后,将原本不同的类都重命名为了最简短的 a.a

在 Android 组件化架构中,如果你在 alibraryblibrary 两个库模块中都开启了 minifyEnabled true

  • 隔离编译 :Gradle 在编译 Library 时是相互隔离的。R8 在处理 alibrary时,并不知道 blibrary 的存在。

  • 重名碰撞 :R8 的混淆算法通常从 a, b, c 开始。alibrary里的某个核心类(比如 DataBinderMapperImpl)被混淆成了 a.a;凑巧 blibrary 里的某个类也被混淆成了 a.a

  • 合并冲突 :当 App 模块尝试将这两个已经混淆好的 .jar 文件合并到一个 DEX 文件时,由于它们都叫 a.a,编译器无法分辨该保留哪一个,为了程序安全只能报错

知道原因后我们只需要aliberary跟blibrary 的android{resourcePrefix "a_"}跟android{resourcePrefix "b_"}即可

相关推荐
lang201509282 小时前
Tomcat Maven插件:部署与卸载的架构设计
java·tomcat·maven
一切尽在,你来2 小时前
C++ 零基础教程 - 第 5 讲 变量和数据类型
开发语言·c++
csj502 小时前
安卓基础之《(21)—高级控件(3)翻页类视图》
android
2501_915918412 小时前
中小团队发布,跨平台 iOS 上架,证书、描述文件创建管理,测试分发一体化方案
android·ios·小程序·https·uni-app·iphone·webview
serve the people2 小时前
python环境搭建 (六) Makefile 简单使用方法
java·服务器·python
重生之后端学习2 小时前
146. LRU 缓存
java·数据结构·算法·leetcode·职场和发展
萧曵 丶2 小时前
懒加载单例模式中DCL方式和原理解析
java·开发语言·单例模式·dcl
℡枫叶℡2 小时前
C# - 指定友元程序集
开发语言·c#·友元程序集
回忆是昨天里的海2 小时前
k8s部署的微服务动态扩容
java·运维·kubernetes