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

Flutter集成mek_stripe_terminal在Android11初始化失败:Failed to generate key pair

Android 11 下 mek_stripe_terminal 初始化崩溃问题

我使用mek_stripe_terminal开发了一个简易Demo应用,该应用在Android 12及以上设备运行正常,但在Android 11设备上初始化Stripe Terminal SDK时出现崩溃。

错误堆栈信息

Fatal Exception: io.flutter.plugins.firebase.crashlytics.FlutterError: PlatformException(error, Failed to generate key pair, null, java.security.ProviderException: Failed to generate key pair
    at android.security.keystore.AndroidKeyStoreKeyPairGeneratorSpi.generateKeystoreKeyPair(AndroidKeyStoreKeyPairGeneratorSpi.java:515)
    at android.security.keystore.AndroidKeyStoreKeyPairGeneratorSpi.generateKeyPair(AndroidKeyStoreKeyPairGeneratorSpi.java:471)
    at java.security.KeyPairGenerator$Delegate.generateKeyPair(KeyPairGenerator.java:727)
    at java.security.KeyPairGenerator.genKeyPair(KeyPairGenerator.java:497)
    at com.stripe.cots.common.compatibility.PreFlightChecks.initialize(Unknown Source:87)
    at com.stripe.stripeterminal.internal.common.adapter.CotsClient.initializeKeys(Unknown Source:2)
    at com.stripe.stripeterminal.internal.common.adapter.CotsAdapter.initKeystore(Unknown Source:2)
    at com.stripe.stripeterminal.Terminal$Companion.initTerminal(SourceFile:3)
    at com.stripe.stripeterminal.Terminal$Companion.initTerminal(SourceFile:2)
    at s6.c.g(Unknown Source:109)
    at t6.m1$b.b(Unknown Source:393)
    at t6.m1$b.a(Unknown Source:0)
    at t6.l1.a(Unknown Source:2)
    at k4.j$a.a(Unknown Source:17)
    at c4.c.l(Unknown Source:18)
    at c4.c.m(Unknown Source:40)
    at c4.c.i(Unknown Source:0)
    at c4.b.run(Unknown Source:12)
    at android.os.Handler.handleCallback(Handler.java:938)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:223)
    at android.app.ActivityThread.main(ActivityThread.java:7664)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
Caused by: android.security.KeyStoreException: Unknown error
    at android.security.KeyStore.getKeyStoreException(KeyStore.java:1301)
    ... 25 more
)
       at StandardMethodCodec.decodeEnvelope(message_codecs.dart:651)
       at MethodChannel._invokeMethod(platform_channel.dart:322)
       at _$TerminalPlatform.init(terminal_platform.api.dart:27)
       at Terminal.getInstance.<fn>(terminal.dart:52)
       at _HomeViewState._initTerminal(home.dart:102)

设备信息

设备信息

初始化相关代码

final terminal = await Terminal.getInstance(
    fetchToken: _fetchConnectionToken,
  );

Future<String> _fetchConnectionToken() async {
    var token = await _api.createTerminalConnectionToken();
    return token;
  }

Future<String> createTerminalConnectionToken() async {
    try {
      final terminalToken =
          await _stripe.client.post('/terminal/connection_tokens');
      return terminalToken['secret'] as String;
    } catch (error) {
      rethrow;
    }
  }

Firebase错误堆栈截图

Firebase错误堆栈截图

环境版本

  • Flutter 3.16.0(稳定通道)
  • mek_stripe_terminal: ^3.2.0

解决方案建议

  • 检查Android 11密钥库兼容性:Stripe Terminal SDK生成密钥对依赖Android Keystore,Android 11的Keystore存在特定限制。可在初始化前添加Keystore可用性检查,或等待Keystore完成初始化后再执行SDK初始化。
  • 升级mek_stripe_terminal版本:查看包的更新日志,确认是否有修复Android 11兼容性问题的版本,尝试升级至最新版。
  • 临时调整原生SDK版本:若mek_stripe_terminal依赖的原生Stripe Terminal SDK在Android 11存在问题,可通过gradle配置强制降级到兼容版本(需注意版本间兼容性)。
  • 验证设备加密状态:Android 11设备未启用加密时,可能导致Keystore无法生成密钥对,建议测试启用设备加密后的运行情况。
  • 关注相关Issue:该问题已在mek-packages的Issue中被反馈,可跟进获取官方修复进展。

内容的提问来源于stack exchange,提问作者Batuhan Seçkin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 04:27:12