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

更新Android Studio及ProGuard/R8后mapping.txt丢失原方法名求助

解决R8混淆后mapping.txt丢失原方法名的问题

问题原因

新版R8(8.7.18)默认启用了更激进的混淆优化,若未配置针对性的保留规则,会导致mapping.txt中不再记录原方法名,仅显示混淆后的名称,进而无法正常反混淆异常堆栈。

解决方案

1. 针对性保留方法名(推荐)

在proguard-rules.pro中添加-keepnames规则,指定需要保留原名称的类或方法。-keepnames仅保留未被代码优化删除的类/成员的原名称,不会影响R8的压缩和优化能力:

  • 保留某个包下所有类的方法名:
-keepnames class com.your.app.package.** { *; }
  • 保留特定类的指定方法名:
-keepnames class com.your.app.package.YourTargetClass {
    void addSymbol(int);
    // 按需添加其他需要保留的方法签名
}

2. 关闭R8全模式(仅当上述方法无效时尝试)

若启用了R8的full mode(新版默认可能开启),会触发更激进的优化导致原方法名丢失。可在项目根目录的gradle.properties中添加以下配置关闭全模式:

android.enableR8.fullMode=false

3. 确认基础属性保留

确保proguard-rules.pro中已保留以下属性(你当前已配置,可再次确认):

-keepattributes SourceFile,LineNumberTable
-renamesourcefileattribute SourceFile

这些属性确保mapping.txt包含行号和源文件信息,配合方法名保留规则即可正常反混淆堆栈。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 19:15:53