【Flutter】「You are applying Flutter’s main Gradle plugin」の警告を解決

はじめに

Flutter 3.19してAndroidで実行したら「You are applying Flutter's main Gradle plugin imperatively using the apply script method」という警告しました。URLの記載を見ながら修正はできましたが、ちょっと分かりずらかったので、メモを残しておきます。ご参考になれば、というのと、自分が後で必要になると思う。

警告文全体

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

android/build.gradle

削除部分

buildscript {
    ext.kotlin_version = '1.8.22'
    repositories {
        google()
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:7.3.0'
        classpath 'com.google.gms:google-services:4.3.13'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

kotlin_version と com.android.tools.build:gradleのバージョン をメモしておく。

ファイル冒頭に追加

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

android/app/build.gradle

以下を削除

def flutterRoot = localProperties.getProperty('flutter.sdk')
if (flutterRoot == null) {
    throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}

(中略:ここは消さない。flutterVersionCodeとかflutterVersionNameとかは後で使われる)

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

以下をファイル冒頭に追加

plugins {
  id "com.android.application"
  id "kotlin-android"
  id "dev.flutter.flutter-gradle-plugin"
  id "com.google.gms.google-services"
  id "com.google.firebase.crashlytics"
}

id "com.google.gms.google-services"はFirebase等、 id "com.google.firebase.crashlytics" はFirebase Crashlytics が必要であれば追加。不要であれば、なくて良いはず。(あったら「Plugin [id: ‘com.google.gms.google-services’] was not found in any of the following sources:」とエラーが出た)

以下を dependencies の直前に追加

def kotlin_version = "1.8.22"

1.8.22 は、上記でメモしたもの。

android/setting.gradle

以下を削除

以下のようでしたが、ファイル全部書き換えのため削除。

include ':app'

def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
def properties = new Properties()

assert localPropertiesFile.exists()
localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }

def flutterSdkPath = properties.getProperty("flutter.sdk")
assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.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
    }
    settings.ext.flutterSdkPath = flutterSdkPath()

    includeBuild("${settings.ext.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 "7.3.0" apply false
    id "org.jetbrains.kotlin.android" version "1.8.22" apply false
    id "com.google.gms.google-services" version "4.4.0" apply false
    id "com.google.firebase.crashlytics" version "2.9.9" apply false
}

include ":app"

org.jetbrains.kotlin.android のバージョンはメモしたkotlin_versionを記載する
com.android.application のバージョンはメモしたcom.android.tools.build:gradleのバージョンを記載する。
id "com.google.gms.google-services"の行はFirebase等、 id "com.google.firebase.crashlytics" の行はFirebase Crashlytics が必要であれば追加。不要であれば、なくて良いはず。

参考

Deprecated imperative apply of Flutter's Gradle plugins