簽署 APK 而不暴露金鑰庫密碼
你可以使用以下屬性定義簽名配置以在 build.gradle
檔案中對 apk 進行簽名:
storeFile
:金鑰庫檔案storePassword
:金鑰庫密碼keyAlias
:一個關鍵的別名keyPassword
:金鑰別名密碼
在許多情況下,你可能需要避免在 build.gradle
檔案中使用此類資訊。
方法 A:使用 keystore.properties 檔案配置釋出簽名
你可以配置應用程式的 build.gradle
,以便從 keystore.properties
等屬性檔案中讀取簽名配置資訊。
像這樣設定簽名是有益的,因為:
- 你的簽名配置資訊與你的
build.gradle
檔案是分開的 - 你無需在簽名過程中進行干預,以便為金鑰庫檔案提供密碼
- 你可以輕鬆地從版本控制中排除
keystore.properties
檔案
首先,在專案的根目錄中建立一個名為 keystore.properties
的檔案,其內容如下(用你自己的值替換值):
storeFile=keystore.jks
storePassword=storePassword
keyAlias=keyAlias
keyPassword=keyPassword
現在,在你的應用程式的 build.gradle
檔案中,設定 signingConfigs
塊,如下所示:
android {
...
signingConfigs {
release {
def propsFile = rootProject.file('keystore.properties')
if (propsFile.exists()) {
def props = new Properties()
props.load(new FileInputStream(propsFile))
storeFile = file(props['storeFile'])
storePassword = props['storePassword']
keyAlias = props['keyAlias']
keyPassword = props['keyPassword']
}
}
}
}
這就是它的全部內容,但不要忘記從版本控制中排除金鑰庫檔案和 keystore.properties
檔案。
有幾點需要注意:
keystore.properties
檔案中指定的storeFile
路徑應該相對於應用的build.gradle
檔案。此示例假定金鑰庫檔案與應用程式的build.gradle
檔案位於同一目錄中。- 此示例在專案的根目錄中包含
keystore.properties
檔案。如果將其放在其他位置,請務必將rootProject.file('keystore.properties')
中的值更改為相對於專案根目錄的屬性。
方法 B:使用環境變數
沒有屬性檔案也可以實現同樣的目的,使密碼更難找到:
android {
signingConfigs {
release {
storeFile file('/your/keystore/location/key')
keyAlias 'your_alias'
String ps = System.getenv("ps")
if (ps == null) {
throw new GradleException('missing ps env variable')
}
keyPassword ps
storePassword ps
}
}
ps
環境變數可以是全域性的,但更安全的方法可以是將其新增到 Android Studio 的 shell 中。
在 linux 中,這可以通過編輯 Android Studio 的 Desktop Entry
來完成
Exec=sh -c "export ps=myPassword123 ; /path/to/studio.sh"
你可以在此主題中找到更多詳細資訊。