我們使用Android Studio 運行我們的app,無非兩種模式:debug和release模式。
debug模式
debug模式使用一個默認的debug.keystore進行簽名。
這個默認簽名(keystore)是不需要密碼的,它的默認位置在C:\Users\<用戶名>\.Android\debug.keystore,如果不存在Android studio會自動創建它。
例如我的debug.keystore就在C:\Users\Administrator\.android\debug.keystore。
release模式
在我們正式發布項目的時候是不能使用debug.keystore的。開發過程中我們也可以使用發布模式運行。可以通過如下設置:
BuildVariants-Build Variant-debug/release

如果項目需要細分開發dev和生產pro版本,每個版本中都包含debug和release模式,可以這么設置:


就細分成四種模式:

release模式需要配置簽名才能運行,這時就需要一個keystore
如果沒有就需要創建,已經創建過keystore請跳過此步驟
1.創建keystore,並生成我們的apk(打包)
第一步: Build --->> Generate Signed APK

第二步:Create New···(已經創建過keystore選Choose existing···)

第三步:填寫相關信息
設置keystore路徑、密碼,設置key:別名、密碼、有效期,證書等
Key store path:存放路徑
Key
Alias:別名
Validity(years):有效期(一般默認25年)
Certificate:證書
First and Last Name:姓名
Organization Unit:組織單位
Organization:組織
City or Locality:城市或地區
State or Province:州或省
Country Code(XX):國家代碼(XX),中國:86

第四步:輸入key、keystore密碼

第五步:選擇發布app的路徑,默認即可 選擇release方式發布

OK,發布成功,可以到 剛才設置的目標文件夾下面找到發布的apk
那對一些人來說,這樣也太麻煩了,每次都得輸入相關信息,還得進行選擇,那么有更簡單快捷的方法嗎?答案是有的。
我們可以在項目的app目錄下的build.gradle中進行簽名的配置。
2.release模式配置keystore
Project structure-signing,輸入已創建的keystore信息

使得簽名生效需配置Build Types

點擊OK即可,然后查看對應build.gradle的配置文件應該是這樣的。當然了,你也可以通過直接在build.gradle里面寫下面這段。
1 signingConfigs {
2 release {
3 keyAlias 'androiddebugkey'
4 keyPassword 'android'
5 storeFile file('C:/Users/ssc/.android/debug.keystore')
6 storePassword 'android'
7 }
8 }
9
10 ·········
11
12 buildTypes {
13 release {
//是否混淆
14 minifyEnabled false
//是否移除無用資源
15 zipAlignEnabled true
//混淆的配置文件
16 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
17 signingConfig signingConfigs.release
18 }
19 }
上述的配置雖然配置簡單,但是存在不安全性,假如你的項目是開源的,你把簽名文件的配置密碼之類的信息用明文寫在build.gradle里面,那是不是很不安全呢?
可以將簽名文件的配置密碼之類的信息直接寫在local.properties下,因為在Git版本控制的項目中,我們可以看到我們項目project模式根目錄下有一個.gitignore的文件,里面的配置大概如下所示


我們可以看到/local.properties,意思就是說local.properties默認是不添加到版本控制里面的,因為local.properties存儲的是我們環境資源的一些相關信息,如sdk的路徑。故我們可以在local.properties下配置簽名信息而不用擔心密鑰外泄。對於開源項目來說,是非常好的。
在local.properties下直接添加相關信息

在build.gradle里,為了不用明文顯示,我們首先要獲得key的相關配置,所以我們可以在app的build.gradle里
android {}之上新增代碼
1 def keystoreFilepath = '' 2 def keystorePSW = '' 3 def keystoreAlias = '' 4 def keystoreAliasPSW = '' 5 // default keystore file, PLZ config file path in local.properties 6 def keyfile = file('s.keystore.temp') 7 8 Properties properties = new Properties() 9 // local.properties file in the root director 10 properties.load(project.rootProject.file('local.properties').newDataInputStream()) 11 keystoreFilepath = properties.getProperty("keystore.path") 12 13 if (keystoreFilepath) { 14 keystorePSW = properties.getProperty("keystore.password") 15 keystoreAlias = properties.getProperty("keystore.alias") 16 keystoreAliasPSW = properties.getProperty("keystore.alias_password") 17 keyfile = file(keystoreFilepath) 18 }
app/build.gradle下的signingConfigs可以改為:
signingConfigs {
release {
keyAlias keystoreAlias
keyPassword keystoreAliasPSW
storeFile keyfile
storePassword keystorePSW
}
}
設置后Signing中keystore值無需關心

相應的,buildTypes也可以配置成這樣
1 buildTypes { 2 release { 3 minifyEnabled false 4 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 5 // signingConfig signingConfigs.release 6 //簽名文件存在,則簽名 7 if (keyfile.exists()) { 8 println("WITH -> buildTypes -> release: using jks key") 9 signingConfig signingConfigs.release 10 } else { 11 println("WITH -> buildTypes -> release: using default key") 12 } 13 23 } 24 }
到此,前面配置完成。
本文為博主原創文章,請尊重版權,未經博主允許不得轉載,轉載請注明出處:http://www.cnblogs.com/details-666/p/keystore.html
附:查詢keystore的相關信息,如查看sha1的值;可以在運行窗口,定位到keystore所在的路徑,執行cd C:\Users\ssc\.android
執行這條語句后就能顯示Key的所有信息(以android默認keystore為例)
keytool -list -v -keystore xxx.jks

