撰文時使用 MAC + Android Studio 2.2RC
不管是使用 Google Map Android API(好吧,所有 Goolge APIs 其實都要) 還是要發布 App 到 Google Play,你都會需要一組屬於你自己或公司/組織專用的 Keystore 作為身份識別。
什麼?你說你不上架也不用 Google Services,就是很想要、非常想要一組 Keystore 可不可以?當然可以啊。
本文將會簡述如何使用 Android Studio
及 CLI
介面產生 KeyStore
,以及如何將它與專案分開存放與管理。
如何產生 Keystore
Keystore 是由 Java keytool 工具所產生的一種憑證,詳情可以看看維基百科的介紹。它作為開發者身份的驗證機制,被 Goolge 普遍用在其提供的 API 服務中,也包含在發布製作好的 App 到 Play 市集的過程中。
另外其實不只發布 App 時會用到,在開發過程中其實也會用到 debug 專用的 Keystore 來簽署 *.apk,可以參考這則 StackOverflow 的問答:Android Studio — debug keystore。
* 注意!
要是成功上架/發布某個 App 之後,卻不小心忘了你用上架/發布 Keystore 的密碼、或是搞丟了,那你就再也不能更新已經上架的那隻 App 了。所有累積的下載量/曝光率等等的都會隨著打不開。所以請慎選密碼/存放位置,尊重生命,不要隨便搞自己。
* 使用 Android Studio 產生 Keystore
還在使用 Eclipse
或其他 IDE 的同學請直接跳下個章節,以 CLI
產生 Keystore。
Android Studio
作為 Android 生態圈代表性的 IDE,到目前為止已經整合了不少功能,無腦產生 Keystore 就是其中之一。請按照以下步驟執行,即可獲得龍珠 ... Keystore 一組:
1 . 點選 Build -> Generae Signed APK
2 . 在接下來跳出的視窗中選取
Create new...
。
3 . 輸入每個欄位所需的資料。
簡介一下每個欄位:
- path — 你心心念念的 Keystore 要存在哪裡?
- Password — 你的 Keystore 的主要加密密碼。
Key
- Alias — 填個你覺得爽的名字吧!
- Password — 這裡的密碼可以跟上面的 Password 一樣;但無論是否相同,請妥善保存密碼,尊重生命。
- Validity — 有人說這邊可以越大越好,例如 10000。不過基本上指的就是這組憑證哪時候到期,如果沒有特殊需求保留預設值奇可。
- Certificate
- 以下欄位作為識別資料之用,選填。
4 . 接下來選擇下一步即可
到這邊你的 Keystore 就完成了。
* 使用 CLI 產生 Keystore
複製貼上即可,同時在互動式提示下完成資料輸入。
請分別注意 ${path}
/${my_key_name}
/${alias_name}
等參數。
$ keytool -genkey -v -keystore ${path}/${my_key_name}.keystore -alias ${alias_name} -keyalg RSA -keysize 2048 -validity 10000
完成後即可在路徑 ${path} 裡找到叫做 ${my_key_name}.keystore 的 Keystore 檔案。
設定 Gradle 將 Keystore 獨立出專案之外
本步驟可以省掉兩個問題:
- 簽章時手動指定 Keystore
- 多人或 git 版控時可以避免誤傳 Keystore
* 建立 keystore.properties
本步驟需要在專案根目錄下建立一個 .properties 檔案,同時將此檔案加入 .gitignore 中。
檔名其實可以隨意,但為求統一,請命名為 keystore.properties
。內容如下,請注意相關變數:
KEYSTORE_FILE=${path}/${my_key_name}
KEYSTORE_PASSWORD=${KEYSTORE_PASSWORD}
KEYSTORE_ALIAS=${ALIAS_NAME}
KEYSTORE_ALIAS_PASSWORD=${ALIAS_PASSWORD}
* 修改 build.gradle
本步驟需要修改專案下的 build.gradle
檔案,通常是路徑會是 ${PROJECT_NAME}/app/build.gradle
。在最底下加入以下程式碼:
以上程式碼會在 android.signingConfigs
節點下新增一組存有 Keystore 所在位置、密碼等資訊並叫做 sign
的節點。
所以,要在針對 build.gradle 簽章的部分做相應修改,如下:
signingConfigs {
sign // 清空只留下 `sign`
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.sign // 指定signingConfig
}
}
由此可見這裡只針對 release
做設定而已,如果 debug
也有需要請比照辦理即可。
完整範例可以參考 Mosil 的 repo。