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

Google Play发布应用触发NumberFormatException问题排查求助

排查Google Play发布后NumberFormatException崩溃问题

问题核心

  • 模拟器调试正常,但Google Play下载安装后触发NumberFormatException: s == null崩溃
  • 异常栈最初指向DiaryTwoActivity第22行(未使用的import androidx.lifecycle.MutableLiveData语句),删除该行后问题仍存在
  • 唯一涉及字符串转整数的逻辑:从Firebase Remote Config获取app_update配置中的app_version并调用toInt(),调试时该值为"46"可正常转换
  • 近期变更:compileSDK从32升级到33,minSDKVersion从31降至26(targetSDK保持31)

排查步骤

1. 修复异常栈行号偏移问题

发布版本默认开启R8/ProGuard混淆,混淆后的栈回溯行号会和原始代码不匹配:

  • 找到打包时生成的mapping.txt(路径一般为app/build/outputs/mapping/release/)
  • 进入Google Play控制台 → 你的应用 → 质量 → 崩溃 → 对应崩溃条目 → 上传该mapping文件,即可得到真实的异常发生行号,定位真正的问题代码
  • 注意:删除import语句后需重新生成release包并上传最新mapping,旧映射会导致行号依旧错位

2. 给Firebase Remote Config逻辑加空值防护

调试时app_version为有效值,但线上可能因配置未发布、网络异常、默认值缺失返回null,必须做兜底处理:

String appVersionStr = remoteConfig.getString("app_version");
int appVersion;
// 先判断空值和空字符串
if (appVersionStr == null || appVersionStr.trim().isEmpty()) {
    // 用当前应用的versionCode作为默认值
    appVersion = BuildConfig.VERSION_CODE;
} else {
    try {
        appVersion = Integer.parseInt(appVersionStr);
    } catch (NumberFormatException e) {
        // 解析失败也用默认值,可选上报异常到统计平台
        appVersion = BuildConfig.VERSION_CODE;
    }
}

同时检查Firebase Remote Config控制台:确保给app_version设置了有效的默认字符串值,避免未拉取到远程配置时返回null

3. 排查SDK版本变更的潜在影响

  • 权限检查:minSDK降至26后,确认INTERNET、ACCESS_NETWORK_STATE权限已在Manifest中声明,Android 6.0+设备上若需动态申请则完成逻辑补充
  • Firebase依赖兼容:检查com.google.firebase:firebase-config等相关依赖版本,确保与compileSDK 33兼容,建议升级到最新稳定版本

4. 本地模拟线上环境测试

  • 用gradlew assembleRelease生成签名release包,安装到覆盖minSDK(26)到targetSDK(31)范围的真实设备上测试
  • 模拟网络异常场景:断开网络后启动应用,验证是否因无法拉取Remote Config导致app_version为null,触发崩溃

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 19:35:18