Android

Android - GitHub에 API Key, Hash 값 숨기기

팡세영 2023. 1. 5. 07:22

1. gitignore 파일 수정

자신의 github 레포지토리에 들어가 Android Studio 프로젝트의 gitignore 파일을 수정해주어야 합니다.

API 키를 local.properties 안에다가  저장 시킬것 이므로 위와 같이 gitignore에  local.properties를 추가해줍니다.

또한 /build 경로에는 BuildConfig가 존재하고 이 안에 API키를 변수로 저장하기 때문에 /build 또한 gitignore에 추가해 줍니다.

 


2. local.properties

인제 안드로이드 스튜디오에서 local.properties 파일을 아래와 같이 수정해줍니다.

 

sdk 경로 아래에 자신이 숨기고 싶은 중요한 키 값, 해쉬 값등 데이터를 선언해줍니다.

 


2. build.gradle (:app)

앱 수준의 buidl.gradle에 들어가 local.properties에 선언한 값들을 아래와 같이 불러와 주어야 합니다.

plugins {
    id 'com.android.application'
}

// local.properties에서 선언한 값들을 불러와 주기 위함

Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())

repositories {
    . . . .
}

android {
    compileSdk 32

    defaultConfig {
        
        . . .
        
        buildConfigField "String", "KAKAO_KEY", properties['KaKao_key'] 
        buildConfigField "String", "TRAVEL_API_KEY", properties['travel_api_key']
        
        // 프로젝트 내에서 언제든지 사용이 가능한 변수들이다.
        // 타입 - 키 - 값으로 저장된다.
        
        manifestPlaceholders = [KAKAO_KEY: KaKao_key]
        // 매니페스트에서 사용이 가능하다. 구글맵 같은 경우가 이에 해당한다.
        // 키 - 값으로 저장된다.
    }

 

위와 같이 설정하고 Sync Project (코끼리)를 눌러준 후 상단의 Build 탭에서 Rebuild Project를 눌러주면 

아래와 같이 BuildConfig파일이 수정됩니다. 

AndroidStudio에서 BuildConfig 파일을 찾기 힘드시면 shift 두번 누른 후 BuildConfig.java를 검색해주시면 됩니다.

 

/**
 * Automatically generated file. DO NOT MODIFY
 */
package org.techtown.osshango;

public final class BuildConfig {
  public static final boolean DEBUG = Boolean.parseBoolean("true");
  public static final String APPLICATION_ID = "org.techtown.osshango";
  public static final String BUILD_TYPE = "debug";
  public static final int VERSION_CODE = 1;
  public static final String VERSION_NAME = "1.0";
  // Field from default config.
  public static final String TRAVEL_API_KEY = "nzMrZ ..." ;
  public static final String KAKAO_KEY = "skAzs ..." ;
}

3. 사용

매니페스트에서 사용시

    <activity
            android:name="com.kakao.sdk.auth.AuthCodeHandlerActivity"
            android:exported="true" >
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />

                <data
                    android:host="oauth"
                    android:scheme="${KaKao_Key}" />
            </intent-filter>
        </activity>

 

자바 코드에서 사용시

public class MainActivity extends AppCompatActivity {

	String KAKAO_KEY = BuildConfig.KaKao_key; // API KEY
	String TRAVEL_KEY = BuildConfig.TRAVEL_API_KEY;
 

}

 

이런식으로 중요한 값들을 숨기고 협업시 local.properties의 내용만 잘 전달해주면 됩니다.