如何在 flutter 中使用原生应用 sdk

How to Use Native application sdk in flutter

我有一个本机 sdk,我正在将该 sdk 集成到 flutter 中,但它会出错。 有没有其他方法可以在flutter中集成第三方sdk

要集成第三方原生 SDK,您需要遵循 Platform Channel 方法。

关于如何集成第三方SDK的分步指南,我写了这篇文章。 https://blog.solutelabs.com/integrating-third-party-native-sdks-in-flutter-df418829dcf7

经过一些研究和分析。我成功地将 sdk(.aar) 文件集成到 flutter 应用程序中。第三方SDK就是其中的一个产品。 SDK是纯JAVA.

写的

在 flutter 中我们必须使用 Methodchannel 来与原生模块交互 flutter 应用程序或扩展功能。

以下是集成SDK的步骤。

步骤:1

文档会说要创建一个 flutter 插件包装器。但我已经完成了非常基本和直接的集成。

首先打开 android 工作室中的 android 文件夹(根目录)。示例路径项目>android

将您的.aar 文件放入libs 文件夹(如果不存在则创建)。 示例路径:project>android>app>libs

第 2 步:

打开应用程序文件夹中的 build.gradle 文件并添加以下行

    rootProject.allprojects{
          ...       
          repositories {
              flatDir {
                 dirs 'libs'
              }
          }
     }
     dependencies {
         ...
          // add your sdk dependencies too
          implementation files("libs/app-release.aar")
     }

之后,同步项目。

步骤:3

现在在新 window 中打开你的 flutter 项目。编辑您的 MainActivity.kt 文件

    import com.mypackage.MySDKStartActivity;

     private val CHANNEL = "yourMethodChannelName"
     override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
         super.configureFlutterEngine(flutterEngine)
         MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler { call, result ->
              if (call.method == "methodName") {
                 val arg1 : String? = call.argument("arg1");
                 val arg2 : String? = call.argument("arg2");
                 startNewActivity(arg1, arg1); // Method to start the SDK
              }
         }
    }
    
    private fun startNewActivity(arg1: String?, arg2: String?) {
       val intent = Intent(context, MySDKStartActivity::class.java)
       intent.putExtra("param1",arg1); // send some data to the sdk if it required
       intent.putExtra("param2",arg2);
       startActivity(intent);
    }

步骤:4

编辑您的飞镖文件。例如我的 flutter 项目 main.dart 文件在 project>lib>main.dart

      static const platform = const MethodChannel('smsAggregationChannel');
      @override
      Widget build(BuildContext context) {
            …
            ElevatedButton(
                   child: Text('Start Aggregate'),
                   onPressed: _startAggregation,
            )
      }

      Future<void> _startAggregation() async {
          try {
             final String arg1 = "<arg1>";
             final String arg2 = "<arg2>";

             await platform.invokeMethod('startAggregation', {// start the aggregation with args
                   'arg1': arg1,
                   'arg2': agr2
             });

         } on PlatformException catch (e) {
               print("Failed to start SDK");
         }
     }

完成所有更改后。 运行 你在 android studio 或 intelliji 中的 flutter 项目。使用 main.dart 启动应用程序您可以在按下按钮时调用 sdk。

如果出现任何问题,请尝试清除 (flutter clean) 抖动并重新 运行 应用程序。

我的flutter版本是1.22.6,Dart是2.10.5