前言
Android要求所有的應用必須進行數字簽名才可以釋出,也就是我們平時所說的使用證書打包然後上傳市場。這個簽署的過程又包括建立和存儲證書,使用不同證書簽署不同的建構配置,及自動簽署過程。
重要的角色:證書和密鑰庫
公鑰證書又稱為數字證書和身份證書包含公鑰/私鑰對的公鑰,以及可以辨別密鑰所有者的一些其他元素,例如名稱和位置,證書持有者持有對應的私鑰
在簽署工具簽署我們的APP時,會自動将我們的公鑰證書附加到APK中,并且關聯到該證書的持有者及持有者擁有的對應私鑰,這樣就保證了應用的每次更新都來自原創者。
用于創建立此公鑰證書的密鑰稱為應用簽名密鑰,也就是我們所說的密鑰。
簽署調試建構(即我們平時所說的Debug)
從IDE中運作或調試我們的項目時,Android Studio将自動使用通過Android SDK工具生成的調試證書簽署我們的APK,當我們在 Android Studio 中首次運作或調試項目時,IDE 将自動在 $HOME/.android/debug.keystore(~/.android/(OS X 和 Linux)
C:\Documents and Settings\.android\(Windows XP)
C:\Users\.android\ (Windows Vista,Windows 7、8 和 10)) 中建立調試密鑰庫和證書,并設定密鑰庫和密鑰密碼。
Android Studio會自動将我們的調試簽署資訊存儲到簽署配置中,是以我們不必每次調試時都輸入相關資訊。簽署配置是一種包含簽署APK所需全部必要資訊的對象,這些資訊包括密鑰庫位置、密鑰庫密碼、密鑰名稱和密鑰密碼
運作手後生成的APK目錄:項目位置-app-build-outputs-apk下
調試證書的有效期
Google将調試簽署 APK 的自簽署證書的有效期設定為365天,從建構該yingyong之日起,一旦到期,将會收到一個建構錯誤,要想修複次問題,必須删除上面所說的第一次建構時産生的debug.keystore檔案,當您下次建構和運作調試建構類型時,這些建構工具将重新生成新的密鑰庫和調試密鑰。請注意,您必須運作應用,單純的建構不會重新生成密鑰庫和調試密鑰。
建立密鑰和密鑰庫
Android Studio 生成應用簽名或上傳密鑰,步驟如下:
- 1.在菜單欄中 點選Build->Generate Signed APK
- 2.點選create new建立一個新的密鑰和密鑰庫
- 3.在new key store視窗上,為密鑰和密鑰庫配置以下資訊
- Key store path:建立密鑰庫的位置
- Password:為密鑰庫建立一個安全的密碼
- 密鑰: Alias:為密鑰輸入一個辨別名
- Password:為密鑰建立一個并确認安全的密碼(此密碼應當與密鑰庫的密碼不同)
-
Validity (years):以年為機關設定密鑰的有效時長。密鑰的有效期應至少為 25
年,以便您可以在應用的整個生命期内使用相同的密鑰簽署應用更新。
-
Certificate:為證書輸入一些關于您自己的資訊。此資訊不會顯示在應用中,但會作為 APK 的一部分包含在您的證書中
然後點選OK,這樣我們的密鑰庫和密鑰就生成了,然後就可以用來簽署我們的APK了
簽署APK
使用Android Studio可以一次簽署單個或多個APK,當然我們也可以将Gradle建構設定配置為在建構流程期間自動處理簽署。
- 1.點選 Build > Generate Signed APK 以打開 Generate Signed APK 視窗。(如果您剛剛按上述說明生成了一個密鑰和密鑰庫,則此視窗已處于打開狀态。)
- 2.在 Generate Signed APK Wizard 視窗上,選擇一個密鑰庫和一個私鑰,并為它們輸入密碼。(如果您剛剛在上一部分中建立密鑰庫,這些字段将自動填充。)然後,點選 Next
- 3.在下一個視窗上,為簽署的 APK 選擇一個目的地、選擇建構類型、選擇産品風味(如果适用,即我們平時所說的釋出平台),然後點選 Finish 注:Android Studio 将為選擇的每個産品風味生成單獨的 APK。
配置建構流程自動簽署APK
在Android Studio中我們可以建立一個簽署配置并配置設定至釋出建構類型,這樣就可以将我們的項目配置為在建構流程中自動簽署并釋出APK。一個簽署配置包括一個密鑰庫(jks檔案)的位置,密鑰庫的密碼(Key Store password),密鑰别名(Key alias),密鑰密碼(key password),要使用Android Studio建立一個簽署配置并配置設定至釋出建構類型,須按以下步驟:
- 1.在 Project 視窗中,右鍵點選您的應用并點選 Open Module Settings。
- 2.在 Project Structure 視窗左面闆中的 Modules 下,點選您想要簽署的子產品。
- 3.點選 Signing 标簽,然後點選 Add。
- 4.選擇您的密鑰庫檔案,為此簽署配置輸入一個名稱(因為您可能建立多個配置),然後輸入所需的資訊。
- 5.點選 Build Types 标簽。
- 6.點選 release 建構。
- 7.在 Signing Config 下,選擇您剛建立的簽署配置 在您建立簽署配置時,您的簽署資訊将以純文字形式包含到 Gradle 建構檔案中。如果您是團隊協作開發或者公開分享自己的代碼,那麼您應當從建構檔案中移除簽署資訊并将其單獨存儲,進而確定此資訊的安全。
簽署不同市場
如果我們的應用在釋出在不同的市場并且以各自的方式簽署釋出,那我們可以建立更多的簽署配置并配置設定給對應的市場:
在 Project 視窗中,右鍵點選您的應用并點選 Open Module Settings。
- 1.在 Project Structure 視窗左面闆中的 Modules 下,點選您想要簽署的子產品。
- 2.點選 Signing 标簽,然後點選 Add
- 3.選擇您的密鑰庫檔案,為此簽署配置輸入一個名稱(因為您可能建立多個配置),然後輸入所需的資訊。
- 4.選擇您的密鑰庫檔案,為此簽署配置輸入一個名稱(因為您可能建立多個配置),然後輸入所需的資訊。
- 5.如果需要,請重複第 3 步和第 4 步,直到您完成所有簽署配置的建立。
- 6.點選 Flavors 标簽。
-
7.點選您想要配置的風味,然後從 Signing Config 下拉菜單中選擇合适的簽署配置。
比如:我們使用之前配置的config簽署小米市場
簽署注意事項
為什麼在軟體的生命周期内要使用相同的證書簽署應用呢?原因如下:
- 應用更新:當系統安裝應用的更新時,它會比較新版本和現有版本中的證書。如果證書比對,則系統允許更新。如果您使用不同的證書簽署新版本,則必須為應用配置設定另一個軟體包名稱 在此情況下,使用者将新版本作為全新應用安裝。
-
應用子產品化:Android 允許通過相同證書簽署的多個 APK
在同一個程序中運作(如果應用請求這樣),以便系統将它們視為單個應用。通過此方式,您可以在子產品中部署您的應用,且使用者可以獨立更新每個子產品。
-
通過權限共享代碼/資料:Android
提供基于簽名的權限執行,以便應用可以将功能展示給使用指定證書簽署的另一應用。通過使用同一個證書簽署多個 APK
并使用基于簽名的權限檢查功能,您的應用可采用安全的方式共享代碼和資料。
從配置檔案中移除簽署資訊
在我們建立簽署資訊時,Android Studio會以純文字的形式将簽署資訊添加到子產品的build.gradle檔案中,如果您是團隊協作開發或者将您的代碼開源,那麼您應當将此敏感資訊從建構檔案中移出,以免被其他人輕易擷取。為此,您應建立一個單獨的屬性檔案來存儲安全資訊并按以下步驟操作,在您的建構檔案中引用該檔案:
- 1.建立一個簽署配置,并将其配置設定至一個或多個建構類型。這些說明假設您已經按照上面配置建構流程以自動簽署您的 APK 部分所述,為釋出建構類型配置了一個簽署配置。
- 2.在項目的根目錄下建立一個名為 keystore.properties 的檔案。此檔案應當包含您的簽署資訊,如下所示:
storePassword=myStorePassword
keyPassword=mykeyPassword
keyAlias=myKeyAlias
storeFile=myStoreFileLocation
- 3.在子產品的 build.gradle 檔案中,于 android {} 塊的前面添加用于加載 keystore.properties 檔案的代碼
// Create a variable called keystorePropertiesFile, and initialize it to your
// keystore.properties file, in the rootProject folder.
def keystorePropertiesFile = rootProject.file("keystore.properties")
// Initialize a new Properties() object called keystoreProperties.
def keystoreProperties = new Properties()
// Load your keystore.properties file into the keystoreProperties object.
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
android {
...
}
- 4.我們也可以使用文法 keystoreProperties[‘propertyName’] 引用存儲在 keystoreProperties 中的屬性。修改子產品 build.gradle 檔案的 signingConfigs
塊,以便使用此文法引用存儲在 keystoreProperties 中的簽署資訊
android {
signingConfigs {
config {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
...
}
- 5.打開 Build Variants 工具視窗并確定已選擇釋出建構類型。
-
6.點選 Build > Build APK 以建構您的釋出建構,并确認 Android Studio 已在子產品的 build/outputs/apk/ 目錄中建立一個簽署的 APK。
由于您的建構檔案不再包含敏感資訊,您現在可以将其包含在源控制中或者上傳到共享的代碼庫。務必保證 keystore.properties
檔案的安全。您可能需要将其從您的源控制系統中移除。
以上就是小白對簽署應用做的一些總結,希望對大家有所幫助!後面小白會介紹如何從指令行簽署一個應用!