FlutterFire 5.0への移行で直す4項目|App Check・Data Connect・Kotlin Gradleプラグイン・minSdk 24

FlutterFire 5.0が公開され、App Check・Data ConnectとAndroidのビルド設定に変更が入った

Firebaseは2026年10月15日、Flutter向けのFirebaseパッケージ群(FlutterFire)をまとめて更新し、バージョン一式をそろえた「BoM 5.0.0」を公開しました。firebase_core 5.0.0、firebase_auth 7.0.0、firebase_app_check 0.5.0など、主要なパッケージがそろって大きな版に上がっています。

リリースノートには、App Checkの初期化の引数名の変更や、Data Connectの引数の削除など、既存のコードがそのままではビルドできなくなる変更(破壊的変更)が並んでいます。AndroidではFirebase Android SDKの新しい版(BoM 35)が使われ、Firebaseのライブラリが求めるAndroidの下限(minSdk)が、Android 7.0にあたるAPIレベル24に上がりました。アプリ側の設定も24以上が必要です。

この記事では、Flutter 3.38.5で作った最小のサンプルアプリを4.x系から5.0へ上げ、静的解析とAndroidのビルドで実際に出たエラーと直し方を順に説明します。Kotlin Gradleプラグインの更新が必要になる条件も、ビルドを繰り返して確かめました。読み終えると、自分のアプリで直す場所と、更新する順番を決められます。

移行で直す4項目

Dartのコード2項目と、Androidのビルド設定2項目を直す

Dart:App Check

providerAndroidなどへ

引数名に加え、渡す値も列挙型からProviderクラスに変わる。

Dart:Data Connect

auth・appCheckを削除

instanceForに渡していた2つの引数を消すと直る。

Android:Kotlin Gradleプラグイン

2.3以上へ上げる

firebase_auth(Data Connect経由を含む)を使うアプリで必要。jvmTargetの書き方も変える。

Android:minSdk

24以上にする

24未満のままだと、マニフェストの統合でビルドが止まることがある。

検証に使ったバージョンと環境

サンプルは flutter create で作った新規プロジェクトで、Firebaseのプロジェクト設定ファイル(google-services.json)は入れていません。確かめたのは、コードの静的解析(flutter analyze)と、Android向けのデバッグ版APKのビルドまでです。以下では、移行前の版(BoM 4.x系。firebase_core 4.x)を「4.x系」と呼びます。

パッケージ移行前(4.x系)移行後(BoM 5.0.0)
firebase_core4.15.05.0.0
firebase_app_check0.4.80.5.0
firebase_auth6.7.07.0.0
firebase_data_connect0.3.30.4.0

2026年10月21日に確認。Apple M4のMac(macOS 27.0.1)、Flutter 3.38.5、Dart 3.10.4、Android Gradle Plugin 8.11.1、Gradle 8.14。

FlutterFire 5.0の一式を使うには、Flutter 3.27.0以上とDart 3.6.0以上が必要です。Flutterが古い場合は、先にFlutter本体を上げておきます。

App CheckとData Connectは、引数の書き換えが必要になった

App Checkは、正規のアプリからのリクエストかどうかをFirebase側で確かめる仕組みです。アプリの起動時に activate を呼び、Android、iPhone、Webのそれぞれで使う確認方法(プロバイダ)を指定します。4.x系までは次のように書いていました。

import 'package:firebase_app_check/firebase_app_check.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_data_connect/firebase_data_connect.dart';
import 'package:flutter/foundation.dart';

// FlutterFire 4.x までの書き方(移行前)
Future<void> activateAppCheck() async {
  await FirebaseAppCheck.instance.activate(
    webProvider: ReCaptchaV3Provider('recaptcha-v3-site-key'),
    androidProvider:
        kDebugMode ? AndroidProvider.debug : AndroidProvider.playIntegrity,
    appleProvider: kDebugMode ? AppleProvider.debug : AppleProvider.appAttest,
  );
}

FirebaseDataConnect connectDataConnect() {
  return FirebaseDataConnect.instanceFor(
    connectorConfig: ConnectorConfig('asia-northeast1', 'default', 'my-service'),
    auth: FirebaseAuth.instance,
    appCheck: FirebaseAppCheck.instance,
  );
}

このコードは、4.x系(firebase_app_check 0.4.8)の時点で非推奨の書き方になっていて、flutter analyze では5件の注意(info)が出ます(下の出力では1件だけ抜粋)。パッケージを5.0へ上げると、同じ5件がエラーに変わり、ビルドできなくなりました。

# 4.x系(移行前)
info • 'androidProvider' is deprecated and shouldn't be used. Use providerAndroid instead. This parameter will be removed in a future major release • lib/firebase_setup.dart:10:5 • deprecated_member_use

