Android簽名

爲何Android應用須要簽名

這裏我在網上找了一些資料總結了一下,這個理解一下就能夠了。android

  1. 應用程序升級——當你對應用程序進行升級時,若是你想用戶平穩的升級,那麼,你就須要簽上相同的證書。當系統安裝一個升級應用程序時,若是新版本的證書與老版本的證書有匹配的話,那麼,系統纔會容許進行升級。若是你沒有爲版本簽上合適的證書,當你安裝時,你須要給應用程序指定一個新的包名——在這種狀況下,用戶安裝的新版本,被看成是一個全新的應用程序。
  2. 應用程序模塊化——若是應用程序請求的話,Android系統容許簽有相同證書的應用程序運行在相同的進程裏,這樣,系統就會把它們看做是一個單一的應用程序。用這種方法配置應用程序,用戶能夠選擇更新每一個獨立的模塊。
  3. 代碼/數據權限共享——Android系統提供了基於簽名的權限檢查,所以,若是應用程序間簽有特定的證書,那麼,它們之間能夠共享功能。經過多個程序簽有相同的證書而且使用基於簽名的權限檢查,你的程序能夠以一種安全的方式共享代碼和數據。還有一個決定簽名策略的重要因素是:如何設定key的有效期。
  4. 發送者的身份認證,因爲開發商可能經過使用相同的Package Name來混淆替換已經安裝的程序,以此保證簽名不一樣的包不被替換
  5. 保證信息傳輸的完整性,簽名對於包中的每一個文件進行處理,以此確保包中內容不被替換。
  6. 防止交易中的抵賴發生, 市場對軟件的要求

 簽名的方法git

一、安全

 第一步: Build --->> Generate Signed APKapp

第二步:Create New···(已經建立過keystore選Choose existing···)模塊化

第三步:填寫相關信息測試

設置keystore路徑、密碼,設置key:別名、密碼、有效期,證書等gradle

Key store path:存放路徑ui

Keyspa

  Alias:別名.net

  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 {}之上新增代碼

 

app/build.gradle下的signingConfigs能夠改成:

1

2

3

4

5

6

7

8

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     }

 

 

最後 有時候Android已安裝了存在簽名衝突的同名數據包!!!

應爲:手機上安裝的是從AndroidStudio直接運行的apk,測試版;而提示有新版本下載的安裝包是已發佈過得,正式版;因此兩個版本的簽名不相同,因此會報錯。

若想繼續測試自動更新,手工刪除該軟 件的舊版(),而後安裝新版。

或者直接在你的debug版本也設置相同的簽名就好 第二種 或者第三種 看需求,是否須要保密選擇設置

相關文章
相關標籤/搜索