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

Gradle 5.1.1更新致Android ProGuard规则失效,求适配指导

升级到Gradle 5.1.1后,你碰到的问题核心是Android Studio 3.4+默认启用的R8代码压缩工具,和传统ProGuard的规则逻辑存在差异——原来的-keeppackagenames org.jsoup.nodes只保留了包名,但R8的代码收缩会进一步移除它认为“未被使用”的类和资源,而jsoup运行时需要加载entities-xhtml.properties这类资源文件,以及核心解析类,这些都被R8误删了。

针对这个问题,你需要在ProGuard配置文件中添加以下更明确的规则:

1. 完整保留jsoup的所有类和资源

R8会主动移除未被直接引用的类和资源,而jsoup很多核心逻辑是动态加载的,所以必须明确保留:

# 保留jsoup所有类,防止核心解析类被移除
-keep class org.jsoup.** { *; }
# 保留jsoup的所有资源文件,包括entities-xhtml.properties这类配置文件
-keepresources class org.jsoup.** { *; }

确保依赖库本身的类不被混淆或移除:

-keep class com.leocardz.link.preview.** { *; }

为什么原来的规则失效?

-keeppackagenames只是告诉工具不要重命名包名,但不会阻止包内的类被R8的代码收缩机制移除。而jsoup运行时需要动态加载特定的资源和类,这些在R8的默认优化策略下,会被判定为“未被直接使用”而清理,从而抛出找不到资源的异常。

把这些规则添加到你的proguard-rules.pro文件后,重新编译打包,应该就能解决应用崩溃的问题了。

内容的提问来源于stack exchange,提问作者Mike

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:09:34