# 5.0へ上げた直後
error • The named parameter 'webProvider' isn't defined • lib/firebase_setup.dart:9:5 • undefined_named_parameter
error • The named parameter 'androidProvider' isn't defined • lib/firebase_setup.dart:10:5 • undefined_named_parameter
error • The named parameter 'appleProvider' isn't defined • lib/firebase_setup.dart:12:5 • undefined_named_parameter
error • The named parameter 'auth' isn't defined • lib/firebase_setup.dart:19:5 • undefined_named_parameter
error • The named parameter 'appCheck' isn't defined • lib/firebase_setup.dart:20:5 • undefined_named_parameter

直すときは、引数名を providerWeb、providerAndroid、providerApple に変えたうえで、渡す値も差し替えます。以前は AndroidProvider.playIntegrity のような列挙型の値を渡していましたが、新しい引数には AndroidPlayIntegrityProvider() のようなクラスのインスタンスを渡します。

4.x系までの値(列挙型)

  • AndroidProvider.debug
  • AndroidProvider.playIntegrity
  • AppleProvider.debug
  • AppleProvider.appAttest
  • AppleProvider.deviceCheck

5.0で渡す値(クラス)

  • AndroidDebugProvider()
  • AndroidPlayIntegrityProvider()
  • AppleDebugProvider()
  • AppleAppAttestProvider()
  • AppleDeviceCheckProvider()

Data Connect(Firebaseのデータベース接続サービス)の FirebaseDataConnect.instanceFor は、auth と appCheck の引数がなくなりました。5.0ではFirebaseアプリの設定から自動で取得するので、2つの引数を消せば直ります。直したあとのコードは次のとおりで、flutter analyze の結果は「No issues found!」になりました。

import 'package:firebase_app_check/firebase_app_check.dart';
import 'package:firebase_data_connect/firebase_data_connect.dart';
import 'package:flutter/foundation.dart';

// FlutterFire 5.0 の書き方(移行後)
Future<void> activateAppCheck() async {
  await FirebaseAppCheck.instance.activate(
    providerWeb: ReCaptchaV3Provider('recaptcha-v3-site-key'),
    providerAndroid: kDebugMode
        ? const AndroidDebugProvider()
        : const AndroidPlayIntegrityProvider(),
    providerApple: kDebugMode
        ? const AppleDebugProvider()
        : const AppleAppAttestProvider(),
  );
}

FirebaseDataConnect connectDataConnect() {
  return FirebaseDataConnect.instanceFor(
    connectorConfig: ConnectorConfig('asia-northeast1', 'default', 'my-service'),
  );
}

この新しい書き方は、4.x系(firebase_app_check 0.4.8、firebase_data_connect 0.3.3)に戻しても「No issues found!」でした。パッケージを上げる前にコードだけ先に書き換えておけば、5.0へ上げた時点でDart側のエラーが出ない状態にできます。

firebase_authを使うアプリは、Kotlin Gradleプラグインの更新が必要だった

Dartのコードを直したあと、Android向けにビルド(flutter build apk --debug)すると、Kotlinのコンパイルで止まりました。Flutter 3.38.5の flutter create が作るプロジェクトでは、Kotlin Gradleプラグイン(org.jetbrains.kotlin.android。KotlinのコードをビルドするためのGradleの部品)の版が2.2.20になっています。

e: .../firebase-auth-25.0.0-api.jar!/META-INF/...kotlin_module Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 2.4.0, expected version is 2.2.0.

* What went wrong:
Execution failed for task ':firebase_auth:compileDebugKotlin'.

firebase_auth 7.0.0がAndroidで使うFirebase Authのライブラリ(firebase-auth 25.0.0)が、Kotlin 2.4の形式で作られているためです。Kotlinの互換性の方針では、コンパイラは1つ先の版の形式をおおむね読めるものの保証はなく、2つ先の版の形式は読めないとされています。今回の検証でも、2.2.20では失敗し、2.3.0で成功しました。Firebase Android SDKのリリースノートがfirebase-auth 25.0.0の破壊的変更として挙げているのはminSdkの引き上げで、Kotlinの版の条件はビルドして分かりました。

どの構成で起きるかを切り分けるため、条件を変えて4通りビルドしました。

構成ごとのAndroidビルドの結果

成功

4.x系+firebase_auth、プラグイン2.2.20

成功

5.0でfirebase_coreとfirebase_app_checkだけ、プラグイン2.2.20

失敗

5.0+firebase_auth、プラグイン2.2.20(Data Connectも内部でfirebase_authを使う)

成功

5.0+firebase_auth、プラグイン2.3.0とcompilerOptionsへの変更

いずれも flutter build apk --debug で確認した。5.0の3通りは、直前に flutter clean を実行した。

直し方は2段階です。まず android/settings.gradle.kts で、Kotlin Gradleプラグインの版を2.3.0に上げます。

plugins {
    id("dev.flutter.flutter-plugin-loader") version "1.0.0"
    id("com.android.application") version "8.11.1" apply false
    id("org.jetbrains.kotlin.android") version "2.3.0" apply false
}

プラグインを上げただけでビルドすると、今度は android/app/build.gradle.kts の書き方でエラーになります。flutter create の雛形にある kotlinOptions { jvmTarget = ... } の書き方が、2.3.0と2.4.0のどちらでもエラーとして扱われました。

