Upgrade to Pro — share decks privately, control downloads, hide ads and more …

FlutterとNative Codeの連 携について

Avatar for 斉藤尚 斉藤尚
September 13, 2023

FlutterとNative Codeの連 携について

Flutterとネイティブコードを組み合わせたアプリの開発について説明します。
flutter packageでは対応されていない各デバイス上の機能や、
外部のネイティブSDKと連携してアプリを開発したい場合に必要です。

Avatar for 斉藤尚

斉藤尚

September 13, 2023
Tweet

Other Decks in Programming

Transcript

  1. 自己紹介 @asupara7 斉藤 尚 ( サイトウ タカシ) Flutter 歴 4

    年ぐらい Web のバックエンド、フロント開発歴も ほかにもデザイン、動画、CG 制作等
  2. Flutter とNative Code の連携について Flutter とネイティブコードを組み合わせたアプリの開発について説明します。 flutter package では対応されていない各デバイス上の機能や、 外部のネイティブSDK

    と連携してアプリを開発したい場合に必要です。 ※ 今回のサンプルコードは以下に置いています。 詳しくはこちらのコードを参照してください。 https://github.com/takashi11171117/flutter_native_code_sample
  3. Flutter とは UI フレームワーク スマホアプリのUI を作成するた めのフレームワークで、 Google によって開発されてい ます。

    クロスプラットフォーム Flutter はiOS 、Android 、そ してWeb などのプラットフォ ームで動作します。 Hot Reload 機能 変更したコードをすぐに確認で きます。
  4. Native 連携でよく使う機能 Platform Channel : Flutter ネイティブ間のデータ通信 1. Pigeon :

    Platform Channel をタイプセーフに実装するためのパッケージ 2. Platform View : ネイティブのUI を表示 3. Plugin : ネイティブコードを含めたライブラリ 4. SDK import : ネイティブで開発されたサードパーティーSDK のインポート 5.
  5. Platform Channel Flutter アプリケーションとネイティブコード(Android やiOS )との間でデータの通信を 行うための仕組みです。これらのチャンネルを使用してコミュニケーションを行うとき、 メッセージはシリアライズされて送信され、受信側でデシリアライズされます。 1 Method

    Channel Flutter とネイティブコード間で非同期でデータを取得、処理できる 2 Event Channel Flutter とネイティブコード間でライブデータをストリームでハンドリング 3 BasicMessageChannel Flutter とネイティブの間で継続的なデータのやり取り
  6. Event Channel 通信の特性: 一方向(ネイ ティブからFlutter へ) 主な用途: 連続的なデータ のストリームをFlutter に

    送信する場合に使用。ネイ ティブ側からの継続的なデ ータ更新を受信することが 主目的 例: デバイスのセンサーデ ータのように、継続的に更 新されるデータをFlutter に送信する場合など Native 側実装例 チャンネル名の設定 Handler のセット Handler の定義 Flutter 側実装
  7. Android でのPlatformView - VirtualDisplay 描画最終段階でFlutter とネイティブの画面を合成する。 表示するだけの場合HybridComposition より軽く表示でき る。 ただし、別々にレンダリングしているのでキーボード等の操作

    はできなかったり不便。 - HybridComposition Flutter のツリーに組み込んでネイティブの画面を合成する。 そのため、キーボード等の操作がVirtualDisplay より正確に動 作する。 VirtualDisplay よりは、ツリーに組み込む分重い VirtualDIsplay(flutter 側のみ) HybridComposition(flutter 側のみ)
  8. Native SDK のimport Swift Xcode で ios/Runner.xcworkspace を開く 1. Xcode

    で Swift SDK をプロジェクトに追加しま す。これは、プロジェクトナビゲータに SDK フ ァイルをドラッグするか、File -> Add Files to "Runner" を使用して行う 2. ビルド設定のいくつかの設定を構成し、Podfile にいくつかの依存関係を追加 3. Swift SDK のメソッドを呼び出し、プラットフォ ームチャンネルを介した Flutter コードとの通信 を設定するために AppDelegate.swift を編集 4. Kotlin Android Studio で android ディレクトリを開く 1. Android Studio で Kotlin SDK をプロジェクト に追加します。build.gradle ファイルに必要な依 存関係を追加 2. ビルド設定の設定を構成したり、追加の Gradle 依存関係を追加したりする必要があるかも。 3. Kotlin SDK のメソッドを呼び出し、プラットフ ォームチャンネルを介した Flutter コードとの通 信を設定するために、MainActivity.kt を編集 4.
  9. よくある問題 事前にどう連携していくか、よく考えて開発を始めましょう 1 開発の複雑さ Flutter とネイティブコード の統合には、追加のコード や設定が必要 2 バグ発生の可能性

    Flutter とネイティブコード を組み合わせることで、互 いに影響し合ってバグが発 生する可能性がある 3 メンテナンスの負担 Flutter とネイティブコード の混在で開発したアプリの メンテナンスには、より多 くの時間と労力が必要にな ることがある 4 パフォーマンスの悪化 前述の通りPlatformView とかを使いすぎるのはよくない