프로그래밍/Android

ManifestPlaceholder : 매니페스트에서 빌드 변수 사용하기

Lou Park 2024. 10. 9. 10:57
<activity 
    android:name="com.kakao.sdk.auth.AuthCodeHandlerActivity"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />

        <!-- Redirect URI: "kakao${NATIVE_APP_KEY}://oauth" -->
        <data android:host="oauth"
                android:scheme="kakao${NATIVE_APP_KEY}" />
    </intent-filter>
</activity>

 

카카오 SDK 연동을 하다보면 AndroidManifest에 APP KEY를 요구하는데, 중요한 Api Key를 보관할때 properties 파일을 별도로 만들어두고 빌드시에 BuildConfig에 변수를 할당하여 사용하는 패턴이 일반적이다. 하지만 AndroidManifest에서 BuildConifg에 접근하는 방법은 없다. 이때 사용하는 것이 바로 ManifestPlaceholder다.

 

위 Manifest 내용은 카카오 SDK 예시인데, 저렇게 NATIVE_APP_KEY를 가져올 수 있도록 세팅해보자. 안드로이드 프로젝트를 만들면 기본적으로 생성되는 local.properties를 사용해보도록 하겠다. kakao.native_app_key 프로퍼티를 추가해준다.

...
kakao.native_app_key=YOUR_KAKAO_NATIVE_APP_KEY
...

 

Manifest Placeholder는 Manifest에서 불릴 이름과 실제 값이 Key-Value Pair를 이룬다.

 

Key는 NATIVE_APP_KEY로, local.properties에 선언한 값을 할당해주면 Manifest에서 ${NAVITE_APP_KEY}로 값을 사용할 수 있게된다.

 

val localProperties = Properties()
localProperties.load(FileInputStream(rootProject.file("local.properties")))

android {
    defaultConfig {
        manifestPlaceholders["NATIVE_APP_KEY"] = (localProperties["kakao.native_app_key"] as String).trim('"')
    }
    ...
}

 

 

Android Manifest 파일 관리 문서

https://developer.android.com/build/manage-manifests?hl=ko#kts