e: .../android/app/build.gradle.kts:19:9: Using 'jvmTarget: String' is an error. Please migrate to the compilerOptions DSL. More details are here: https://kotl.in/u1r8ln

android { } の中の kotlinOptions のブロックを消し、ファイルの最上位に kotlin { compilerOptions { } } のブロックを足します。この変更のあと、firebase_authを含む5.0の構成でもAPKのビルドが成功しました。プラグイン2.3.0とこの書き方の組み合わせは、4.x系のパッケージ(新しい書き方のDartコード)でもビルドが成功したので、パッケージを上げる前に済ませておけます。

// android { ... } の中から削除する
//    kotlinOptions {
//        jvmTarget = JavaVersion.VERSION_17.toString()
//    }

// android { ... } の外(ファイルの最上位)に追加する
kotlin {
    compilerOptions {
        jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17)
    }
}

パッケージの版を切り替えた直後のビルドでは、古いビルド結果が残っていたために、プラグインのクラスが見つからないという別のエラーが一度出ました。版を上げたら、flutter clean をしてからビルドすると、エラーの原因を取り違えずに済みます。

minSdkが24未満だと、マニフェストの統合でビルドが止まることがある

Firebase Android SDKのリリースノートは、firebase-auth 25.0.0とfirebase-appcheck 20.0.0の破壊的変更として、minSdkがAPIレベル24に上がったことを挙げています。サンプルの android/app/build.gradle.kts で minSdk = 23 を指定し、Gradleで直接ビルドすると、次のエラーで止まりました。

> Manifest merger failed : uses-sdk:minSdkVersion 23 cannot be smaller than version 24 declared in library [:firebase_app_check] ... as the library might be using APIs not available in 23

一方、Flutter 3.38.5の flutter build を使うと、ビルドの前に「Upgrading build.gradle.kts」と表示され、minSdk = 23 が minSdk = flutter.minSdkVersion(Flutter 3.38.5では24)に書き換えられて、ビルドは成功しました。これはFlutterのツール自体の機能で、FlutterFireの版には関係しません。Flutter 3.38.5のソースでは、書き換えの対象は、appの build.gradle(.kts) に16〜23の数値を直接書いた行だけです。

minSdkを変数やプロパティで指定している場合や、CIで ./gradlew を直接実行している場合は、この書き換えが働かず、上のエラーで止まります。flutter.minSdkVersion の値もFlutterの版で変わるので、使っているFlutterで確かめ、24未満なら自分で minSdk = 24 以上を書きます。minSdkを24にすると、Android 6.0(APIレベル23)以前の端末にはアプリを配信できなくなるので、Google Playの配信対象やCIのテスト端末にAndroid 6.0の端末がある場合は、その扱いも決めておきます。

FlutterFire 5.0へ上げる手順

ここまでの結果をもとに、エラーを1種類ずつ片付けられる順番にまとめました。

手順1 4.x系の最新版でコードを直す

4.x系の最新版(firebase_app_check 0.4.8など)では新しい引数が使えるので、まずそこまで上げる。flutter analyze で deprecated_member_use の注意を探し、App CheckとData Connectを新しい書き方に直す。

手順2 Androidのビルド設定を直す

minSdkを24以上にする。firebase_authかData Connectを使うなら、Kotlin Gradleプラグインを2.3以上にして、jvmTargetをcompilerOptionsの書き方へ移す。ここまでは4.x系のままビルドできる。

手順3 パッケージを上げる

FlutterFireの各パッケージを、BoM 5.0.0の一覧にある版へまとめて上げる。例: flutter pub add firebase_core:^5.0.0 firebase_auth:^7.0.0 firebase_app_check:^0.5.0(使っているパッケージをすべて並べる)。

手順4 ビルドで確かめる

flutter clean のあと、flutter analyze と、配布するすべての環境(Android・iPhoneなど)のビルドを通す。

リリースノートには、この記事で試した4項目のほかにも、使っているパッケージによって影響がある変更が載っています。

  • firebase_ml_model_downloader は新しい版の公開が終わり、モデルの配信サービスは2027年6月15日に終了します。Cloud Storageとfirebase_storageへの移行が案内されています。
  • firebase_ai では、非推奨だったAPIが削除され、candidateCountなど一部の設定が新たに非推奨になりました。
  • iPhone向けのFirebase SDKは、Swift Package Managerでは13.0.0、CocoaPodsでは12.19.0が使われます。CocoaPodsでの新しい版の配布終了と移行手順は、Firebase Apple SDK 13の記事で紹介しています。

App CheckやData Connectを使っていないアプリでも、firebase_authを使っていて、Kotlin Gradleプラグインが2.3未満なら、Androidのビルド設定を直す必要があります。パッケージを上げる前に、android/settings.gradle.kts のKotlin Gradleプラグインの版と、android/app/build.gradle.kts の kotlinOptions の有無を確かめておくと、移行の途中でビルドが止まりません。