android studio arctic fox | 2020.3.1 Patch 4
프로젝트 .env
파일 안에 있는 SECRET_KEY
와 APP_ID
를 Groovy 파일로 가져와서 변수로 저장한 후 안드로이드 소스 코드에서 사용하는 방법입니다.
build.gradle(:app)
에서 .env
파일을 불러온 다음 필요한 정보를 아래 Map 변수에 key-value 형식으로 저장합니다.
def mapValue = [:]
new File('/.env').getText('UTF-8').splitEachLine(/=/){
if (it[0] == "APP_ID" || it[0] == "SECRET_KEY"){
mapValue[it[0]] = it[1]
}
}
...
File('/.env')
: 루트 경로에 있는 .env
파일을 가져옵니다..getText('UTF-8')
: 'UTF-8' 형식으로 가져옵니다..splitEachLine(/=/)
: 한 줄씩 읽어오는데 .env
파일의 문자 형식이 APP_ID="1234567890"
으로 되어있기 때문에 '='에서 문자열을 쪼개달라는 명령어 입니다.📌 참고로 해당 변수가 잘 들어갔는지 확인하고 싶으면 println
을 사용하여 확인하면 됩니다. 아래 코드를 작성한 후 빌드를 하거나, 터미널을 켜고 프로젝트 파일 위치에서 ./gradlew clean
을 실행해보면 아래 결과가 잘 프린트되어 나오는 것을 볼 수 있습니다.
for (i in mapValue){
println i.key
println i.value
}
다음은 mapValue
변수에 담아둔 key-value를 source code에서 사용할 수 있도록 BuildConfig
에 변수로 저장하는 방법입니다.
설정 상태나 필요한 상황에 따라 다른 블럭안에서 변수에 담아도 되겠지만 지금은 android{}
안에 있는 defaultConfig{}
안에서 변수로 담아두도록 하겠습니다.
android {
compileSdk 31
defaultConfig {
applicationId "com.example.myapplication"
minSdk 28
targetSdk 31
...
// xml에 저장을 원하면 buildConfigField가 아닌 resValue를 사용하면 됨
for (i in mapValue){ buildConfigField "String", i.key, i.value }
}
.....
buildConfigField
에 담고, 빌드를 하면 아래와 같이 해당 패키지안에 있는 BuildConfig
소스 코드 안에 변수와 값이 생깁니다.for (i in mapValue){ resValue "string", i.key, i.value }
로 넣으면 됩니다. 빌드 후 아래 코드처럼 사용할 수 있습니다.<TextView
android:text="@string/APP_ID" />
📌 참고로 i.value는 ""가 있는 String 형식이므로 저렇게 써도 되지만, 변수를 사용하지 않고 문자열을 직접 작성할 경우 아래와 같이 써야 합니다.
buildConfigField "String", "APP_ID", '"1234567890"'
📌 만약 추가한 변수가 생성이 안되었다면, Build -> Clean Project 후 다시 빌드 해보시거나, File -> Invalid Caches / Restart.. 를 한 후에 다시 빌드 해보시기 바랍니다.
package com.example.myapplication;
public final class BuildConfig {
public static final boolean DEBUG = Boolean.parseBoolean("true");
public static final String APPLICATION_ID = "com.example.myapplication";
....
// Field from default config.
public static final String APP_ID = "1234567890";
// Field from default config.
public static final String SECRET_KEY = "1234567890";
}
그럼 위와 같이 BuildConfig
클래스 안에 변수가 들어가게 되고, 소스코드에서 호출하여 사용할 수 있습니다.
import com.example.myapplication.BuildConfig
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val appId = BuildConfig.APP_ID
val secretKey = BuildConfig.SECRET_KEY
}
}