개발을 하다 보면 API키 값이나 중요 값등을 숨기고 싶을 때가 있다.
그럴 때는 local.properties를 사용하면 간단하게 숨김이 가능하다. 이제 차근차근 알아보자!
✅ 깃을 사용한다면. gitignore에 /build , /local.properties 이 두 가지가 들어가 있다고 가정하고 시작해 보겠다!
# 사용방법
아래 예제에서는 API_KEY값을 숨기는 예제를 해보겠다.
## local.properties 변수 값 설정
우선 가장 먼저 해야 할 것은 local.properties파일에 숨기고 싶은 값을 키 - 값 형식으로 작성해 준다.
<local.properties>
API_KEY = "12345678910"
## build.gradle.kts(app) 키 값 불러오기
앱 수준의 gradle에서 방금 위에서 키 - 값 형식으로 등록한 변수를 불러올 차례이다.
본 예제에서는 kts 파일로 Kotlin DSL을 사용한다.
### properties 선언 후 local.properties 파일 읽기
먼저 gradle에 Properties 타입의 변수 선언 후 local.properties 파일을 읽어와야 한다.
선언 위치는 최상단에 해도 상관없다!
// properties 선언 후 local.properties 파일을 읽어온다
val properties = Properties()
properties.load(project.rootProject.file("local.properties").inputStream())
### buildConfigField 함수를 이용해 local.properties 파일에서 키-값으로 선언한 값을 가져온다.
위에서 local.properties 파일을 읽어왔다면 이제 local.properties 파일 안에 있는 값을 불러올 차례이다.
android {
namespace = "com.sub.buildtest"
compileSdk = 34
defaultConfig {
applicationId = "com.sub.buildtest"
minSdk = 24
targetSdk = 34
versionCode = 1
versionName = "1.0"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {
useSupportLibrary = true
}
// buildConfigField를 사용해 값 가져오기
buildConfigField("String", "API_KEY", properties["API_KEY"].toString())
}
}
위처럼 buildConfigField에서 저장한 API 키와 이어주고, 그래 들을 빌드해 주면 BuildConfig에 저장되어 프로젝트 내에서 언제든 사용할 수 있게 된다.
buildConfigField함수의 속성은 buildConfigField("타입", "키", "값" )으로 사용한다.
잘 저장되어 있는 확인하고 싶으면 싱크 후 빌드한다. 그다음 BuildConfig 검색하면 아래 코드처럼 java로 된 파일이 보일 것이다. 거기서 설정해 준 값이 잘 나오면 90%는 성공이다! (왜 90% 인지는 아래에서 설명..)
public final class BuildConfig {
public static final boolean DEBUG = Boolean.parseBoolean("true");
public static final String APPLICATION_ID = "com.sub.buildtest";
public static final String BUILD_TYPE = "debug";
public static final int VERSION_CODE = 1;
public static final String VERSION_NAME = "1.0";
// 설정 해준 API_KEY 값이 보인다
public static final String API_KEY = "12345678910";
}
## 사용하고자 하는 곳에서 BuildConfig로 가져오기
이제 설정은 다 했고 해당 값이 필요한 곳에서 가져와 사용하기만 하면 된다.
이번예제는 간단하게 MainActivity에서 해당 키 값을 Text로 보여주는 예제이다.
값을 가져오기 위해 "BuildConfig. 설정한 키" 이름 으로 값을 가져온다.
예를 들어 위에 같은 경우 buildConfigField("String", "API_KEY", properties ["API_KEY"]. toString())에서 두 번째 속성인 API_KEY로 지정해줬기 때문에 BuildConfig.API_KEY로 접근하면 된다!
BuildConfig.API_KEY
❗️잠깐 혹시 BuildConfig를 못 찾는 오류가 난다고요?? (Unresolved reference: BuildConfig)
그 이유는 AGP(Android gradle plugin) 8.0부터 buildconfig는 기본적으로 비활성화하도록 바뀌었기 때문이다.
해결을 위해 build.gradle.kts(:app)에 아래와 같이 buildFeatures = true를 해줘야 한다.
android { ... buildFeatures { compose = true // buildConfig를 활성화 해준다 buildConfig = true } ... }
바로 이 부분이 아까 90%만 완료됐다고 한 이유이다. 이제 진짜 100% 설정 끝이다!
<MainActivity>
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
BuildtestTheme {
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background
) {
Text(
text = "API KEY : ${BuildConfig.API_KEY}"
)
}
}
}
}
}