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

升级targetSdkVersion34后Razorpay结账遇SecurityException崩溃

问题描述

将targetSdkVersion和compileSdkVersion设置为34后,在Android 14(API代号"VanillaIceCream")设备上尝试结账时,应用出现崩溃,崩溃日志如下:

FATAL EXCEPTION: main (Ask Gemini)
Process: com.razorpay.newsampleapp, PID: 3019
java.lang.SecurityException: com.razorpay.newsampleapp: One of RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED should be specifi
    at android.os.Parcel.createExceptionOrNull(Parcel.java:3242)
    at android.os.Parcel.createException(Parcel.java:3226)
    at android.os.Parcel.readException(Parcel.java:3209)
    at android.os.Parcel.readException(Parcel.java:3151)
    at android.app.IActivityManager$Stub$Proxy.registerReceiverWithFeature(IActivityManager.java:6064)
    at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1880)
    at android.app.ContextImpl.registerReceiver(ContextImpl.java:1820)
    at android.app.ContextImpl.registerReceiver(ContextImpl.java:1808)
    at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:757)
    at com.razorpay.CheckoutPresenterImpl.startSmsRetrieverForSavedCardsOTP(CheckoutPresenterImpl.java:887)
    at com.razorpay.CheckoutPresenterImpl.access$600(CheckoutPresenterImpl.java:59)
    at com.razorpay.G$_X_.onFinish(CheckoutPresenterImpl.java:866)
    at android.os.CountDownTimer$1.handleMessage(CountDownTimer.java:142)
    at android.os.Handler.dispatchMessage(Handler.java:107)
    at android.os.Looper.loopOnce(Looper.java:232)
    at android.os.Looper.loop(Looper.java:317)
    at android.app.ActivityThread.main(ActivityThread.java:8674)

    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:886)

环境信息

  • Razorpay SDK版本:com.razorpay:checkout:1.6.20
  • Android系统版本:Android 14

操作步骤

  • 将项目的targetSdkVersion和compileSdkVersion更新至34

问题现象

尝试进入结账流程时,Razorpay结账页面打开1-2秒后应用崩溃,返回结账错误。

重现步骤

  1. 在build.gradle(app)文件中设置targetSdkVersion为34
  2. 在Android 14设备上运行应用
  3. 启动结账流程:Razorpay结账页面加载后很快崩溃,出现错误

建议解决方案

根据Android 13及以上版本的安全要求,注册广播接收器时必须指定RECEIVER_EXPORTED或RECEIVER_NOT_EXPORTED属性(除非仅接收系统广播)。我在自己应用的其他广播接收器中遇到过相同问题,通过在registerReceiver()方法中传入Context.RECEIVER_NOT_EXPORTED参数解决了问题,推测Razorpay SDK也需要做类似修复。

示例代码如下:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
    registerReceiver(broadcastReceiver, new IntentFilter(AppConstants.MA_VIDEO_RECEIVER), Context.RECEIVER_NOT_EXPORTED);
} else {
    registerReceiver(broadcastReceiver, new IntentFilter(AppConstants.MA_VIDEO_RECEIVER));
}

为排除自身应用问题,我测试了Razorpay官方示例应用,将其targetSdkVersion和compileSdkVersion改为34后,同样出现了该崩溃问题。目前已在Razorpay的GitHub仓库提交问题,但尚未得到解决方案。


内容的提问来源于stack exchange,提问作者Sagar Bharatbhai Chauhan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 06:05:00