BuildConfig는 어떻게 사용할까?

김태영·2024년 7월 31일
0

TIL

목록 보기
59/70
post-thumbnail

오늘 공부한 것

- 앱개발 심화 강의 듣기
- 스탠다드반 강의 듣기
- 강의 내용 복습 및 정리

개요

심화 주차 강의를 들으며 룰루랄라 api도 사용해가며 해피 코딩을 하던 도중, 메일을 하나 받게 된다.

나의 google api key가 깃허브에 노출되었다는 알림이었다. 귀찮아서 아무 설정도 하지 않고 냅다 키를 코드 내부에 작성한 게 원인이었다.

실제로 출시된 앱도 아니고, 제한도 걸어둬서 엄청난 문제가 되진 않겠지만 그래도 혹시 모르니 이 api 키를 숨겨보기로 했다.

BuildConfig

api 키를 숨기기 전에 우리는 BuildConfig라는 것에 대해 잠깐 알고 넘어가야한다. BuildConfig는 이름 그대로 현재 빌드에 대한 정적인 정보를 포함하는 Java 파일이다. 문서를 살펴보면 다음과 같이 나와있다.

Gradle은 빌드 시 BuildConfig 클래스를 생성하므로 앱 코드가 현재 빌드에 관한 정보를 검사할 수 있습니다. 또한, buildConfigField() 메서드를 사용하여 Gradle 빌드 구성 파일로부터 BuildConfig 클래스에 맞춤 필드를 추가할 수 있으며 앱의 런타임 코드에 있는 값에 액세스할 수 있습니다. 마찬가지로, resValue()로 앱 리소스 값을 추가할 수 있습니다.

대충 요약해보자면 BuildConfig 클래스에 임의로 필드를 추가할 수 있다는 말이다. 나는 요걸 이용해서 api key를 BuildConfig 필드에 추가해보고자 한다.

1. local.properties 파일에 값 추가

먼저 local.properties 파일에 키=값 형태로 원하는 값을 작성해주자. api key만 추가해도 되지만 나는 그냥 요청 url도 같이 작성해주었다.

둘 다 String 타입으로 다룰 것이라 큰 따옴표로 값을 감싸주었다. 다른 타입도 있다는데 오늘은 String만 알아보겠다.

// local.properties (.gitignore에 추가된 상태여야 한다.)
MY_BASE_URL="{API 요청 URL}"
MY_API_KEY="{발급받은 API 키}"

이때, local.properites 파일은 정말진짜 로컬에만 갖고 있기 위해(깃허브에 업로드하지 않기 위해) .gitignore에 추가해주는 걸 잊지말자. 아마 기본으로 추가가 되어있..는 것 같다. (나는 그랬음)

2. buildConfigField 추가

다음으로는 앱 수준의 build.gradle 파일에 buildConfigField를 추가해주어야 한다. api key도 그렇고, url도 그렇고 모두 문자열 형태로 작성했기 때문에 gradle 파일에도 String 타입으로 작성해주었다.

// build.gradle.kts (:app)
import com.android.build.gradle.internal.cxx.configure.gradleLocalProperties

...

defaultConfig {
    ...
    buildConfigField(
        "String",
        "MY_API_KEY",
        gradleLocalProperties(rootDir, providers).getProperty("MY_API_KEY")
    )
    buildConfigField(
        "String",
        "MY_BASE_URL",
        gradleLocalProperties(rootDir, providers).getProperty("MY_BASE_URL")
    )
}

3. Unresolved reference: BuildConfig

이제 BuildConfig를 import해서 사용하기만 하면 되는데... 마음처럼 되지 않는 것이 또 개발인것. BuildConfig 위에 마우스를 아무리 올려놔도 자동 import가 뜨지 않는다.

🤯 Unresolved reference: BuildConfig

문서를 살펴보면 다음과 같이 나와있다.

AGP 8.0은 기본적으로 BuildConfig를 생성하지 않습니다. 이 옵션이 필요한 프로젝트에서 DSL을 사용하여 이 옵션을 지정해야 합니다.

그렇다.. AGP 8.0 부터는 gradle에 옵션을 지정해줘야 BuildConfig를 사용할 수 있다고 한다.

buildFeatures {
    buildConfig = true // 추가!
}

추가해주고 난 뒤, 꼭 꼭 다시 빌드해주는 것을 잊지 말자. Sync만 했을 때에는 잘 적용이 되지 않았었다. 모든 것을 마치고 나면 드디어..! import [패키지명].BuildConfig으로 import가 가능해진다. 사용은 파일에 명시한 이름 그대로 사용해주면 된다.

val authKey = BuildConfig.MY_API_KEY
profile
화이팅

1개의 댓글

comment-user-thumbnail
2024년 8월 1일

👍

답글 달기