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

启用ProGuard后Android应用因Bubble-Picker依赖出现空指针异常

解决启用ProGuard后Bubble-Picker引发的NullPointerException问题

这问题我碰到过好多次,基本可以确定是ProGuard混淆/压缩时误处理了Bubble-Picker依赖库的核心代码,导致运行时找不到对应的类或方法,触发空指针异常。给你几个针对性的解决办法:

1. 添加Bubble-Picker专属的ProGuard规则

ProGuard默认会处理所有依赖包的代码,而Bubble-Picker内部依赖的Box2D物理库(错误日志里的org.a.d.*就是它混淆后的包名)没有被正确保留,所以得手动添加规则避免混淆:

在你的proguard-rules.pro文件中加入以下内容:

# 保留Bubble-Picker自身的所有类和接口
-keep class com.github.igalata.bubblepicker.** { *; }
-keep interface com.github.igalata.bubblepicker.listener.** { *; }

# 保留其依赖的Box2D物理库代码(对应错误日志中的org.a.d包)
-keep class org.a.d.** { *; }

2. 检查资源压缩设置

如果你的项目开启了shrinkResources true(资源压缩),可能会误删Bubble-Picker用到的资源文件,也会引发异常。可以先尝试关闭资源压缩,或者添加资源保留规则:

# 保留Bubble-Picker用到的气泡相关资源(根据实际用到的资源调整)
-keepresources drawable/bubble_*
-keepresources raw/*

3. 先关闭ProGuard验证问题根源

为了确认确实是ProGuard的问题,可以临时修改你的build.gradle(Module级别):

buildTypes {
    release {
        minifyEnabled false  // 临时关闭混淆
        shrinkResources false  // 临时关闭资源压缩
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
}

重新打包运行,如果空指针消失,就说明问题确实出在ProGuard规则上,再回到第一步优化规则即可。

额外建议

  • 尝试把Bubble-Picker库更新到最新版本,新版本可能已经自带了适配ProGuard的规则;
  • 确保你的项目和库的依赖环境兼容(比如是否使用AndroidX,库是否支持)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:15:26