Android 生成和使用簽名文件

1 為什么要簽名

1.1 Android 簽名機制其實是對 APK 包完整性和發(fā)布機構(gòu)唯一性的一種校驗機制。Android 簽名機制不能阻止 APK 包被修改,但修改后的再簽名無法與原先的簽名保持一致(除非擁有發(fā)布者的私鑰)。

1.2 APK 包加密的公鑰就打包在 APK 包內(nèi),且不同的私鑰對應(yīng)不同的公鑰。也就是說,不同私鑰簽名 APK 的公鑰也必不相同。所以可以根據(jù)公鑰的對比,來判斷私鑰是否一致。

1.3 應(yīng)用程序升級:如果希望用戶無縫升級到新的版本,那么必須用同一個證書進行簽名。這是由于只有以同一個證書簽名,系統(tǒng)才會允許安裝升級的應(yīng)用程序。如果采用了不同的證書,那么安裝 APP 時系統(tǒng)會要求應(yīng)用程序采用不同的包名稱,在這種情況下相當于安裝了一個全新的應(yīng)用程序。如果想升級應(yīng)用程序,簽名證書要相同,包名稱要相同!

1.4 應(yīng)用程序模塊化:Android 系統(tǒng)可以允許同一個證書簽名的多個應(yīng)用程序在一個進程里運行,系統(tǒng)實際把他們作為一個單個的應(yīng)用程序,此時就可以把我們的應(yīng)用程序以模塊的方式進行部署,而用戶可以獨立的升級其中的一個模塊

1.5 代碼或者數(shù)據(jù)共享:Android 提供了基于簽名的權(quán)限機制,那么一個應(yīng)用程序就可以為另一個以相同證書簽名的應(yīng)用程序公開自己的功能。以同一個證書對多個應(yīng)用程序進行簽名,利用基于簽名的權(quán)限檢查,就可以在應(yīng)用程序間以安全的方式共享代碼和數(shù)據(jù)了。不同的應(yīng)用程序之間,想共享數(shù)據(jù),或者共享代碼,那么要讓它們運行在同一個進程中,而且要讓它們用相同的證書簽名。

2 Android 生成簽名文件

android 生成簽名文件有兩種:命令行方式 和 AndroidStudio 界面方式,下面分別來介紹。

2.1 使用 keytool 命令

2.1.1 keytool 命令位于 <JDK安裝目錄>/bin 文件夾下。所以需要先安裝 JDK 。
2.1.2 安裝 JDK 后一般會在系統(tǒng)環(huán)境變量中配置 jdk,這樣使用起來會比較方便。如果安裝 jdk 后沒有配置在系統(tǒng)環(huán)境變量中配置也是可以的:

  • 如在沒有在系統(tǒng)變量中配置 jdk,則在 cmd 中先進入到 <JDK安裝目錄>/bin文件夾下,然后再輸入命令 keytool
  • 如果在系統(tǒng)環(huán)境變量中配置了 jdk,則在 cmd 中直接輸入命令 keytool
    輸入命令 keytool后,如下圖所示:
    keytool 命令

2.1.3 keytool.exe 命令用于生成密鑰,并且把密鑰信息存放到 keystore 文件中。運行命令行 keytool -v -genkey -keystore e:\AndroidKey\mykeystore.keystore –alias mykey -validity 20000
其中,參數(shù)的意義如下:

-v 為顯示詳細輸出信息。
-genkey 為產(chǎn)生密鑰。
-keystore<keystorefilename>.keystore 指定生成 keystore 文件的文件名。
-alias<keyfilename> 指定密鑰的別名。
-validity<days> 指定該密鑰的有效期限,單位是天。

該命令運行后出現(xiàn)密鑰生成向?qū)?,開發(fā)者根據(jù)要求填寫相應(yīng)信息,即可生成密鑰,如下圖所示:
7.2.png

至此,已生成開發(fā)者簽名證書,存儲在 E:\AndroidKey\mykeystore.keystore 文件中。開發(fā)者可以使用該密鑰對應(yīng)用程序進行簽名。

2.2 AndroidStudio 界面方式生成簽名證書

使用 AndroidStudio 界面方式生成簽名證書其實比命令行更加方便快捷還使用,下面是具體的步驟

2.2.1 在 AndroidStudio 界面中依次點擊: Build -> Generate Signed Bundle / APK...如圖所示:
7.3.png

2.2.3 點擊后會彈出如下界面:
7.4.png

2.2.4 對于打包程序來說,要選擇對應(yīng)的選項進行打包;對于生成簽名文件來說,圖中的兩個選項都是可以,因為都需要用到簽名文件。比如選擇 APK 后點擊 next,如圖所示:
7.5.png

2.2.5 上圖中有兩個作用:
如果已經(jīng)有了簽名文件,則直接點擊 Choose existing... 找到簽名文件的路徑,然后在下面輸入對應(yīng)的 Key store password、Key alias 和 Key password 后就會進行打包 release 版本的流程
如果沒有簽名文件,或者是想要重新生成簽名文件,則點擊 Create new...,進入到生成簽名文件的界面,如果所示:
7.6.png

其中要填寫的內(nèi)容和 #2.1.3 中相同,這里不再重復(fù)。點擊 ok 后,簽名文件就會創(chuàng)建好了。

3 使用簽名文件

使用簽名文件也有兩種方式:在界面中使用和在 gradle 中配置,下面分別來學(xué)習(xí)。

3.1 界面中使用簽名文件

如何在 AndroidStudio 的界面中使用簽名文件,在 #2.2.4 和 #2.2.5 已經(jīng)介紹了,不再重復(fù)。

3.2 在 build.gralde 中配置

在 AndroidStudio 工程的項目中(比如 app 工程)的 build.gradle 中進行如下配置即可:

android {
    compileSdk 31

    signingConfigs {
        release {
            storeFile file(appStoreFile)
            storePassword 'appStorePassword'
            keyAlias 'appKeyAlias'
            keyPassword 'appKeyPassword'
        }
    }
    buildTypes {
        release {
            signingConfig signingConfigs.release

            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容