You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android多模块项目R8优化时库类与程序类冲突问题

Android R8混淆构建报错解决方案

问题描述

构建Android应用时,R8混淆阶段出现以下警告与错误:

AGPBI: {"kind":"warning","text":"The following library types, prefixed by java., are present both as library and non-library classes: java.util.LinkedHashMap, java.util.HashMap, java.util.AbstractMap, java.util.AbstractList, java.util.AbstractCollection, java.util.IdentityHashMap, java.util.ArrayList, java.util.LinkedList, java.util.Hashtable, java.util.concurrent.ConcurrentLinkedQueue, java.util.AbstractQueue, java.util.Vector, java.util.HashSet, java.util.AbstractSet, java.util.WeakHashMap", "sources":[{}],"tool":"R8"}
AGPBI: {"kind":"error","text":"Library class java.util.LinkedHashMap implements program class java.util.Map", "sources":[{}],"tool":"R8"}
AGPBI: {"kind":"error","text":"Library class java.util.HashMap implements program class java.util.Map", "sources":[{}],"tool":"R8"}

构建过程截图:
构建过程截图

尝试过以下ProGuard规则,但错误仍未解决:

-keep class java.io.UncheckedIOException { *; }
-keep class java.lang.Iterable { *; }
-keep class java.time.Clock { *; }
-keep class java.time.DateTimeException { *; }
-keep class java.util.LinkedHashMap { *; }
-keep class java.util.Map { *; }
-keep class java.util.IdentityHashMap { *; }
-keep class java.util.LinkedHashMap implements java.util.Map

核心原因

项目中存在JDK标准库类的重复定义:系统自带的java.util等包下的类,和项目依赖的第三方库/自定义类中的同名类冲突,导致R8无法区分处理。

解决步骤

1. 定位冲突依赖

执行Gradle命令查看项目依赖树,找出打包了JDK标准类的第三方库:

  • Mac/Linux终端执行:./gradlew app:dependencies
  • Windows终端执行:gradlew.bat app:dependencies
    在输出结果中搜索java.util相关类,重点排查老旧库、自定义JDK实现类(如org.apache.harmony相关依赖)。

2. 排除或替换冲突依赖

找到问题库后,在build.gradle中排除重复的包,或替换为无冲突的版本:

implementation('第三方库坐标') {
    // 排除包含重复JDK类的分组/模块
    exclude group: 'xxx', module: 'xxx'
}

如果库本身打包了JDK类,优先更换为不包含这些类的新版本,或寻找替代库。

3. 修正ProGuard规则

  • 移除所有针对java.util、java.lang等系统类的keep规则,R8默认会正确处理系统库类,手动保留反而会干扰混淆逻辑。
  • 你写的-keep class java.util.LinkedHashMap implements java.util.Map是错误语法,ProGuard不支持这种写法,直接删除即可。

4. 检查自定义类

查看项目源码中是否存在自己定义的java.util.Map等JDK同名类,这类自定义类必须重命名或删除,避免和系统类冲突。


内容的提问来源于stack exchange,提问作者Antony Nicolas Huaman Alikhan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 15:47:37