該博客是對gradle整理匯總這篇文章的補充
1、一般寫法
通常簽名的配置方法為:
android {
signingConfigs {
config_release {
keyAlias 'releaseKey'
keyPassword '123456'
storePassword '123456'
storeFile file('key/releaseKey.jks')
}
}
}
2、改良寫法:
把簽名信息(主要是密碼)寫在gradle中是不安全的,我們可以把這些簽名信息添加到gradle.properties:
RELEASE_KEY_PASSWORD = 123456
RELEASE_KEY_ALIAS = releaseKey
RELEASE_STORE_PASSWORD = 123456
RELEASE_STORE_FILE = key/releaseKey.jks
然后在build.gradle中引用即可:
android {
signingConfigs {
config_release {
storeFile file(RELEASE_STORE_FILE)
keyAlias RELEASE_KEY_ALIAS
storePassword RELEASE_KEY_PASSWORD
keyPassword RELEASE_STORE_PASSWORD
}
}
}
我們也可以將簽名信息添加到local.properties中,然后在build.gradle中讀取.
3、更安全寫法:
簽名密碼的私密性是最關(guān)鍵的,所以我們要是能把它改成每次打包時手動輸入密碼才是最安全的:
android {
signingConfigs {
config_release {
storeFile file(RELEASE_STORE_FILE)
keyAlias RELEASE_KEY_ALIAS
storePassword System.console().readLine("\\\\nKeystore password:")
keyPassword System.console().readLine("\\\\nKey password:")
}
}
}
這樣在執(zhí)行 打包命令時,就會被要求輸入密碼.
4、遇到的問題及解決
問題描述:
設(shè)置apk簽名時從console中讀取keyAlias以及密碼,使用”system.console().readLine”方法,在編譯時總是出現(xiàn)問題:

使用命令行編譯的時候沒有問題,但是當(dāng)使用Android studio命令編譯的時候,會報這個錯.
解決方法:
步驟1:去除優(yōu)化gradle設(shè)置的./gradle/gradle.properties中設(shè)置damon為true的這行語句:
org.gradle.daemon=true
步驟2:加上判斷console是否為空的語句:
if (System.console() != null)
這之后再從命令行執(zhí)行,讀取手動輸入的密碼.
#5、最終腳本
最終,gradle腳本中的相關(guān)部分長這樣:
android {
signingConfigs {
config_release {
storeFile file(RELEASE_STORE_FILE)
keyAlias RELEASE_KEY_ALIAS
def sPassword = null
def kPassword = null
if (System.console() != null)
sPassword = System.console().readLine("\\\\nEnter store password ")
if (System.console() != null)
kPassword = System.console().readLine("\\\\nEnter key password ")
keyPassword kPassword
storePassword sPassword
}
}
}
ps:此種用法在命令行中執(zhí)行沒問題,但是用gradle自帶命令執(zhí)行報錯,提示找不到keyPassword,這也是我之前推薦大家使用命令行編譯、打包的原因!
至此,文章結(jié)束,希望此文能幫助到你,如果對此文有不同見解,歡迎直接評論!
參考文案:
Android 使用Android Studio + Gradle 或 命令行 進行apk簽名打包
Android Studio 在Gradle中隱藏Keystore密碼