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
2 구글에서 제공하는 안드로이드 개발 기초 학습코스 file digipine 2022.03.18 500
» 안드로이드 개발시 API Key, 암호화 정보 코드에서 숨기는 방법, Kotlin DSL의 경우 lizard2019 2023.06.20 297
Board Pagination Prev 1 2 Next
/ 2