API Key 값 (client_id, client_secret)에 대해서 코드 베이스로 넣게 된다면 프로젝트 공유 시 해당 파일이 포함되어 있으면 문제가 될 것이다.
해당 요소의 문제를 없애기 위해서 다음과 같이 설정해서 사용한다.
1. local.properties 파일에 Key/Value 정리
NAVER_CLIENT_ID=""
NAVER_CLIENT_SECRET=""
2. build-logic 모듈의 DataAndroid 파일에 android gradle configure 설정
https://github.com/woohyun-jeong/AndroidSampleApp/blob/datastore_test1/build-logic/src/main/kotlin/com/example/sampleapp/DataAndroid.kt
import com.android.build.gradle.internal.cxx.configure.gradleLocalProperties
import org.gradle.api.Project
/**
* https://github.com/android/nowinandroid/blob/main/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt
*/
internal fun Project.configureDataAndroid() {
androidExtension.apply {
buildFeatures {
buildConfig = true
}
defaultConfig {
buildConfigField("String", "NAVER_CLIENT_ID", getApiKey("NAVER_CLIENT_ID"))
buildConfigField("String", "NAVER_CLIENT_SECRET", getApiKey("NAVER_CLIENT_SECRET"))
}
}
}
fun Project.getApiKey(propertyKey: String): String {
return gradleLocalProperties(rootDir).getProperty(propertyKey)
}
3. 커스텀하여 작성된 gradle.kts 파일에 적용할 내용 나열
example.android.library.gradle.kts 파일로 작성해보았습니다.
https://github.com/woohyun-jeong/AndroidSampleApp/blob/datastore_test1/build-logic/src/main/kotlin/example.android.library.gradle.kts
plugins {
id("com.android.library")
id("example.verify.detekt")
}
configureKotlinAndroid()
configureKotest()
configureCoroutineAndroid()
configureHiltAndroid()
configureDataAndroid()
configurePagingAndroid()
configureCoilAndroid()
4. 사용하는 모듈에서 적용된 플러그인을 gradle.kts 설정으로 가져옵니다.
import com.android.build.gradle.internal.cxx.configure.gradleLocalProperties
해당 내용을 꼭 import 해야 코틀린 코드로 가져올 수 있습니다.
https://github.com/woohyun-jeong/AndroidSampleApp/blob/datastore_test1/core/data/build.gradle.kts
import com.android.build.gradle.internal.cxx.configure.gradleLocalProperties
plugins {
id("example.android.library")
id("example.android.hilt")
id("kotlinx-serialization")
}
android {
namespace = "com.example.sampleapp.core.data"
}
dependencies {
implementation(projects.core.model)
implementation(projects.core.datastore)
implementation(libs.retrofit.core)
implementation(libs.retrofit.kotlin.serialization)
implementation(libs.okhttp.logging)
implementation(libs.kotlinx.serialization.json)
implementation(libs.kotlinx.datetime)
testImplementation(libs.turbine)
testImplementation(libs.junit4)
testImplementation(libs.kotlin.test)
}
5. 해당 모듈의 코드내에서 설정된 KEY 값을 통해 사용할 수 있습니다.
https://github.com/woohyun-jeong/AndroidSampleApp/blob/datastore_test1/core/data/src/main/java/com/example/sampleapp/core/data/api/interceptor/NaverAuthInterceptor.kt
class NaverAuthInterceptor : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
val req = chain.request()
val builder = req.newBuilder().apply {
addHeader("X-Naver-Client-Id", BuildConfig.NAVER_CLIENT_ID)
addHeader("X-Naver-Client-Secret", BuildConfig.NAVER_CLIENT_SECRET)
}
return chain.proceed(builder.build())
}
}
'Android > Module' 카테고리의 다른 글
[Android Multi module] DataStore protobuf 암호화/복호화 적용 (1) | 2024.09.13 |
---|---|
[Android Multi module] DataStore protobuf 적용 테스트 (0) | 2024.09.13 |
[Android Multi module] DataStore protobuf 라이브러리 추가 방법 (0) | 2024.09.13 |
[Android Multi module] feature module 생성 방법 (0) | 2024.09.13 |
[Android build-logic] 모듈화 kts 구성 (0) | 2024.09.13 |