10
02

이 글은 Kotlin DSL - KTS에서 gradle에 manifest, buildconfig변수를 설정하는 방법에 대해 적혀있으므로 groovy 기반이라면 도움이 안될 수 있다.

local.properties에 이미 값을 적었다고 가정하겠다.

KAKAO_NATIVE_APP_KEY="value"
KAKAO_MANIFEST_APP_KEY=value

그리고 build.gradle :app 을 열어 함수를 적어준다. 위치는 android{} 밖에 적으면 된다.

fun getAppKey(propertyKey: String): String {
    return gradleLocalProperties(rootDir).getProperty(propertyKey)
}

이 함수는 Properties()인스턴스를 명시적으로 사용하지않아도 프로퍼티 파일의 값을 가져올 수 있게 한다. local.properties값을 가져오는 gradleLocalProperties()를 사용한다.

buildConfigField("String", "KAKAO_NATIVE_APP_KEY", getAppKey("KAKAO_NATIVE_APP_KEY"))
manifestPlaceholders["KAKAO_MANIFEST_APP_KEY"] = getAppKey("KAKAO_MANIFEST_APP_KEY")

각각 buildCofing 변수, manifest변수로 사용된다. 위에서 매니페스트에는 따옴표를 안쓰고, buildConfig에는 따옴표를 썼다. 이는 BuildConfig변수 생성시 local.properties에 있는 값을 그대로 긁어오기 때문에 타입은 String이지만 따옴표로 감싸져있지않아서 빌드 시에 에러가 발생한다.

error: expected

이렇게 하면 표면적으로는 완성인데, 이건 AGP(Android Gradle Plugin) 8.0 이전에 통하던 방법이다. 8.0 부터는 buildConfig변수 선언 디폴트가 false라서 아무 설정을 해두지않으면 BuildConfig변수를 사용할 수 없다. 8.0 넘어서 BuildConfig를 사용하려고 한다면 이런 에러를 보게 될 것이다.

defaultConfig contains custom BuildConfig fields, but the feature is disabled.

따라서 gradle.properties파일에 아래 코드를 넣어준다.

android.defaults.buildfeatures.buildconfig=true

다른 방법으로는 buildFeature에 해당 코드를 넣어주는 것이다. release, debug 가 나뉘어져있으면 이 방식이 더 적합하겠다.

buildFeatures {
    buildConfig = true
}

AGP 8.X 까지는 이렇게 사용하면 되겠지만, 9.0 부터는 아예 BuildConfig사용을 막아버린다고 하니, 다른 해결책을 또 찾아야한다.


참조:

https://stackoverflow.com/questions/74634321/fixing-the-build-type-contains-custom-buildconfig-fields-but-the-feature-is-di

https://velog.io/@paulus0617/manifestPlaceholders

https://hello-bryan.tistory.com/143

 

"댓글, 공감 버튼 한 번씩 누르고 가주시면 큰 힘이 됩니다"

반응형
COMMENT