학부생땐 생각도 없이 과제 기한에 맞춰 만드는거에 급급해서 Key든 String이든 하드코딩을 때려박던게 기억난다...
나중에 포트폴리오 정리한다며 올리고 나서 깃허브 로그에, 파일에 전부 Key가 남아있는걸 확인하고 다 지우고 다시 하고 했던 기억이 있다. 보안 이슈가 매우 크기 때문에 Key와 같은 중요한 것들을 숨기고 관리하는 방법은 인지하는 것이 좋다.
1. gitignore 체크하기
보통 Android Studio Project를 생성하면 다음과 같은 파일들이 프로젝트 폴더 내부에 생겨나게 된다.
여기서 첫번째로 주목할 것은 .gitignore다. 개발일을 희망하는 사람들이라면 사용하는 github에 자신의 프로젝트를 올릴 때 올리지 않을 파일, 폴더를 지정하는 txt 배열이다.
github에서는 자신의 레포지토리를 만들때 무엇을 올리는지에 따라 자주 사용하는 .gitignore 배열을 제공해준다. 기본적으로 제공해주는 배열은 다음과 같다.
*.iml
.gradle
/local.properties
/.idea/caches
/.idea/libraries
/.idea/modules.xml
/.idea/workspace.xml
/.idea/navEditor.xml
/.idea/assetWizardSettings.xml
.DS_Store
/build
/captures
.externalNativeBuild
.cxx
local.properties
우리는 해당 배열의 맨 아래, local.properties에서 Key를 관리할 것이므로 없다면 써넣어주어야한다.
2. local.properties 수정하기
본인 프로젝트의 Gradle Scripts를 보면 local.properties가 존재한다. 더블 클릭하여 들어가면 사진 3이 나온다.
sdk.dir 밑으로 자신이 원하는 변수명="Your API Key"를 써넣어준다. 여기서 정한 변수 명은 다음 단계에도 써야 하므로 잘 기억해두자. (띄어쓰는건 하지말자. authKey="yourKey" 이렇게 작성하기.)
3. build.gralde.kts (Module :app)
작성자는 kts를 사용하므로 2가지 방법이 존재한다.
- Properties 객체 생성 방법
- local.properties 내부에서 key값을 가져오는 함수를 구현하는 방법
두 방식의 차이는 잘 모르겠다. 사용법은 다음과 같다.
plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
}
// Properties 객체 생성 방식 사용시
val properties = Properties().apply { load(FileInputStream(rootProject.file("local.properties"))) }
android {
...
defaultConfig {
...
buildConfigField("String", "authKey", getAuthKey("authKey")) // 어느 방법을 사용하든지 똑같이 쓰이는 부분
manifestPlaceholders["authKey"] = "authKey" // 본인은 이 부분을 추가해줘야 오류가 발생하지 않았다.
}
...
// 본인은 이 부분을 추가해줘야 오류가 발생하지 않았다.
buildFeatures {
buildConfig = true
}
}
// local.properties 내부에서 Key값을 가져오는 함수 구현 방식
fun getAuthKey(propertyKey: String): String = gradleLocalProperties(rootDir).getProperty(propertyKey)
둘 중 하나만 골라서 작성하면 된다. val properties를 쓸지, fun getAuthKey를 쓸지.
물론 이 두개를 제외한 buildConfigField와 buildFeatures 부분은 무조건 써야한다.
++ 직접 추가하면서 확인한 사항인데, manifestPlaceholders["1번"] = "2번"
buildConfigField("String", "1번", getAuthKey("2번")) 과 연계되어 작성되어야하는 것 같다.
어떤 글에서는 플레이스홀더를 쓰고 어떤 글에선 안쓰던데 본인은 쓰지 않으니 오류가 발생했다.
4. BuildConfig에서 작성한 Key가 존재하는지 확인하기
3번 항목을 작성하고 Sync Now를 해서 오류가 발생하지 않았다면, 프로젝트를 Rebuild (메뉴 Build 탭 -> Rebuild Project) 해보자. 그럼 폴더 배열에 다음과 같은 항목이 생겨야 한다.
BuildConfig를 더블 클릭해보면 사진 5와 같이 앱 정보 및 본인이 추가한 Key가 뜨게 된다. 이 파일은 자동으로 생성된 파일로 임의로 수정하지 말라는 경고문이 적혀있다.
5. AndroidManifest에 Meta-data 추가하기
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.INTERNET"/>
<application
...
<meta-data android:name="해당하는 API에 따라.authKey" android:value="${authKey}"/>
...
</application>
</manifest>
프로젝트 폴더 최상단의 Manifest를 키고 안에 meta-data를 다음과 같이 작성하면 완료.
6. 실사용
다음과 같이 "BuildConfig.변수명" 으로 불러오게되면 잘 불러와지는 것을 확인 할 수 있다.
'개발 > AOS' 카테고리의 다른 글
날씨 앱 기록 02 (2) | 2023.10.13 |
---|---|
날씨 앱 기록 01 (1) | 2023.10.06 |
kapt에서 KSP로 이전 (0) | 2023.10.05 |
카카오 맵 API를 사용해 좌표평면상 두 점간의 거리를 구했던 이야기 (0) | 2023.03.21 |
안드로이드에 파이어베이스 추가시 SHA1, SHA-256값 얻는 방법 (0) | 2023.03.21 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!