coding etude
[flutter android] flutter gradle plugin migrate 하기 본문
1. migrate의 이유
최근 flutter 버전이 업데이트 되면서 기존 세팅의 보안을 위해 migrate를 권장하고 있다.
기존 plugin 을 android/build.gradle 에서 선언하고 android/app/build.gradle에서 사용하는 방식이었다.
홈페이지에 따르면 android/build.gradle에서 선언하는 방식은 많은 오류를 발생 시켰다고 한다.
그래서 3.16버전 이후 부터 android/build.gradle에서 선언하던 plugin을 build.setting에서 선언 하는 방식으로 migrate 하는것을 권장하고 있는것이다.
다음 3가지를 순차적으로 진행 하면 된다.
2. android/build.gradle
방법은 생각보다 간단하다.
기존 android/build.gradle에서 선언 하던 내용을 build.setting로 이동 후 android/app/build.gradle에서 사용 하는 방식으로 변경해 주면 된다.
// android/build.gradle
// 삭제 이동 진행
//buildscript {
// ext.kotlin_version = '2.0.21'
// repositories {
// google()
// mavenCentral()
// }
//
// dependencies {
// classpath "com.android.tools.build:gradle:8.7.3"
// 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
}
위 코드는 기존의 레거시 코드이다. 이 코드에서 buildScript 부분을 삭제하고 내용은 build.setting 로 이동 시켜주면 된다.
2. android/build.setting
// android/build.setting
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")
plugins {
// id "dev.flutter.flutter-gradle-plugin" version "1.0.0" apply false
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
id "com.android.application" version "8.7.3" apply false
id "org.jetbrains.kotlin.android" version "1.9.20" apply false
}
}
include ":app"
apply from: "${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle/app_plugin_loader.gradle"
android/build.gradle의 내용을 위 코드의 plugins의 내용 처럼 선언해 주면 된다.
여기서 중요한 부분은 위에 추가된 세가지는 필수적으로 선언 되어야만 android앱이 빌드가 된다.
위에서 부터 설명 살펴보자면,
첫번째 plugin은 flutter에서 선언한 내용을 android로 변환해주는 기본 plugin 이다.
예전에는 flutter-gradle-plugin을 사용 했지만, 지금은 flutter-plugin-loader을 사용한다고 한다.
두번째는 AGP(android gradle plugin)이라고 하고 gradle을 android에서 사용 할 수 있도록 도와주는 plugin이다.
마지막은 보는 그대로 kotlin의 버전을 정의 하는것이다.
이 3가지는 무조건 필수로 선언해주어야 빌드가 가능하다.
이후 외부 plugin을 선언해서 사용하면된다.
예) google-server, firebase
3. android/app/build.gradle
여기까지 진행 헀다면, 이제 android/app/build.gradle에서 선언한 내용을 가져다 사용 하면된다.
// android/app/build.gradle
plugins {
id "com.android.application"
id "kotlin-android"
id "dev.flutter.flutter-plugin-loader"
}
// dependency 사용
dependencies {
implementation 'com.google.firebase:firebase-analytics'
}
그리고 만약 firebase와 같은 외부 plugin을 사용 할 때 그 세부적인 dependency를 아래쪽 dependencies에 선언 해주면 된다.
이렇게 하면 문제 없이 빌드가 되고 기존 빌드시 나오던 deprecated 경고도 사라질 것이다.
끝.
'Flutter(Dart)' 카테고리의 다른 글
[flutter android] Unresolved reference 'embedding'. (2) | 2025.08.22 |
---|---|
[Architecture] Clean Architecture의 이해(2) (1) | 2025.07.31 |
[Architecture] Clean Architecture 의 이해(1) (1) | 2025.07.31 |
[flutter error] Error connecting to the service protocol: (2) | 2025.07.30 |
[android] build.gradle의 버전 세팅하기 (8) | 2025.07.30 |