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_"}即可

相关推荐
2401_8319207410 小时前
C++与Qt图形开发
开发语言·c++·算法
重庆兔巴哥10 小时前
如果Java环境变量配置不成功,应该怎么办?
java·开发语言
良木生香10 小时前
【C++初阶】:C++入门相关知识(3):引用 & inline内联函数 & nullptr相关概念
开发语言·c++
西野.xuan10 小时前
【一篇即毕业系列】C++的volatile关键字从基础到通天。
java·jvm·c++
泯仲10 小时前
从零起步学习MySQL 第十六章:MySQL 分库分表的考量策略
开发语言·mysql
超级大福宝10 小时前
用买火车票的例子讲解Java反射的作用
java·开发语言·后端
小则又沐风a10 小时前
第一章:C++入门基础--- c++入门门槛高? 逐步剖析c++语法 成为c++大师
开发语言·c++
H_老邪11 小时前
mysql 存储过程
java·数据库·sql
老虎062711 小时前
Netty[ NIO 核心速成 ] ---- NIO三大组件(Channel & Buffer&selector)
java·github·nio