前陣子開始整理一些 side projects 時,發現了一個問題。
這些 projects 多少都用了一些 API 服務,所以存有 API keys,但又不想把這些暴露在 Git。
之前的做法是把 keys 存在其他地方,要 build 的時候再手動複製貼上。但缺點是太麻煩,而且也有可能不小心忘記改回來就把 keys push 上 Git。
在其他的 projects 裡,如:Django,我會把這些 keys 設定成 environment variables。這樣他們就不會跟著 code 進到 Git,而且也可以根據環境做不同的設定。
在 Android 上我們也可以這樣做,Gradle 有提供類似的機制。
- 大致步驟如下:把 keys 寫在 ~/.gradle/gradle.properties 裡。因為這個設定是 global,所以建議在 key 名稱前面加上專案名字。
PROJECT_API_KEY=“1234567890”
- 從 module-level build.gradle 裡匯入。
如果想從 Java 存取,就寫 buildConfigField。
如果想從 XML 存取,就寫 resValue。
buildTypes {
debug {
buildConfigField 'String', “ApiKey", PROJECT_API_KEY
resValue 'string', "api_key", PROJECT_API_KEY
}
release {
buildConfigField 'String', "ApiKey", PROJECT_API_KEY
resValue 'string', "api_key", PROJECT_API_KEY
}
}
- 然後就可以直接引用:
In Java
String apiKey = BuildConfig.ApiKey;
In XML
@string/api_key