
expo/env를 통한 환경변수를 설정할때는 .env에다 EXPO_PUBLIC을 앞에다 붙여야 인식을 할 수 있다.
expo prebuild를 한 상태에서 android native 파일에 환경변수를 넣어주기 위해서는 다음과 같은 작업을 수행해야한다.
react-native-kakao 라이브러리를 사용하기위해 native key를 android 네이티브 파일에 넣어주기 때문에 다음과 같은 작업을 실행했다.
// NOTE: env파일을 위한 설정
def kakaoKey
def dotenv = new Properties()
def envFile = file("${rootProject.projectDir}/../.env")
if(envFile.exists()){
envFile.withInputStream{stream -> dotenv.load(stream)}
kakaoKey = dotenv['EXPO_PUBLIC_KAKAO_NATIVE_KEY']
}else{
// NOTE: eas build 추후 배포를 위한 설정
kakaoKey = System.getenv("EXPO_PUBLIC_KAKAO_NATIVE_KEY")
}
루트 밖에 env를 통해 EXPO_PUBIC_KAKAO_NATIVE_KEY를 꺼내온다. 또한 eas 빌드 때를 생각해 SYstem.getenv 또한 추가한다.
defaultConfig {
applicationId 'com.kgs9843.zipbap'
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
versionName "1.0.0"
// NOTE: env파일을 위한 설정
// resValue는 strings.xml에 kakaoKey 삽입
// placeholders는 AndroidManifest.xml에 치환 가능
if (kakaoKey == null){
throw new GradleException("KAKAO_NATIVE_APP_KET not found in .env file")
}
manifestPlaceholders = [KAKAO_NATIVE_APP_KEY: kakaoKey]
resValue "string", "kakao_app_key", kakaoKey
}
defaultConfig에 다음과 같이 정의 해준다.
kakaokey가 null일때는 오류를 throw 해주고
manifestPlachlders에 kakaokey를 정의시켜 manifest에서 환경변수를 사용할 수 있게 해준다
resVale를 통해 string.xml에서의 환경변수를 사용가능하게 해준다.
What's the difference between buildConfigField, resValue and manifestPlaceholders?