Android Studio的兩種模式及簽名配置


我們使用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 }
View Code

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

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM