Skip to content

Flutter Gradleプラグインの非推奨警告の解決

問題の説明

Flutter 3.19.0以降でアプリを実行すると、次の警告が表示されます:

You are applying Flutter's app_plugin_loader Gradle plugin
imperatively using the apply script method, which is deprecated and
will be removed in a future release. Migrate to applying Gradle
plugins with the declarative plugins block:
https://flutter.dev/go/flutter-gradle-plugin-apply

You are applying Flutter's main Gradle plugin imperatively using the
apply script method, which is deprecated and will be removed in a
future release. Migrate to applying Gradle plugins with the
declarative plugins block:
https://flutter.dev/go/flutter-gradle-plugin-apply

この警告は、古いGradleプラグイン適用方法(apply script)が非推奨となったために発生します。Flutter 3.16以降では、Gradleプラグインを宣言的に適用する新しい方法に移行する必要があります。警告を放置すると、将来のFlutter更新でビルドが失敗する可能性があります。

根本的な原因

  • プロジェクトがFlutter 3.16以前で作成されている
  • android/settings.gradleandroid/app/build.gradleで非推奨のapplyメソッドを使用している
  • プラグイン適用方法が新仕様に更新されていない

推奨解決方法

公式の移行ガイド(Flutter公式ドキュメント)に基づいた手順です。以下のファイルを順次編集します。

ステップ1: AGPとKotlinバージョンの確認

android/build.gradleを開き、以下を確認します:

gradle
buildscript {
    ext.kotlin_version = '1.7.10' // Kotlinバージョン(例)
    dependencies {
        classpath 'com.android.tools.build:gradle:7.3.0' // AGP(Android Gradle Plugin)バージョン(例)
    }
}

記録しておく値

  • AGPバージョン(例:7.3.0)
  • Kotlinバージョン(例:1.7.10)

ステップ2: settings.gradleの更新(プロジェクトレベル)

android/settings.gradleを以下で完全に置換

gradle
pluginManagement {
    def flutterSdkPath = {
        def properties = new Properties()
        file("local.properties").withInputStream { properties.load(it) }
        def flutterSdkPath = properties.getProperty("flutter.sdk")
        assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
        return flutterSdkPath
    }()

    includeBuild("$flutterSdkPath/packages/flutter_tools/gradle")

    repositories {
        google()
        mavenCentral()
        gradlePluginPortal()
    }
}

plugins {
    id "dev.flutter.flutter-plugin-loader" version "1.0.0"
    id "com.android.application" version "{agpVersion}" apply false  // {agpVersion}をステップ1の値に
    id "org.jetbrains.kotlin.android" version "{kotlinVersion}" apply false  // {kotlinVersion}をステップ1の値に
}

include ":app"

設定例:

gradle
// 例(AGP: 7.3.0, Kotlin: 1.7.10の場合)
plugins {
    ...
    id "com.android.application" version "7.3.0" apply false
    id "org.jetbrains.kotlin.android" version "1.7.10" apply false
}

ステップ3: build.gradleの更新(プロジェクトレベル)

android/build.gradleからbuildscriptブロック全体を削除。ファイルは以下だけ残します:

gradle
allprojects {
    repositories {
        google()
        mavenCentral()
    }
}

rootProject.buildDir = '../build'
subprojects {
    project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
    project.evaluationDependsOn(':app')
}

tasks.register("clean", Delete) {
    delete rootProject.buildDir
}

ステップ4: app/build.gradleの更新(アプリレベル)

android/app/build.gradleを次の通り修正:

1. 古いプラグイン適用部分を削除

以下のブロックを完全に削除

gradle
// 削除対象(行番号は例)
def flutterRoot = localProperties.getProperty('flutter.sdk')
if (flutterRoot == null) {
    throw new GradleException("Flutter SDK not found...")
}

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"

2. 新しいプラグイン宣言を追加

ファイルの先頭に以下を追加:

gradle
plugins {
    id "com.android.application"
    id "kotlin-android"
    id "dev.flutter.flutter-gradle-plugin"
}

3. 不要な依存関係を削除

dependenciesブロックからKotlin STDライブラリを削除:

gradle
dependencies {
    // 次の行を削除(存在する場合)
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}

Firebase/Crashlytics使用時の追加手順

GMSやCrashlyticsを使用している場合:

  1. android/build.gradleから関連classpathを削除
  2. app/build.gradleからapply plugin行を削除
  3. settings.gradleのpluginsブロックに追加:
gradle
plugins {
    ...
    id "com.google.gms.google-services" version "4.4.0" apply false
    id "com.google.firebase.crashlytics" version "2.9.9" apply false
}
  1. app/build.gradleのpluginsブロックに追加:
gradle
plugins {
    ...
    id "com.google.gms.google-services"
    id "com.google.firebase.crashlytics"
}

代替方法:プロジェクト再生成

カスタマイズが少ない場合は、Androidディレクトリを再生成する方が簡単です:

bash
# カレントディレクトリで実行
rm -rf android/
flutter create . --platforms=android

注意点

この方法ではAndroid固有のカスタマイズ(権限設定、アイコン変更など)が全て消去されます。必ずバックアップを取ってから実行してください。

よくあるエラーと対処法

gradle
// エラー例:プラグインが見つからない
Plugin [id: 'dev.flutter.flutter-gradle-plugin'] was not found...

解決策

  1. settings.gradleincludeBuildパスが正しいか確認
  2. flutterSdkPathの取得ロジックが最新版と同じか確認
  3. local.propertiesflutter.sdkの正しいパスが記載されているか確認

重要

作業前に全てのGradleファイルをバックアップし、バージョン番号はご自身のプロジェクトのものを使用してください。変更後はflutter cleanを実行してからビルドします。

最終チェックリスト

  1. settings.gradle: 宣言的プラグイン設定 ✅
  2. build.gradle: buildscriptブロック削除 ✅
  3. app/build.gradle:
    • 不要なapply行削除 ✅
    • 先頭にpluginsブロック追加 ✅
    • 不要な依存関係削除 ✅
  4. 全ファイルでバージョン番号が一致 ✅

これらの手順を完了すると警告が解消され、Flutterの最新Gradleプラグイン仕様に適合します。問題が解決しない場合は、公式移行ガイドで最新情報を確認してください。