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

开启minifyEnabled true后Android应用运行时崩溃问题求助

解决开启R8混淆后java.text.Normalizer.normalize触发NullPointerException的问题

问题背景

使用Android Studio 2023.1.1 Canary 10开发的应用,开启minifyEnabled true和shrinkResources true优化体积后,编译正常但运行时触发java.text.Normalizer.normalize处的NullPointerException,关闭混淆则无异常。通过添加-dontobfuscate已定位到错误点并修复NPE,以下是针对该问题的通用解决流程:

解决步骤

  • 定位空指针根源
    在proguard-rules.pro中添加-dontobfuscate关闭代码混淆,重新编译运行后,通过崩溃日志找到调用Normalizer.normalize的具体代码位置,检查传入该方法的字符串参数是否存在为null的情况。
    修复时直接给参数加非空判断,示例代码:

    String targetStr = // 你的字符串来源
    if (targetStr != null) {
        String normalizedStr = Normalizer.normalize(targetStr, Normalizer.Form.NFC);
        // 后续业务逻辑
    } else {
        // 处理null场景,比如赋值空串或跳过该逻辑
    }
    
  • 添加ProGuard规则防止R8误优化
    如果确认代码本身无null问题,但R8仍对Normalizer相关代码进行了不合理裁剪/混淆,在proguard-rules.pro中添加保护规则:

    -keep class java.text.Normalizer {
        public static java.lang.String normalize(java.lang.CharSequence, java.text.Normalizer$Form);
    }
    -keep class java.text.Normalizer$Form { *; }
    

    这条规则确保R8不会移除Normalizer类的normalize方法,也不会混淆内部的Form枚举类,避免因类/方法缺失导致的异常。

  • 验证修复效果
    恢复minifyEnabled true和shrinkResources true,移除-dontobfuscate(若无需再定位问题),重新编译APK/App Bundle并运行,确认NullPointerException不再触发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 23:09:50