티스토리 뷰

Flutter를 3.22.2로 업그레이드 했더니, 아래와 같은 메시지가 발생!

 

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

 

 

 

 

 

메시지에서 안내해준 링크로 가보니 내용이 아래와 같음

 

  • 과거 방식 (Flutter 3.16 이전):
    • Gradle의 기존 명령어 방식 (apply script)을 사용하여 플러그인 적용.
    • 이 방식은 더 이상 권장되지 않습니다.
  • 현재 방식 (Flutter 3.16부터):
    • Gradle의 선언적 플러그인 블록 (plugins {}) 을 사용하여 플러그인 적용.
    • 이 방식이 현재 권장되는 방식입니다.
    • flutter create 명령어로 생성된 프로젝트는 기본적으로 이 방식을 사용합니다.
    • Flutter 3.16 이전 버전으로 생성된 프로젝트는 수동으로 이전해야 합니다.

나는 3.16 버전 이전에 생성한 프로젝트라 수동으로 이전하는 작업이 필요함!

안내된 대로 플러그인 블록을 심어보겠음

 

 

링크 ⬇️

https://flutter.dev/go/flutter-gradle-plugin-apply

 

Deprecated imperative apply of Flutter's Gradle plugins

How to migrate your Flutter app's Android Gradle build files to the new, declarative format.

docs.flutter.dev

 


1. AGP(Android Gradle Plugin)과 코틀린 버전 알아오기

위치 : <app-src>/android/build.gradle

 

여기서 AGP 버전은 7.3.0이고, 코틀린 버전은 1.7.10임.

이걸 기억해두고

buildscript {
	///⭐️코틀린 버전
    ext.kotlin_version = '1.7.10'
    repositories {
        google()
        mavenCentral()
    }

    dependencies {
    	///⭐️AGP 버전
        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
}

 

 

2. setting.gradle 셋팅 변경하기

위치 : <app-src>/android/settings.gradle

 

위에서 외워온 버전을 Plugin 문법에 잘 넣어주기

{appVersion} = 7.3.0

{kotlinVersion} = 1.7.10

 

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
    id "org.jetbrains.kotlin.android" version "{kotlinVersion}" apply false
}

include ":app"

 

 

 

3. build.gradle에서 build script 지우기

위치: <app-src/android/build.gradle

아래 부분을 전부 지워줌

-buildscript {
-    ext.kotlin_version = '{kotlinVersion}'
-    repositories {
-        google()
-        mavenCentral()
-    }
-
-    dependencies {
-        classpath "org.jetbrains.kotlin:gradle-plugin:$kotlin_version"
-    }
-}

 

그러면 android>build.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-src>/android/app/build.gradle

 

지울 부분

//1
-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.")
-}

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

 

그리고 이제 Plugin DSL 문법을 통해 다시 적어줌. 맨위에!!

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

 

 

5. dependency 부분에서 제거하기

위치 : <app-src>/android/app/build.gradle

만약 dependencis {} 부분에 "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" 내용이 있다면 이것도 지워주기

dependencies {
-    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}

 

 

 

6. 구글 처리하기

만약 구글 서비스를 이용중이라면 아래와 같이 기존 내용을 지우고 plugin 안에 추가해주면 됨!

 

1) 지울 곳 : 2곳

위치1 : <app-src>/android/build.gradle

💡 이 때 버전 외워두기

google-services = 4.4.0

firebase-crashlytics = 2.9.9

 buildscript {
     // ...

     dependencies {
         // ...
-        classpath "com.google.gms:google-services:4.4.0"
-        classpath "com.google.firebase:firebase-crashlytics-gradle:2.9.9"
     }
 }

 

위치2 : <app-src>/android/app/build.gradle

-apply plugin: 'com.google.gms.google-services'
-apply plugin: 'com.google.firebase.crashlytics'

 

 

2) 추가할 곳 : 2곳

위치1 : <app-src>/android/settings.gradle

💡외워둔 버전은 여기다가 쓰기

 plugins {
     id "dev.flutter.flutter-plugin-loader" version "1.0.0"
     id "com.android.application" version "{agpVersion}" apply false
     id "org.jetbrains.kotlin.android" version "{kotlinVersion}" 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
 }

 

위치2 : <app-src>/android/app/build.gradle

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

 

 


 

이제 flutter run을 통해 앱이 잘 빌드되고 실행되는지 확인하면 됨!

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크