logo

English

이곳의 프로그래밍관련 정보와 소스는 마음대로 활용하셔도 좋습니다. 다만 쓰시기 전에 통보 정도는 해주시는 것이 예의 일것 같습니다. 질문이나 오류 수정은 siseong@gmail.com 으로 주세요. 감사합니다.

안드로이드 개발시 API Key, 암호화 정보 코드에서 숨기는 방법, Kotlin DSL의 경우

by lizard2019 posted Jun 20, 2023
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print

안드로이드 개발 시에 API Key와 암호화 정보등을 코드에 기술해서 git으로 공유하게되면 문제가 발생할 수 있습니다.

그래서 보통은 local.properties를 사용해서 로컬에 저장해두고 git에 업로드 시에 ignore하는 방식으로 소스 코드를 Repo에 올리면 유출을 방지할 수 있습니다.

 

그리고 BuildConfig라는 것을 사용해서 빌드 할때 코드에 자동 생성되어 반영해주어야만 제대로 적용이 가능합니다.

실제로 프로젝트를 빌드해보면 BuildConfig.java 파일이 자동 생성되어 적용되는 것을 확인 할 수있습니다.

 

먼저 프로젝트 Root 폴더에 다음과 같이 loacal.properties 파일을 작성해서 API Key 정보를 저장합니다.

 

# API Key 예제
 API_KEY = "39093840093855323"

여기서 반드시 ""를 사용해서 정의해 주어야 합니다.

숫자를 표현하는 방식이 있는데 보통 String을 사용하기 때문에 생략하겠습니다.

이제 BuildConfig.java에 자동으로 반영되게 하기 위해서는 다음과 같이 Build.Gridle.kts 파일에 입력합니다.

    import java.util.Properties
    import java.io.FileInputStream
    // 위의 라이브러리를 포함해 주세요.

      ....

android {
    compileSdk = 32

      ....

   // 아래와 같이 local.Properties를 지정해주고 로딩합니다.
    val properties = Properties().apply {
        load(FileInputStream(File(rootProject.rootDir, "local.properties")))
    }
    // Key 정보가 없을 경우 ""를 입력해주도록하면 빌드 에러를 방지할 수 있다.
    val apiKey = properties["API_KEY"] ?: "\"\""
    defaultConfig {
        buildConfigField("String", "API_KEY", "$apiKey")
    }
   ....

이제 클린하고 다시 빌드해보면 BuildConfig.Java에 다음과 같이 변수가 정의된 것을 확인할 수 있습니다.

// BuildConfig.java의 내용
public final class BuildConfig {
  // Field from default config.
  public static final String API_KEY = "39093840093855323";
}

이제 코들린 코드에서 아래와 같이 사용하면 됩니다.

   val apiKey = BuildConfig.API_KEY

이제 git 명령어로 local.properties 파일을 .gitignore파일에 포함 시키면 됩니다.


List of Articles
No. Subject Author Date Views
» 안드로이드 개발시 API Key, 암호화 정보 코드에서 숨기는 방법, Kotlin DSL의 경우 lizard2019 2023.06.20 293
21 구글에서 제공하는 안드로이드 개발 기초 학습코스 file digipine 2022.03.18 498
20 Toolchain Error 'No such file or directory' 해결방법 lizard2019 2019.12.19 1439
19 Ubuntu 16.0.4 openjdk 7 설치방법 lizard2019 2019.12.19 893
18 Ubuntu 리눅스 fastboot 설치 lizard2019 2019.12.13 1588
17 atomic vs volatile vs synchronized file 엉뚱도마뱀 2017.12.18 1252
16 Atomic Operation에 대해서 엉뚱도마뱀 2017.12.18 1296
15 Android 하드웨어 코덱 포팅하기, OpenCore, OpenMAX digipine 2017.11.03 1715
14 Ubuntu 기본 쉘 dash 대신 bash로 설정 digipine 2017.11.02 761
13 [안드로이드] 가속도 (Accelerometer)센서 Shake 이벤트 예제 digipine 2017.11.02 1712
12 Android - 블루투스 BLE 개발하기 digipine 2017.11.02 16760
11 안드로이드 Native C 코드에서 Intent 보내는 방법 digipine 2017.11.02 1389
10 안드로이드 시스템 개발시 mmm 커멘드 사용법 digipine 2017.11.01 1270
9 Android - 이미지(비트맵) 리사이징 digipine 2017.11.01 1409
8 [Java] SortedSet과 Comparable을 이용한 정렬(Sort) digipine 2017.10.29 846
7 Android - AlarmManager를 이용해서 서비스 실행 시키는 코드 digipine 2017.10.29 533
6 Android - 슬립모드 (Sleep Mode) 방지 코드 digipine 2017.10.29 2501
5 Android - Browser 에서 Activity 실행하기 file digipine 2017.10.29 807
4 안드로이드 파일 입출력시 한글 깨짐 문제 digipine 2017.10.29 1749
3 Android 기반 Application Ant 빌드 방법 digipine 2017.10.29 640
Board Pagination Prev 1 2 Next
/ 2