三星Galaxy S21(Android 15)设备ISms$Stub$Proxy.sendTextForSubscriber空指针崩溃求助
三星Galaxy S21(Android 15)设备ISms$Stub$Proxy.sendTextForSubscriber空指针崩溃求助
我最近碰到个特别闹心的问题:我的App在**三星Galaxy S21(Android 15)**上会莫名崩溃,但同样是Android 15系统的Galaxy S23、S24完全没事,关键我手里没有S21设备,根本没法复现排查,急死人了!
目前拿到的崩溃异常信息是:
Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference
从崩溃栈来看,问题出在ISms$Stub$Proxy.sendTextForSubscriber方法调用上,大概的栈轨迹如下:at com.android.internal.telephony.ISms$Stub$Proxy.sendTextForSubscriber(ISms.java:xxxx) at com.yourpackage.YourSmsUtilClass.sendSms(YourSmsUtilClass.java:xx)
我自己琢磨了几个可能的排查方向,也想请教下有没有遇到过类似问题的朋友:
- 先检查调用
sendTextForSubscriber时传入的所有参数,尤其是String类型的(比如短信内容、收件人号码、订阅者ID相关的字符串),会不会在S21的Android 15环境下出现空值?比如某些系统返回的状态字段在S21上和新机型不一样,导致你组装参数时漏了值? - 考虑三星不同机型的系统定制差异,S21作为老旗舰,Android 15的适配逻辑可能和S23/S24有区别,比如ISms接口对参数的非空要求更严格?新机型允许为空的参数,S21的系统实现里却没做空值判断?
- 如果你是用反射或者非公开API调用短信功能的话,大概率是三星在S21的Android 15上修改了ISms接口的内部实现,导致空指针。这种情况建议赶紧换成官方推荐的
SmsManagerAPI来发短信,避开非公开接口的兼容性坑。 - 实在没有设备的话,可以尝试联系有S21的用户或者同事,让他们帮忙开启详细日志,拿到完整的崩溃栈,精准定位是哪个参数为空。同时也可以在代码里给所有传入该方法的参数加一层非空校验,比如给可能为空的String设置默认空串,或者提前判断空值并做降级处理,先避免崩溃再说。
内容来源于stack exchange
相关产品推荐
相关产品推荐

