[Android] 如何避免 API keys 暴露在版本控制系統中

前陣子開始整理一些 side projects 時,發現了一個問題。

這些 projects 多少都用了一些 API 服務,所以存有 API keys,但又不想把這些暴露在 Git。

之前的做法是把 keys 存在其他地方,要 build 的時候再手動複製貼上。但缺點是太麻煩,而且也有可能不小心忘記改回來就把 keys push 上 Git。

在其他的 projects 裡,如:Django,我會把這些 keys 設定成 environment variables。這樣他們就不會跟著 code 進到 Git,而且也可以根據環境做不同的設定。

在 Android 上我們也可以這樣做,Gradle 有提供類似的機制。

  1. 大致步驟如下:把 keys 寫在 ~/.gradle/gradle.properties 裡。因為這個設定是 global,所以建議在 key 名稱前面加上專案名字。
PROJECT_API_KEY=“1234567890”
  1. 從 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
  }
}
  1. 然後就可以直接引用:

In Java

String apiKey = BuildConfig.ApiKey;

In XML

@string/api_key

發表留言

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料