티스토리 뷰
이전에 만들었던 플러터 앱을 실행하니 다음과 같은 경고문이 나타났다.
Running Gradle task 'assembleDebug'...
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
플러터 3.16 이전에는 apply 스크립트를 사용하여 Gradle 플러그인을 적용하는 방식이었지만, 이제 플러그인 방식을 사용하라는 내용이다.
기존 apply 방식
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'com.google.gms.google-services'
새로운 플러그인 방식
plugins {
id 'com.android.application'
id 'kotlin-android'
id 'com.google.gms.google-services'
}
이를 해결하기 위해서는 수동으로 마이그레이션을 해야 한다.
1. android / settings.gradle 수정하기
먼저, 현재 프로젝트에서 사용 중인 안드로이드 그래들 플러그인과 코틀린 버전을 찾아야 한다. 이 값은 android / build.gradle 파일에서 확인할 수 있다.
buildscript {
ext.kotlin_version = '1.7.10'
repositories {
google()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.3.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
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
}
안드로이드 그래들 플러그인 버전은 classpath 'com.android.tools.build:gradle:7.3.0'에 나와 있는 7.3.0이 된다. 그리고 코틀린 버전은 ext.kotlin_version = '1.7.10'에 나와 있는 1.7.10이 된다.
다음으로 android / settings.gradle 파일의 내용을 아래 내용으로 교체하고, {agVersion}과 {kotlinVeersion}을 앞에
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 "{안드로이드 그래들 플러그인 버전}" apply false
id "org.jetbrains.kotlin.android" version "{코틀린 버전}" apply false
}
include ":app"
2. android / build.gradle 수정하기
android / build.gradle 에서 buildscript 블록을 제거한다. 그러면 보통 아래와 같이 수정될 것이다.
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
}
3. android / app / build.gradle 수정하기
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.")
}
apply plugin: 'com.android.application'
apply plugin: 'com.jetbrains.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"
}
그리고 파일에서 dependenies 블록에 "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"에 대한 종속성이 포함되어 있는 경우, 해당 종속성을 제거하자. 만약 이것이 유일한 종속성이라면 블록을 완전히 제거해도 된다.
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}
검증하기
모든 수정이 끝이 났다. 이제 경고 문구가 없이 앱이 잘 실행되는지 확인해 보자! 끝