[Android] API 키 안전하게 숨기기 (local.properties + BuildConfig)

2024. 3. 13. 16:00·Android/Security & Privacy
반응형

프로젝트 관리를 위해 Git과 같은 형상관리 툴을 사용할 경우 API 키 값과 같은 중요 정보들이 노출될 수 있음을 고려해야 한다. 안드로이드에서 일반적으로 local.properties를 gitignore에 등록하여 외부 노출을 막는다. 이 점을 이용하여 local.properties에 중요 값을 저장하고, 앱의 빌드 정보에 키 값을 추가하여 BuildConfig로 코드 상에서 접근할 수 있다.


◾ local.properties 임시 값 설정

/**
 * local.properties
 */
API_KEY_1 = "89sdfsbsn815832jdsfkjedv"
API_KEY_2 = "04kjcasvbcxzv632jbvzj35f"
API_KEY_3 = "cbfhb518gfa0h52ngf=4ynb3"

예시를 위한 임시 키 값을 만든다.


◾ BuildConfig 클래스 생성

/**
 * build.gradle
 */
android {
    ...
    
    buildFeatures {
        buildConfig = true
    }
}

bulidFeatures 블록에서 buildConfig를 true로 설정하면 안드로이드 빌드 시스템이 BuildConfig 클래스를 생성한다.


◾ local.properties 값 BuildConfig에 추가하기

/**
 * build.gradle
 */
import com.android.build.gradle.internal.cxx.configure.gradleLocalProperties

android {
    ...
    
    defaultConfig {
    	...
        
        // 1
        buildConfigField(
            "String",
            "API_KEY_1",
            gradleLocalProperties(rootDir).getProperty("API_KEY_1") ?: ""
        )
		
        // 2
        fun key(pKey:String): String = gradleLocalProperties(rootDir).getProperty(pKey) ?: ""
        buildConfigField("String", "API_KEY_2", key("API_KEY_2"))
    }
}

buildConfigField를 사용하면 해당 값들이 BuildConfig 클래스에 추가된다. 함수를 만들어서 '2'처럼 사용할 수 있다.


◾ Manifiest에서 local.properties 값 사용하기

/**
 * build.gradle
 */
import com.android.build.gradle.internal.cxx.configure.gradleLocalProperties

android {
    ...
    
    defaultConfig {
    	...
       
        fun key(pKey:String): String = gradleLocalProperties(rootDir).getProperty(pKey) ?: ""
        manifestPlaceholders["API_KEY_3"] = key("API_KEY_3")
    }
}

/*
 * ActivityManifest
 */
<meta-data
    android:name="AppKey"
    android:value="${APP_KEY_3}"/>

manifestPlaceholders는 build.groadle에 정의한 값을 Manifest에 주입할 수 있게 해주는 기능이다.


println(BuildConfig.API_KEY_1)
println(BuildConfig.API_KEY_2)

코드 상에서 Key 값을 사용할 때 위 처럼 호출하면 된다.


 

전체 코드

 

Android_Study/BuildConfig Mange Key at master · OhGyong/Android_Study

안드로이드 개발 공부. Contribute to OhGyong/Android_Study development by creating an account on GitHub.

github.com

 

반응형

'Android > Security & Privacy' 카테고리의 다른 글

[Android] Cipher를 사용하여 암호화 복호화 해보기  (0) 2022.11.24
[Android] 권한(Permission) 처리하기  (0) 2022.11.07
'Android/Security & Privacy' 카테고리의 다른 글
  • [Android] Cipher를 사용하여 암호화 복호화 해보기
  • [Android] 권한(Permission) 처리하기
O_Gyong
O_Gyong
안드로이드 기술 정리
  • O_Gyong
    O_Gyong's TECH
    O_Gyong
    • 분류 전체보기 (80) N
      • Android (57) N
        • ADB (4)
        • Architecture (1)
        • Data (5)
        • Network & Connecting (4)
        • Security & Privacy (3)
        • UI (24)
        • 기타 (3) N
        • 이슈 처리 (13)
      • Android Studio (5)
      • Firebase (2)
      • Git (3)
      • 작업 일지 (13)
  • 최근 글

  • 인기 글

  • 태그

    webview
    ADB
    in-app update
    GIT
    github
    firebase
    loading
    flow
    Bluetooth
    Room
    issue
    hilt
    해상도
    CameraX
    Navigation
    Android Studio
    TabLayout
    kizitonwose
    compose
    Andoird
    BLE
    Kotlin
    CalendarView
    MQTT
    recyclerview
    Paging3
    paging
    SharedPreferences
    Android
    Pagination
  • 링크

    • GitHub
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • hELLO· Designed By정상우.v4.10.4
O_Gyong
[Android] API 키 안전하게 숨기기 (local.properties + BuildConfig)
상단으로

티스토리툴바