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

Google Play Billing库ProxyBillingActivity空指针异常解决问询

适配API 34 + Google Play Billing Library 6.2.1 启动ProxyBillingActivity空指针崩溃解决方案

核心排查与修复步骤

  • API 34 PendingIntent权限与标志检查
    API 34对跨应用PendingIntent新增了严格限制:

    • 若需动态更新Intent内容,不要用FLAG_IMMUTABLE,改用FLAG_MUTABLE(注意仅必要时使用,mutable存在安全风险)。
    • 确认ProxyBillingActivity的导出属性:API 34下未导出的Activity无法被其他应用启动,虽然Library默认会正确配置该Activity,但如果Manifest合并有冲突,需手动确保它的android:exported="true"。
  • 重新确认BillingClient初始化逻辑
    API 34下要确保初始化在Application#onCreate()中完成,不能延迟到Activity启动后。另外必须调用enablePendingPurchases(),6.x版本不调用这个会直接导致后续PendingIntent创建失败。

  • 排查Manifest合并冲突
    用Android Studio的Merged Manifest标签查看最终配置,确认ProxyBillingActivity的android:exported是true,且包含正确的intent-filter:

    <intent-filter>
        <action android:name="com.android.vending.billing.InAppBillingService.BIND" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
    

    要是你手动在Manifest里加过这个Activity的声明,删掉它,让Library的Manifest自动合并生效。

  • 升级Billing Library版本
    6.2.1可能存在API 34适配漏洞,直接升级到最新稳定版(比如6.10.x),Google后续版本通常会修复这类兼容性问题。

  • 添加PendingIntent空值兜底检查
    调用launchBillingFlow()后,先判断返回的BillingResult状态为OK且pendingIntent不为null,再执行启动操作:

    val billingResult = billingClient.launchBillingFlow(activity, billingParams)
    if (billingResult.responseCode == BillingClient.BillingResponseCode.OK && billingResult.pendingIntent != null) {
        activity.startIntentSender(
            billingResult.pendingIntent.intentSender,
            null,
            0,
            0,
            0
        )
    } else {
        // 处理错误,比如提示用户更新Google Play服务
    }
    

额外注意点

  • 测试设备必须安装最新版Google Play服务,旧版本不支持API 34的PendingIntent新规则,会导致创建失败。
  • 确保应用的targetSdkVersion和compileSdkVersion都设置为34,版本不匹配也会触发奇怪的兼容性问题。

内容的提问来源于stack exchange,提问作者axita.savani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 08:53:24