前言
為了方便開發(fā),大家習(xí)慣在gradle里直接配置簽名信息,就像下面這樣:
signingConfigs {
release {
storeFile file('../demo.jks')
storePassword "abc123456"
keyAlias "mydemo"
keyPassword "852JnK66"
}
}
buildTypes {
debug {
minifyEnabled false
}
release {
minifyEnabled true
signingConfig signingConfigs.release
}
}
但這樣有兩點不好罐监,一是容易暴露媒惕,給人一眼就瞥見了。二是沒辦法進行角色級別的權(quán)限掌控徘郭,比如希望某些開發(fā)人員不要接觸簽名信息靠益,平時只能用debug打包。
對此残揉,個人總結(jié)了兩種隱藏簽名信息的方法胧后,在此簡單列舉一下。
方法一:讀取電腦本地的環(huán)境變量
環(huán)境變量應(yīng)該都知道抱环,就像配置Java環(huán)境變量一樣壳快,在我的電腦右鍵“屬性”—>高級系統(tǒng)—>環(huán)境變量纸巷,然后在系統(tǒng)變量里面加上簽名信息。比如新建一個環(huán)境變量名為“ANDROID_STORE_PASSWORD”眶痰,變量值就是簽名文件的密碼瘤旨。其它如簽名文件路徑、別名等信息也用同樣的方法加到環(huán)境變量里竖伯。
在gradle里讀取本地環(huán)境變量
def env = System.getenv()
def keystorePath = env['ANDROID_KEYSTORE_PATH']
def keystorePwd = env['ANDROID_STORE_PASSWORD']
def keyAliasName = env['ANDROID_KEYALIAS']
def keyAliasPwd = env['ANDROID_KEYALIAS_PWD']
signingConfigs {
release {
storeFile file(keystorePath)
storePassword keystorePwd
keyAlias keyAliasName
keyPassword keyAliasPwd
}
}
根據(jù)上面的指引存哲,你可能一頓操作猛如虎,完了卻發(fā)現(xiàn)打包報錯七婴,提示找不到簽名信息祟偷,這時可以重啟一下電腦,因為配置為環(huán)境變量需要重啟才能生效打厘。另外修肠,對于服務(wù)器打包(比如Jenkins)的情況,也可以如法炮制户盯,給服務(wù)器主機配置上相應(yīng)環(huán)境變量即可正常打包嵌施。
用這種方法隱藏簽名信息,優(yōu)點是關(guān)鍵信息完全不暴露在代碼中莽鸭,缺點是相對麻煩吗伤,還要保證每個需要release打包的開發(fā)人員配的環(huán)境變量路徑一致。
方法二:把簽名信息放在單獨文件里蒋川,且讓該文件在版本控制中忽略牲芋,不上庫。
- 在app的build.gradle同級目錄下捺球,新建文件config.gradle缸浦,內(nèi)容如下:
ext {
storeFile = "../demo.jks"
storePassword = "abc123456"
keyAlias = "mydemo"
keyPassword = "852JnK66"
}
- 在build.gradle里進行引用
//下面這句加在文件頭,腳本方式引入
apply from: 'config.gradle'
//簽名信息
def keyFile = "${storeFile}"
def keyPwd = "${storePassword}"
def alias = "${keyAlias}"
def aliasPwd = "${keyPassword}"
signingConfigs {
release {
storeFile file(keyFile)
storePassword keyPwd
keyAlias alias
keyPassword aliasPwd
}
}
- 上面已經(jīng)配好了氮兵,但還要記得忽略該文件裂逐,相當于不提交上庫,比如版本控制使用的是git泣栈,則在同級的.gitignore下加上一句:
config.gradle
這時其它開發(fā)人員更新代碼后卜高,release模式下肯定是打包失敗的,這時只要把config.gradle這個文件給到需要的人員即可南片。
這種方式的優(yōu)點是簡單清晰掺涛,缺點是簽名信息仍然配置在項目中,只不過利用版本控制進行了忽略和掌控疼进。
補充
其實還有第三種方法薪缆。
gradle里通過"apply from"引入腳本文件時,其實是后面是可以填寫url的伞广,即可以是網(wǎng)絡(luò)上的文件拣帽,相當于把簽名信息放到服務(wù)器疼电,但這樣就更復(fù)雜了,實在有需要的同學(xué)可以試一試减拭。