web-dev-qa-db-ja.com

プラットフォームチャネルを使用してFlutterでネイティブライブラリを呼び出す

プラットフォームチャネル を使用すると、Flutterはネイティブプラットフォームと相互運用できます(つまり、バッテリーレベルを読み取ります)。 Androidでは、これにはJavaメソッドを呼び出す必要があります。

サードパーティのJava SDK(AWS Cognito用)を使用したいのですが、このライブラリを/Android、それと対話しますか?もしそうなら、どうすればそれを行うことができますか?

7
haz

プラグインプロジェクトをまだ開始していない場合は、作成します。

サードパーティのjarファイルをどこかに収集します。それらをpluginproject/Android/...フォルダーに配置しないでください。

IDE-私の場合IDEA-でプラグインプロジェクトを開き、サードパーティのjarをJavaクラスパスに追加します。(IDEAで、プロジェクト構造/モジュールをクリックしますpluginName _ Android /依存関係タブ/緑のPlusSign/jarまたはディレクトリ-を選択し、個々のjarまたはフォルダー全体を選択します。スコープはコンパイルのままにしておきます。 tエクスポートを確認してください。)

pluginproject/Android/src/main/Java/com/yourcompanyのJava(またはKotlin))にAndroid固有のコードを実装します。 ../.../PluginnamePlugin.Java。サードパーティのjarによって宣言されたクラスを使用できるようになります。

依存関係をgradleに追加して、コンパイルできるようにします。 pluginproject/Android/build.gradle(注-build.gradlesがいくつかあります)の最後に、Android {}セクションの後に追加します

dependencies {
    implementation files('../../../Java/someapi/somejar.jar')
}

パスはpluginproject/Androidフォルダーからの相対パスである必要があります。代わりに、この構文でフォルダ全体を指定できます

implementation fileTree(dir: '../../../somewhere/somefolder', include: ['*.jar'])

プラグインプロジェクトで提供されているサンプルアプリケーションを実行します。

サードパーティのjarをpluginproject/Android/libなどに入れることができない理由はわかりませんが、それによってdexエラーが発生します。 pluginproject /フォルダーが機能します。

私はこれまで、適切に動作するサードパーティのjarのみを使用しました(JNIなし、独自のスレッドを作成しないなど)。

5
Richard Heap

はい、できます。

その上で documentation を確認できます。または、必要に応じて tutorial を確認できます。 AndroidとiOSの両方にネイティブコードを提供するSDKを使用している場合は役に立ちますが、そうでない場合は難しいでしょう。頑張ってください。

4
goops17

Android flutterのサイドはGradleを使用します(他のAndroidプロジェクトと同じ)。既存のAndroidアプリでは、gradleファイルから同じ設定のほとんどを移植できます。

あなたがすでにそれをしていて、jarを管理するためのシステムを持っているのでなければ、jarファイルをプロジェクトに直接コピーすることをお勧めしません、したがってソース管理。

代わりに、gradleの組み込みの依存関係解決を使用してください。あなたは従うことができるはずです AmazonのAndroid sdkセットアップ手順 。違いは、メソッドチャネルを通じてSDKへの呼び出しをフックする必要があることです。独自の相互運用コードを記述します。

1
rmtmckenzie