【Flutter】MethodChannelでandroidネイティブSDKを組み込んでみた

2024/06/12に公開

概要

MethodChannelを使用しanroidネイティブSDKを組み込んでみた感想になります。
会社の有償SDKを使用してますので、この記事ではコードは公開しませんし、画像も解像度をぼかしてます。

動機

ネイティブのSDKって本当にFlutterで使えるの?画面がくっついてくるようなSDKってどうなるのという疑問があったので、自分が使用していたandoidネイティブSDKを実際に組み込んでみました。
MethodChannelって何?って方は、公式のドキュメントをどうぞ。簡単に言うと、FlutterからAndroidやiOS、その他の環境のメソッドを呼び出したり、その逆を行うためのAPIらしいです。

組み込んでみました

Dartで記載した画面

Dartで記載した画面で、androidフォルダ内の画面へ遷移するだけの画面です。

androidフォルダ以下の画面

紫枠がネイティブSDKで画面内に組み込むと自動で地図を表示してくれるものです。問題なく組み込めて、動作も問題なさそうでした。赤枠の方は、私が追加したボタンでコード内でSDKへ操作ができるかの確認用に作成したものです。こちらも問題なく使用できました。

結論、MethodChannelでandroidネイティブSDKを使用できました。

実装で気づいたこと

使用言語

android以下のフォルダではDartじゃなくて、javaやkotlinじゃないといけない。

android studio開発の知識が必要

androidフォルダ以下は、android studioを使用した時と同様の構成で、build.gradle・AndroidManifest.xml等の設定したり、画面や部品を登録するためにactivityやfragmentを作成しないといけない。ちょっとしたことくらいならネットに載ってそうですが、他社さんのSDKを使用しようという時にはandroid studioで開発した経験がないと難しそうだなと感じました。

開発環境・ビルド

私はVScodeでflutter開発をしているのですが、androidフォルダを編集するためには、右クリックから[Open in Android Studio]を選択し、Android Studioを開き、ビルドもAndroid Studio上で行う必要があった。VScode環境のホットリロードが便利だったのに…

感想

MethodChannelを使用すればFlutterでAndroidネイティブSDKとやり取りできることは分かった。ただ、FlutterでAndroidネイティブSDKを扱うくらいなら、正直Android Studioで最初から開発した方がよいかなと思いました。これに、iOSのネイティブSDKなんか入れたら、3つの言語を理解しかつ3つの開発環境を使ったことがある人じゃないと開発できない敷居の高いプログラムになりそうです。
FlutterでネイティブSDKを使用したいのなら、Dart言語の環境共通部分が開発の主要部分で、ネイティブ部分がおまけみたいなものなら開発する利点がありそうだと感じました。

おわりに

記事を読んでもらいましてありがとうございました。
私はflutterがクロスプラットフォーム環境としてはじめて使用するものなので、android・iOS環境が1つの言語で開発できるなんて効率的ですごく便利だなと思っていましたが、今回のネイティブ部分についてはそれぞれの知識が必要だと思い知りました。これも経験ですね、良い勉強になりました。

参考

https://docs.flutter.dev/platform-integration/platform-channels
https://nobushiueshi.com/flutterネイティブの画面viewcontrollerを表示する方法ios編/

Discussion