반응형
Notice
Recent Posts
Recent Comments
Link
NOW OR NEVER
[Android] properties 값을 Manifest 및 다른 파일에서 사용하기 본문
반응형
개요
- 하는 이유 : 카카오 지도 API Key를 숨기기 위해
- 목표 : local.properties의 값을 manifest에 할당하기 및 BuildConfig 파일에 저장하기
방법
- 0. local.properties에 사용하고자 하는 값 저장하기
- manifestPlaceholder를 통해 manifest에서 사용 할 API Key라면 !!!절대!!! 따옴표 붙여서 작성하지 마세요 : 따옴표로 넣어서 저장하면 api와 통신할때 따옴표도 같이 들어가기 때문에 Autentication 오류가 납니다.
- 1. 앱 수준 build.gradle 파일에서 local.properties 파일을 Properties 객체로 만들어 값 가져오는 코드 작성
// local.properties 파일을 Properties 객체로 만들어주기
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
- 2. BuildConfig 파일의 변수로 저장 및 Manifest에서 변수로도 사용할 수 있게하기
- 이유
- 구글링 했을 때 원래 BuildConfig에 변수로 저장하면 바로 가져올 수 있다 했는 데 가져와지지가 않아서 눈물을 머금고 manifestPlaceHolder로 저장하기로,,,
- 그럼에도 BuildConfig에도 저장을 해주는 이유는 카카오 지도 api가 아닌 다른 카카오 sdk api는 manifest가 아닌 retrofit으로 검색해야 하는 게 있기에 header에 api 키를 넣어줘야 한다 이때 BuildConfig의 변수를 활용해서 가져올 것이기 때문이다.
- 앱 수준 build.gradle 파일에서 defaultConfig 블럭 안에 아래 코드 작성
- 이유
defaultConfig {
buildConfigField "자료형", "BuildConfig 변수명", 값
manifestPlaceholders[저장할변수명] = 값
}
- 3. BuildConfig 파일 사용 활성화
- 아무리 buildConfigField로 지정해줘도 BuildConfig 파일이 안만들어지길래 왜 그런가 하고 구글링해봤더니 내 AGP 파일 버전이 8.0이상인데 AGP 8.0이상부터는 BuildConfig를 권장하지 않아 자동으로 비활성화처리된다고 한다. 그래서 이거를 활성화 하는 코드를 작성해줘야 한다.
- 앱 수준 build.gradle 파일에서 아래 코드 작성
buildFeatures {
buildConfig = true
}
- 4. AndroidManifest파일에서 manifestPlaceHoler 사용
<meta-data
android:name="com.kakao.vectormap.APP_KEY"
android:value="${KAKAO_API_KEY}" />
- 5. BuildConfig 변수 사용
- 쓰고자 하는 곳에서 BuildConfig.변수이름 으로 불러와서 쓰면 된다.
앱 수준 build.gradle 전체 코드
plugins {
...
}
// local.properties 파일을 Properties 객체로 만들어주기
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
android {
...
defaultConfig {
...
buildConfigField "String", "KAKAO_API_KEY", "\"${properties['kakao.key']}\""
manifestPlaceholders["KAKAO_API_KEY"] = properties['kakao.key']
}
buildFeatures {
buildConfig = true
}
}
참고 링크
- https://daryeou.tistory.com/324https://velog.io/@paulus0617/manifestPlaceholders
- https://velog.io/@paulus0617/manifestPlaceholders
- https://stackoverflow.com/questions/37368124/gradle-manifest-requires-a-placeholder-substitution-error-but-manifestplacehol
- https://developer.android.com/studio/build/gradle-tips?hl=ko
'Android' 카테고리의 다른 글
[Android] 안드로이드 공식 문서 정리 - Activity 개념 (0) | 2023.11.18 |
---|---|
[Android] Hilt (0) | 2023.10.14 |
[Android] TimePicker Interval 설정 (0) | 2023.09.12 |
[Android] 프로젝트 변경 이력 보는 법(뒤로가기가 더이상 안될 때) (0) | 2023.09.02 |
[Android] JUnit4 (0) | 2023.09.02 |
Comments