1. 程式人生 > >關於簽名文件的知識總結

關於簽名文件的知識總結

sign ace release 知識 value 顯示 pad 1.2 port

關於簽名文件的知識總結

問題描述

當應用要發布release版本時,如果沒有簽名文件是不能安裝到設備上的,所以在打包release版本的apk之前,要添加簽名文件。

生成簽名文件的方法

第一種生成簽名文件的方法(使用Android Studio生成簽名文件)

按照Build->Generate Signed APK打開生成簽名文件的窗口。

技術分享圖片
技術分享圖片

  • Key store path 存放路徑 如果沒有點擊下面的Create new store按鈕,如果有,則點擊Choose Existing store按鈕。
  • key store password 密碼
  • Key alias 別名
  • Key password 密碼
點擊Create new之後

點擊Create New Store按鈕之後,會打開一個New Key Store窗口:

技術分享圖片
技術分享圖片

  • Key store path 存放位置。點擊後面的…按鈕選擇存放的位置
  • Password 密碼
  • Confirm 確認密碼
  • Alias 別名
  • Password 密碼
  • Confirm 確認密碼
  • Validity 有效期
  • First and Last Name 姓名
  • Organizational Unit 組織單位
  • Origanization 組織
  • City or Locality 城市或地方
  • State or Province 州或省
  • Country Code 國家代號

填寫完之後點擊OK按鈕,返回到Generate Singed Apk窗口,窗口中的內容已經全部填充

技術分享圖片
技術分享圖片

點擊Generate Singed Apk窗口的Choose existing store按鈕

點擊Choose existing store按鈕之後,在彈出的文件選擇框中選擇已有簽名文件即可。填寫完ey store password、Key alias、Key password點擊Next按鈕即可。

點擊Generate Singed Apk窗口的Next按鈕

點擊Generate Singed Apk窗口的Next按鈕之後,界面顯示如下:

技術分享圖片

技術分享圖片
這個界面我們只需要選擇Signature Version。

  • V1(Jar Signature) 通過ZIP條目進行驗證,APK簽署後可進行修改-可以移動甚至重新壓縮文件。
  • V2(Full APK Signature) 驗證壓縮文件的所有字節,而不是單個ZIP條目,因此,在簽名後無法再更改(包括 zipalign)。

勾選不同的結果:

  • 只勾選V1簽名並不會影響什麽,但是在7.0上不會使用更安全的驗證方式。
  • 只勾選V2簽名7.0以下會直接安裝完顯示未安裝,7.0以上則使用V2的方式驗證。
  • 同時勾選V1和V2則所有機型都沒有問題。

最後點擊Finish按鈕之後,簽名文件就生成了。

第二種生成簽名文件的方法(keytool)

使用命令生成簽名文件。
代碼運行過程如圖:

技術分享圖片
技術分享圖片
輸入keytool -genkey -alias test.keystore -keyalg RSA -validity 10000 -keystore test.keystore
其中 test.keystore表示簽名文件的文件名;10000表示App的有效期;RSA代表認證機構。
按回車之後就會讓你輸入各種信息,輸入這些信息之後再按回車,簽名文件就生成好了,你在哪個目錄下運行的指令,簽名文件就在哪個目錄下。

安全管理簽名文件和簽名密碼

不安全的做法

在使用Android Studio進行release版的apk簽名的時候,往往都是將簽名文件keystore放在項目中,密碼寫在build.gradle中,keystore和密碼就隨著代碼上傳到了git倉庫中了,這樣往往很不安全,因為這樣被人獲取。
修改之前的app中的build.gradle簽名配置:

android {

   compileSdkVersion 23
   buildToolsVersion "24.0.2"

    signingConfigs {
        release {
            keyAlias ‘abc‘
            keyPassword ‘123456‘
            storeFile file("${projectDir}/keystore.key")
            storePassword ‘123456‘
        }
    }


    buildTypes {
        release {
            minifyEnabled true
            zipAlignEnabled true
            signingConfig signingConfigs.release
            proguardFiles getDefaultProguardFile(‘proguard-android.txt‘), ‘proguard-rules.pro‘
            buildConfigField "boolean", "ENV_SETTING", "true"
            buildConfigField "boolean", "RELEASED_TEST", "false"
            resValue "string", "app_name", "應用名稱"
        }
    }
}

安全的做法

1.在project下新建一個”keystore.properties”文件,將keystore的絕對路徑和密碼、別名等信息配置好。

keystore.properties

keystore=F:\\keystore.key
storePassword=123456
keyAlias=rbsoft
keyPassword=123456
2.修改build.gradle中的配置簽名信息
apply plugin: ‘com.android.application‘

def keystorePropertiesFile = rootProject.file("keystore.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))

android {

   compileSdkVersion 23
   buildToolsVersion "24.0.2"

   signingConfigs {
        release {
            keyAlias keystoreProperties[‘keyAlias‘]
            keyPassword keystoreProperties[‘keyPassword‘]
            storeFile file("${projectDir}/keystore.key")
            storePassword keystoreProperties[‘storePassword‘]
        }
    }

    buildTypes {
        release {
            minifyEnabled true
            zipAlignEnabled true
            signingConfig signingConfigs.release
            proguardFiles getDefaultProguardFile(‘proguard-android.txt‘), ‘proguard-rules.pro‘
            buildConfigField "boolean", "ENV_SETTING", "true"
            buildConfigField "boolean", "RELEASED_TEST", "false"
            resValue "string", "app_name", "應用名稱"
        }
    }
3.忽略keystore.properties

將keystore.properties添加到忽略中,這樣就不上傳keystore.properties文件到git倉庫,使得簽名的銘感信息與上傳到git倉庫隔離開,這樣簽名信息就安全了。
.gitignore

...
/sign.properties

總結

這篇文章主要說的是關於簽名文件的,應用在打包的時候就需要生成一個簽名文件,也要註意對簽名文件的安全管理。

關於簽名文件的知識總結