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

Nexus 5X使用Billing 4.0.0支付时报空指针异常的原因及解决办法

问题产生原因

这个异常是Google BillingClient 4.0.0版本的已知兼容性缺陷,仅在搭载Android 8.0/8.1系统的Nexus 5X设备上触发,根因如下:

  • 4.0.0版本的Billing库未对购买流程返回的PendingIntent做非空校验,Nexus 5X设备上低于16.x版本的Google Play服务处理购买请求时,偶现无法生成有效PendingIntent的情况,ProxyBillingActivity初始化时直接调用空对象的getIntentSender()方法,直接触发空指针崩溃。
  • Nexus 5X官方最高支持的系统版本为Android 8.1,该系统版本对PendingIntent的传递逻辑存在特殊处理,当Billing库发起的购买请求参数未完全匹配系统预期时,也会导致PendingIntent返回为空。
解决方案

方案1:升级Billing库(优先选择)

Google在4.1.0及更高版本的Billing库中已经修复了该问题,直接修改依赖版本即可,不需要调整现有业务代码:

implementation 'com.android.billingclient:billing:4.1.0'
implementation 'com.android.billingclient:billing-ktx:4.1.0'

升级后库内部会自动对PendingIntent做非空校验,空值场景会直接返回错误码,不会触发崩溃。

方案2:临时兼容方案(无法升级库时使用)

如果当前业务暂时无法升级Billing库版本,可以通过以下逻辑规避崩溃:

  • 发起购买请求前先判断当前设备是否是Nexus 5X且系统版本为Android 8.x,同时校验Google Play服务版本不低于16.0.0,不满足条件时提前给出友好提示,不发起购买流程。
  • 调用launchBillingFlow()后检查返回的响应码,如果返回错误状态直接终止流程,不要继续后续操作。
  • 在AndroidManifest.xml中主动配置ProxyBillingActivity的属性,避免状态丢失:
<activity
    android:name="com.android.billingclient.api.ProxyBillingActivity"
    android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
    android:exported="false"
    android:theme="@android:style/Theme.Translucent.NoTitleBar" />

内容的提问来源于stack exchange,提问作者Ильин Павел

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 16:48:02