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

升级@stripe/stripe-react-native后Android端打开CardField崩溃

解决Android端CardField崩溃问题(windowRecomposer错误)

升级@stripe/stripe-react-native从0.22.1到0.33.0后,Android端打开含CardField的视图出现Cannot locate windowRecomposer崩溃,本质是新版本Stripe改用Jetpack Compose实现CardField,与React Native视图生命周期存在绑定冲突,以下是可行解决方案:

1. 延迟CardField渲染

等视图完全挂载后再初始化CardField,避免ComposeView在未附加窗口时启动:

import { useState, useEffect } from 'react';
import { CardField } from '@stripe/stripe-react-native';

const PaymentScreen = () => {
  const [isViewMounted, setIsViewMounted] = useState(false);

  useEffect(() => {
    setIsViewMounted(true);
    return () => setIsViewMounted(false);
  }, []);

  return (
    <>
      {isViewMounted && <CardField />}
    </>
  );
};

2. 对齐Jetpack Compose依赖版本

Stripe 0.33.0依赖特定版本的Compose库,确保项目依赖与之一致:

  • 在项目根目录build.gradle中定义统一版本:
buildscript {
  ext {
    compose_version = '1.4.3'
  }
}
  • 在app/build.gradle中启用Compose并配置版本:
android {
  buildFeatures {
    compose true
  }
  composeOptions {
    kotlinCompilerExtensionVersion compose_version
  }
}

3. 临时降级到过渡版本

若上述方案无效,可先降级到兼容性更好的0.30.x版本,待Stripe修复该问题后再升级:

npm install @stripe/stripe-react-native@0.30.0
# 或使用yarn:yarn add @stripe/stripe-react-native@0.30.0

4. 检查Activity配置

确保对应Activity继承自AppCompatActivity,为Compose提供正确的窗口环境:

<activity
  android:name=".MainActivity"
  android:label="@string/app_name"
  android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize|uiMode"
  android:launchMode="singleTask"
  android:windowSoftInputMode="adjustResize">
</activity>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 19:02:40