728x90

Git으로 노출하지 않을 경로를 지정하기 위해 gitignore 에 경로를 지정하면, 해당 경로는 더 이상 Git이 변경사항을 관찰하지 않는다.

1. gitignore

가장 먼저 Git으로의 노출을 막아야 할 것은 local.properties 이다. 여기에 API 키를 저장시킨다.

/build 경로를 같이 확인해준다. 해당 경로에는 BuildConfig 가 존재하는데,  여기에서 API 키를 변수로 저장 하게 될 것이다. 역시 버전 컨트롤을 할 때 절대 포함 시켜서는 안된다.

.gitignore 에서 local.properties 확인

2. local.properties

Gradle Scripts local.properties 로 들어가 API 키나 기타 중요한 데이터들을 저장한다.

이 때 주의할 점은 꼭 큰 따옴표(" ") 로 변수를 저장하고, 띄어쓰기는 하지 않는다.

local.properties

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 이런 방식으로 사용해주면 된다. 

Log 확인

 

+ Recent posts