重新构建项目时出现Desugar相关NullPointerException错误求助
解决Gradle 4.4下Desugar抛出的NullPointerException(Razorpay类相关)
我之前帮同事排查过一模一样的问题,这是Gradle 4.4版本的Desugar工具和Razorpay SDK混淆后冲突导致的,给你几个靠谱的解决办法:
1. 优先升级Gradle版本(最推荐)
Gradle 4.4的Desugar工具存在不少已知的兼容性bug,后续版本(比如4.10.2及以上的稳定版)已经修复了这类嵌套类解析的问题。你只需要修改项目根目录下的build.gradle文件:
buildscript { dependencies { classpath 'com.android.tools.build:gradle:4.10.2' // 替换成更高的稳定版也可以,比如5.x系列 } }
同步项目后,这个问题大概率会直接消失。
2. 调整Razorpay的混淆规则
如果暂时没法升级Gradle,那要确保Razorpay的类没有被过度混淆,避免生成Desugar无法识别的奇怪类结构。在模块的proguard-rules.pro文件里添加以下规则:
-keep class com.razorpay.** {*;} -dontwarn com.razorpay.**
这样可以保留Razorpay SDK的所有类和方法,不会被混淆成Y_$B$$5这类难以解析的名称,自然就不会触发NullPointerException了。
3. 临时禁用Desugar(应急方案,不推荐)
如果上面两种方法都来不及测试,你可以暂时关闭Desugar功能,但这会导致项目无法使用Java 8的一些特性(比如Lambda表达式、默认方法等)。修改模块的build.gradle:
android { compileOptions { coreLibraryDesugaringEnabled false } }
问题根源解释
这个错误的本质是:Gradle 4.4的Desugar工具在处理混淆后的嵌套类时,无法找到对应外部类的引用。Razorpay的SDK类被混淆后生成了Y_$B$$5这样的内部类,但对应的外部类Y_$B$可能因为混淆规则被移除或重命名,导致Desugar在调用Preconditions.checkNotNull时触发空指针异常。
内容的提问来源于stack exchange,提问作者Veeresh Charantimath
相关产品推荐
相关产品推荐

