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

使用Square SDK在Android运行时出现cannot find symbol错误求助

问题分析与解决

错误根源

你使用的square_in_app_payments:1.7.10版本依赖Flutter旧版的PluginRegistry.Registrar API,但最新版Flutter已经移除了这个API,导致编译时找不到该类,触发报错。

翻译后的报错日志

/Users/samamamajeed/.pub-cache/hosted/pub.dev/square_in_app_payments-1.7.10/android/src/main/java/sqip/flutter/internal/CardEntryModule.java:73: 错误: 找不到符号
public CardEntryModule(PluginRegistry.Registrar registrar, final MethodChannel channel) {
^
符号: 类 Registrar
位置: 接口 PluginRegistry
/Users/samamamajeed/.pub-cache/hosted/pub.dev/square_in_app_payments-1.7.10/android/src/main/java/sqip/flutter/internal/GooglePayModule.java:59: 错误: 找不到符号
public GooglePayModule(PluginRegistry.Registrar registrar, final MethodChannel channel) {
^
符号: 类 Registrar
位置: 接口 PluginRegistry
/Users/samamamajeed/.pub-cache/hosted/pub.dev/square_in_app_payments-1.7.10/android/src/main/java/sqip/flutter/SquareInAppPaymentsFlutterPlugin.java:39: 错误: 找不到符号
public static void registerWith(io.flutter.plugin.common.PluginRegistry.Registrar registrar) {
^
符号: 类 Registrar
位置: 接口 PluginRegistry
/Users/samamamajeed/.pub-cache/hosted/pub.dev/square_in_app_payments-1.7.10/android/src/main/java/sqip/flutter/SquareInAppPaymentsFlutterPlugin.java:45: 错误: 找不到符号
private SquareInAppPaymentsFlutterPlugin(io.flutter.plugin.common.PluginRegistry.Registrar registrar) {
^
符号: 类 Registrar
位置: 接口 PluginRegistry
注意: /Users/samamamajeed/.pub-cache/hosted/pub.dev/square_in_app_payments-1.7.10/android/src/main/java/sqip/flutter/internal/GooglePayModule.java 使用或覆盖了已过时的API。
注意: 请使用 -Xlint:deprecation 重新编译以获取详细信息。
注意: /Users/samamamajeed/.pub-cache/hosted/pub.dev/square_in_app_payments-1.7.10/android/src/main/java/sqip/flutter/internal/CardEntryModule.java 使用了未经检查或不安全的操作。
注意: 请使用 -Xlint:unchecked 重新编译以获取详细信息。
4 个错误

FAILURE: 构建因异常失败。

出错原因:任务':square_in_app_payments:compileDebugJavaWithJavac'执行失败。

可行解决方案

方案1:升级square_in_app_payments到兼容版本

去pub.dev查square_in_app_payments的最新版本,确认是否适配了Flutter新的插件注册API。如果有兼容版本,直接修改pubspec.yaml:

dependencies:
  square_in_app_payments: ^最新兼容版本号

然后执行flutter pub get更新依赖。

方案2:修改本地包代码适配新API

如果该包暂未更新,可手动修改本地缓存的包代码:

  1. 找到包路径:/Users/samamamajeed/.pub-cache/hosted/pub.dev/square_in_app_payments-1.7.10/
  2. 修改SquareInAppPaymentsFlutterPlugin.java:
    • 删除旧的registerWith方法,替换为新的插件绑定方法:
      @Override
      public void onAttachedToEngine(@NonNull FlutterPluginBinding flutterPluginBinding) {
          channel = new MethodChannel(flutterPluginBinding.getBinaryMessenger(), "square_in_app_payments");
          channel.setMethodCallHandler(this);
          cardEntryModule = new CardEntryModule(flutterPluginBinding, channel);
          googlePayModule = new GooglePayModule(flutterPluginBinding, channel);
      }
      
    • 同步修改CardEntryModule.java和GooglePayModule.java的构造方法,把参数Registrar换成FlutterPluginBinding,并调整相关逻辑(比如通过flutterPluginBinding.getApplicationContext()获取上下文)。

方案3:降级Flutter版本

如果不想修改包代码,可以把Flutter降级到仍支持PluginRegistry.Registrar的版本(比如3.7.x系列),执行命令:

flutter downgrade 3.7.12

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 04:50:07