Notice
Recent Posts
Recent Comments
Link
반응형
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Archives
Today
Total
관리 메뉴

coding etude

[flutter android] flutter gradle plugin migrate 하기 본문

Flutter(Dart)

[flutter android] flutter gradle plugin migrate 하기

코코리니 2025. 8. 21. 19:46
반응형

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 경고도 사라질 것이다. 

 

끝.

반응형