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

相关推荐
啊哈一半醒10 小时前
Go 语言 Context 全方位详解:原理、实战与避坑
开发语言·后端·golang
FungLeo10 小时前
Flutter 超长 StatefulWidget 拆分术:part of + extension on State 实战
android·flutter·dart
铅笔侠_小龙虾10 小时前
rust 学习(9):结构体
开发语言·学习·rust
此生决int10 小时前
深入理解C++系列(11)——stack、queue和priority_queue
开发语言·c++
周杰伦fans10 小时前
数列极限的定义
java·开发语言
小白的后端世界10 小时前
LangChain 模型初始化参数详解:从基础配置到企业级实践
java·人工智能·langchain
广州浮点FLOATLIC10 小时前
Mentor Graphics浮动许可证管理为什么一到流片节点就失控
java·大数据·数据库·许可证管理·cad 许可证优化
Loongproxy11 小时前
大规模采集为啥用隧道代理IP?会话保持如何做到无感轮换
java·服务器·网络
杰克尼11 小时前
天机学堂面试题
java
Web极客码11 小时前
用 Python 搭建工具调用 Agent 的调试过程
java·服务器·前端