Git으로 노출하지 않을 경로를 지정하기 위해 gitignore 에 경로를 지정하면, 해당 경로는 더 이상 Git이 변경사항을 관찰하지 않는다.
1. gitignore
가장 먼저 Git으로의 노출을 막아야 할 것은 local.properties 이다. 여기에 API 키를 저장시킨다.
/build 경로를 같이 확인해준다. 해당 경로에는 BuildConfig 가 존재하는데, 여기에서 API 키를 변수로 저장 하게 될 것이다. 역시 버전 컨트롤을 할 때 절대 포함 시켜서는 안된다.
2. local.properties
Gradle Scripts 의 local.properties 로 들어가 API 키나 기타 중요한 데이터들을 저장한다.
이 때 주의할 점은 꼭 큰 따옴표(" ") 로 변수를 저장하고, 띄어쓰기는 하지 않는다.
3. build.gradle (app)
앱 수준의 그래들 파일에서 local.properties 에 새로 등록한 키값을 불러올 차례다.
KTS에는 총 2가지 방식이 존재한다.
1. Properties 객체 생성 방법
2. local.properties 내부에서 key값을 가져오는 함수 구현
두 가지 중 한가지 아무거나 사용
plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
}
// 1. Properties 객체 생성 방식
val properties = Properties().apply {
load(FileInputStream(rootProject.file("local.properties")))
}
android {
namespace = "com.~"
compileSdk = 34
defaultConfig {
applicationId = "com.~"
minSdk = 26
targetSdk = 34
versionCode = 1
versionName = "1.0"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
// 프로젝트 내에서 언제든지 사용이 가능한 변수들이다.
// 타입 - 키 - 값으로 저장된다.
buildConfigField "String", "GOOGLE_API_KEY", properties['google_api_key']//방식1
buildConfigField("String", "KOPIS_API_KEY", getAuthKey("KOPIS_API_KEY"))//방식2
// 매니페스트에서 사용이 가능하다. 구글맵 같은 경우가 이에 해당한다.
// 키 - 값으로 저장된다.
manifestPlaceholders = [GOOGLE_API_KEY: google_api_key]
}
buildTypes {
release {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
}
buildFeatures {
viewBinding = true
//8.0.0부터는 buildConfig를 막았기 때문에 buildFeatures에 추가해줘야 한다.
buildConfig = true
}
}
//2. local.properties 내부에서 key값을 가져오는 함수 구현방식
fun getAuthKey(propertyKey: String): String =
gradleLocalProperties(rootDir).getProperty(propertyKey)
. . . (중략)
buildConfigField 에서 저장한 API 키와 이어주고, 그래들을 빌드해주면 BuildConfig 에 저장되어 프로젝트 내에서 언제든 사용할 수 있게 된다. (적용이 안되어있다면 Rebuild Project)
4. 사용
우선 매니페스트 영역에서 사용되는 key
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.AOB"
. . .
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="${GOOGLE_API_KEY}" />
. . .
</application>
구글 맵은 매니페스트에서 API 키를 선언해야 하는데, 저렇게 "${변수}" 명으로 선언해주면 된다.
private const val API_KEY = BuildConfig.KOPIS_API_KEY 이런 방식으로 사용해주면 된다.