Flutter Plugin开发与发布

以开发腾讯云基础版人脸核身Flutter插件为例,总结Flutter Plugin开发和发布流程。

项目地址:https://github.com/Ucoon/wb_cloud_face

1. 创建 package

  • 方式一:通过Android Studio直接创建Flutter Project(选择Plugin类型)

    可选择使用的语言和插件支持的平台

    选择语言

  • 方式二:通过命令行创建Flutter Plugin Project(使用--template=plugin

    1
    flutter create --org tech.ucoon --template=plugin wb_cloud_face

    可以使用-i为iOS指定开发语言,使用-a为Android指定开发语言,如:

    1
    flutter create --org tech.ucoon --template=plugin -i swift -a kotlin wb_cloud_face

2. 实现包package

  1. 在lib下的dart文件中定义接口:openCloudFaceService

    1
    2
    3
    4
    5
    6
    7
    static Future<WbCloudFaceVerifyResult> openCloudFaceService({
    required WbCloudFaceParams params,
    }) async {
    final res = await _channel.invokeMethod(
    'openCloudFaceService', params.toJson());
    return WbCloudFaceVerifyResult.fromJson(json.decode(res));
    }
  2. 添加Android平台实现的代码(android目录下)

    注意事项:

    • import io.flutter.embedding.engine.plugins.FlutterPlugin;导入plugin相关代码报红

      参考stack overflow的回答

      1
      You should open the project in android studio from the example/android location.
    • 插件中引入第三方本地aar文件时,需在插件/android/build.gradle中添加flatDir

      1
      2
      3
      4
      5
      6
      7
      8
      rootProject.allprojects {
      repositories {
      ...
      flatDir {
      dirs project(':wb_cloud_face').file('libs')
      }
      }
      }
  3. 添加iOS平台实现的代码(iOS目录下)

    注意事项:

    • 在podspec文件(podspec是一个描述pod库版本文件)添加说明:nameversionsummaryhomepageauthor

    • 引用第三方静态库Framework:在iOS目录下新建Framework文件夹,把需要的三方库拷贝到Framework文件夹下,并在podspec文件中配置如下三个字段

      1
      2
      3
      s.vendored_frameworks //第三方静态库的.framework文件路径
      s.vendored_libraries//第三方静态库的.a文件路径
      s.resource //第三方静态库的.bundle文件路径

    至此plugin开发完成

3. 发布Plugin

  1. 在发布之前,检查pubspec.yaml(检查descriptionversionhomepage字段)、README.md(使用教程)以及CHANGELOG.md(版本记录)文件,以确保其内容的完整性和正确性。
  2. 然后, 运行 dry-run 命令以查看是否都准备OK了: flutter packages pub publish --dry-run
  3. 最后, 运行发布命令: flutter packages pub publish

注意事项:

  • 发布插件压缩之后的包必须小于100M

    1
    Your package must be smaller than 100 MB after gzip compression. If it’s too large, consider splitting it into multiple packages, using a .pubignore file to remove unnecessary content, or cutting down on the number of included resources or examples.

    针对这种情况,可考虑搭建Flutter pub私有仓库,或者以github方式引用插件

参考资料:

开发Packages和插件

Flutter Plugin引用iOS三方静态库Framework

腾讯云人脸核身SDK文档