NOW OR NEVER

[Android] properties 값을 Manifest 및 다른 파일에서 사용하기 본문

Android

[Android] properties 값을 Manifest 및 다른 파일에서 사용하기

LAURA 2023. 9. 13. 23:18
반응형

개요

  • 하는 이유 : 카카오 지도 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
    }

}

 

참고 링크

Comments