Android Flutterプラグイン開発

背景説明

Flutter の公式ライブラリ サポートは限られています (主に UI フレームワーク ドッキング プラットフォームのネイティブ レンダリング サービス)。カメラ、録画、デバイス情報の表示など、ネイティブ プラットフォームの機能に関連するサポートがさらに必要な場合は、プラグイン サポートを手動で開発する必要があります。 (異なるプラットフォームのネイティブが実装を提供し、Dart 側がインターフェイスを提供して公開します)

1. 環境の準備

AS2021.3.1
フラッター SDK 3.3.10

2. Flutterプラグインプロジェクトを作成する

方法 1: AS の作成

ここに画像の説明を挿入

ここに画像の説明を挿入
ここに画像の説明を挿入
ここで直接「完了」をクリックすると、エラーが報告される場合があります

ここに画像の説明を挿入
このとき、生成されたプロジェクトをASで開くと原因不明のエラーが報告されます。

方法2に変更

方法 2: コマンド ラインの作成

G:\MyWork\Flutter\Projects>G:\MyWork\Flutter\Tools\flutter\bin\flutter.bat create --org com.example --platforms=android,ios,windows --template=plugin flutter_plugin_demo
Flutter assets will be downloaded from https://storage.flutter-io.cn. Make sure you trust this source!
Creating project flutter_plugin_demo...
Running "flutter pub get" in flutter_plugin_demo...                907ms
Running "flutter pub get" in example...                            804ms
ERROR_ACCESS_DENIED file system exception thrown while trying to create a symlink from source to dest

G:\MyWork\Flutter\Tools\flutter\bin\flutter.bat create --org com.example --platforms=android,ios,windows --template=plugin flutter_plugin_demo

AS はプロジェクト flutter_plugin_demo を開きます。この時点では正常に表示されています。

Flutter Plugin プロジェクトのディレクトリ構造

ここに画像の説明を挿入

3. プラグイン機能の追加

まずはプラグインモジュール(1、3に相当)を見てみましょう。

プラグインモジュール - Androidプラットフォーム側(1に相当)

1つのクラスだけ

ここに画像の説明を挿入

プラグインモジュール・ダーツ側(3番相当)

ここに画像の説明を挿入
ここに画像の説明を挿入

プラグインモジュール(2に相当)を見てください。

pubspec.xml でプラグイン モジュールを参照する方法は、次のセクション「Flutter プラグイン プロジェクトのデプロイ」を参照してください。

Dart 側のコードがどのように呼び出されるかを直接確認する

ここに画像の説明を挿入

以下は、プラグイン モジュールを使用してプラグインを 2 つの方法で使用する方法の別の例です。

ここに画像の説明を挿入

要約:

上記はオンラインで一般的に使用されるプラグイン モジュール開発方法です

プラグインユーザーの観点から見る
と、MethodChannel でプラグイン関数を直接呼び出すよりも、プラグインモジュールを公開して参照する方がエンジニアリング的でエレガントです。宣言されたプラグイン名とプラグイン メソッドを記憶するには、dart インスタンス オブジェクト メソッドを呼び出すだけで済みます。

4. Flutter プラグイン プロジェクトを公開する

4.1 ローカル

前の 4、5 に対応する 2 つの pubspec ファイル

プラグインモジュールのpubspec

ここに画像の説明を挿入

  # This section identifies this Flutter project as a plugin project.
  # The 'pluginClass' specifies the class (in Java, Kotlin, Swift, Objective-C, etc.)
  # which should be registered in the plugin registry. This is required for
  # using method channels.
  # The Android 'package' specifies package in which the registered class is.
  # This is required for using method channels on Android.
  # The 'ffiPlugin' specifies that native code should be built and bundled.
  # This is required for using `dart:ffi`.
  # All these are used by the tooling to maintain consistency when
  # adding or updating assets for this project.

一般的な内容は次のとおりです。
1. これはプラグイン モジュールの宣言セクションです
。 2. pluginclass はネイティブ機能のクラスを示します (さまざまなネイティブ プラットフォームとさまざまな開発言語)
3. プラグインを登録するために使用されます。プラグイン モジュール用 (実際には、flutter の Android Gradle コンパイル プラグインが含まれています。プラグイン モジュールが pluginclass を宣言していることが判明した場合、クラス GeneratedPluginRegistrant が動的に反映されます)

プラグインはモジュールの pubspec を使用します

ここに画像の説明を挿入
このとき、プラグインはモジュール コンパイルを使用してクラス GeneratedPluginRegistrant を自動的に生成します。

ここに画像の説明を挿入
このクラスは、前のプラグイン モジュール pubspec で宣言された pluginclass です。特定の Android プラットフォーム クラス GeneratedPluginRegistrant インスタンス化オブジェクトは、Java レイヤーの FlutterEngine によって初期化および実行されます。プラグイン モジュールの Android 側は、プラグインの登録を記述する必要はありませんコード

要約する

したがって、ローカル デプロイメントの場合は、プラグイン モジュールを使用して、プラグイン モジュールの正しいルート ディレクトリ パスを参照する必要があります。

4.2パブ公式サイト公開

少し

4.3 プライベートウェアハウスのリリース

少し

おすすめ

転載: blog.csdn.net/weixin_41548050/article/details/129947907