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

Android发布构建(minify开启、非debuggable)异常排查求助

排查发布版本minify导致API字段为空的思路

确认JSON实体类的注解是否完整

minify会重命名未加注解的字段,导致JSON解析框架匹配不上API返回的key。检查你的实体类:

  • 给每个对应API返回的字段加上解析框架的固定注解,比如Gson用@SerializedName("真实字段名"),Fastjson用@JSONField(name="真实字段名")
  • 要是字段只在解析时用、没在代码里直接调用,minify可能会把它删掉,这种情况必须确保字段被保留

检查混淆规则文件(proguard-rules.pro)

  • 给实体类所在包添加保留规则,比如:
    -keep class com.yourapp.model.** { *; }
    
    或者更精准地保留带解析注解的字段:
    -keepclassmembers class com.yourapp.model.** {
        @com.google.gson.annotations.SerializedName <fields>;
    }
    
  • 别忘了解析框架本身的类也要保留,比如Gson、Retrofit这些:
    -keep class com.google.gson.** { *; }
    -keep class retrofit2.** { *; }
    

查看混淆映射文件找线索

编译release版本后,app/build/outputs/mapping/release/mapping.txt里记录了混淆前后的名称对应关系:

  • 找出出问题的实体类,看字段是不是被重命名了,或者直接被标记为removed
  • 根据映射结果调整混淆规则,把需要的字段/类保留下来

临时开启debuggable=true调试

在release构建类型里设debuggable true,同时保持minify开启:

  • 这样可以用Logcat打印解析后的实体对象,或者直接用调试器查看哪些字段为空,对应混淆后的名称是什么,快速定位问题点

排查其他编译优化设置

  • 看看build.gradle里有没有开shrinkResources,临时关掉试试,有时候资源缩减会和代码缩减联动出问题
  • 现在Android默认用R8替代ProGuard,R8的规则和ProGuard有差异,要是用了R8,确保你的混淆规则兼容它的优化逻辑

验证API返回的一致性

别忽略环境差异:确认release版本请求的API地址、参数和debug版本完全一致,有没有生产环境和测试环境返回字段不一样的情况


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 21:35:14