作用
keyStore有什么作用?
- 程序升級(jí)
新舊版本的數(shù)字證書(shū)相同時(shí) Android系統(tǒng)才會(huì)認(rèn)為這是同一程序的不同版本 如果數(shù)字證書(shū)不同 會(huì) 產(chǎn)生沖突 要求更改包名 - 程序的模塊化和開(kāi)發(fā)
擁有同一簽名的程序可以運(yùn)行在同一進(jìn)程中 可以分模塊開(kāi)發(fā) 用戶在需要的時(shí)候下載對(duì)應(yīng)的模塊 - 多個(gè)程序間共享數(shù)據(jù)和代碼
Android 提供了基于數(shù)字證書(shū)的權(quán)限賦予機(jī)制 如果某個(gè)權(quán)限(permission)的protectionLevel是signature則這個(gè)權(quán)限就只能授予那些跟該權(quán)限所在的包擁有同一個(gè)數(shù)字證書(shū)的程序
默認(rèn)的keyStore
首先 我們得知道Android studio 有他默認(rèn)的keyStore 存在的位置: $HOME/.android/debug.keystore 默認(rèn)的相關(guān)密碼如下:
//配置keystore簽名
signingConfigs {
release {
storeFile file("debug.keystore") // as默認(rèn)的keystore
storePassword "android" // keystore 默認(rèn)的打開(kāi)密碼
keyAlias "androiddebugkey" // 默認(rèn)的別名
keyPassword "android" // 默認(rèn)的別名密碼
}
}
buildTypes {
debug {
signingConfig signingConfigs.release
}
release {
signingConfig signingConfigs.release
}
}
生成自己的keyStore
這里有兩種方式:
Generate Signed APK

Generate0.png

Generate1.png

Generate2.png
圖Generate2中標(biāo)記出來(lái)的部分 v2是Android7.0新支持的特性 如果只勾選v2 那么由此數(shù)字簽名打出來(lái)的包在Android7.0以下將沒(méi)辦法使用
v1 v2 有什么不同?
- v1 通過(guò)ZIP條目進(jìn)行驗(yàn)證 這樣APK簽署后可以進(jìn)行許多修改 可以移動(dòng)或者重新壓縮文件
- v2 驗(yàn)證壓縮文件的所有字節(jié) 而不是單個(gè)的ZIP條目 因此 簽名后無(wú)法再修改(包括
zipalign) 所以在編譯過(guò)程中 將壓縮調(diào)整還有部署一步完成 這樣的好處:更安全 新的簽名可以縮短在設(shè)備上的驗(yàn)證時(shí)間(不需要費(fèi)時(shí)的解壓縮驗(yàn)證) 從而加快了安裝速度
v1 v2怎么選擇?
全選就對(duì)了
- 只選v1 Android7.0以上不會(huì)做更安全的驗(yàn)證
- 只選v2 Android7.0以下無(wú)法安裝
也可以利用gradle進(jìn)行配置:
signingConfigs {
debug {
v1SigningEnabled true
v2SigningEnabled true
}
release {
v1SigningEnabled true
v2SigningEnabled true
}
}
一鍵生成
bat批處理一鍵生成:
keytool -genkey -dname "CN=Name, OU=Unit, O=Organization, L=City, ST=Province, C=Country" -alias Android -keyalg RSA -validity 2000 -keystore Android.keystore -storepass 123456789 -keypass 123456789
注釋:
CN=Name 您的姓名
OU=Unit 您的單位
O=Organization 您的組織
L=City 您的城市
ST=Province 您的省份
C=中國(guó) 您的國(guó)家,默認(rèn)為中國(guó)
-alias Android 證書(shū)別名
-keyalg RSA 秘鑰加密算法
-validity 2000 有效期(天數(shù))
-keystore Android.keystore 秘鑰文件全稱[生成],要求絕對(duì)存儲(chǔ)路徑,如:D:\Android\Android.keystore
-storepass 123456789 密鑰庫(kù)存儲(chǔ)密碼
-keypass 123456789 秘鑰專用密碼