Android Studio 如何發布應用
前面的小節我們介紹了應用調試相關的知識,本小結我們學習如何合理的發布應用。
1. 準備工作
為了讓應用做好發布準備,我們需要先進行一些準備工作。
1.1 收集材料和資源
要開始準備應用以進行發布,我們需要收集幾項支持性的信息,其中至少應包含用于為應用簽名的加密密鑰以及應用圖標。此外,我們可能還需要提供最終用戶許可協議。
-
加密密鑰
Android 系統要求安裝的每個應用都必須使用應用開發者擁有的證書(即開發者用于存放私鑰的證書)進行數字簽名。Android 系統利用該證書來識別應用作者并在應用之間建立信任關系。我們用于簽名的的證書無需由證書授權機構簽名;Android 系統允許我們使用自簽名證書為我們的應用簽名。 -
應用圖標
請確保有一個應用圖標且該圖標符合建議的圖標指南的相關要求。應用的圖標會顯示在設備的主屏幕上和啟動器窗口中,有助于用戶識別我們的應用。它還會顯示在“管理應用”、“我的下載”等其他位置。 -
最終用戶許可協議
請考慮為我們的應用準備最終用戶許可協議 (EULA)。最終用戶許可協議可幫助保護我們的員工、公司和知識產權,因此我們建議為自己的應用提供一份。
1.2 配置應用
收集完所有支持材料后,我們可以開始配置應用以進行發布。這部分總結了一些建議在發布應用前對源代碼、資源文件和應用清單進行的配置更改。雖然是否實現這里列出的大部分配置更改都由自己決定,但這些都是良好的編碼習慣,因此建議實現這些更改。
-
選擇合適的軟件包名稱
請確保選擇的軟件包名稱適合在應用的整個生命周期中使用。將應用分發給用戶后,我們就無法再更改軟件包名稱。我們可以在應用的清單文件中設置軟件包名稱。 -
關閉日志記錄和調試功能
在構建應用以進行發布之前,請務必禁用日志記錄功能并停用調試選項。要禁用日志記錄功能,我們可以在源文件中移除對 Log 方法的調用。要停用調試功能,我們可以從清單文件的 代碼中移除 android:debuggable 屬性,或在清單文件中將 android:debuggable 屬性設為 false。此外,請移除在我們的項目中創建的所有日志文件或靜態測試文件。 -
清理項目目錄
請清理項目,確保其符合 Android 項目中所述的目錄結構。項目中留有散亂或孤立的文件會妨礙對應用的編譯,而且會導致應用行為異常。至少應執行以下清理任務:-
檢查項目中是否包含應用不使用的專用或專有數據文件,如果有,請將其移除。例如,在項目的 res/ 目錄中查找舊的可繪制對象文件、布局文件和值文件,如果不再使用這些文件,請將其刪除;
-
檢查 lib/ 目錄中是否包含測試庫;如果應用不再使用這些庫,請將其移除;
-
查看 assets/ 目錄和 res/raw/ 目錄的內容,查找其中是否包含需在應用發布前更新或移除的原始資源文件和靜態文件。
-
-
解決兼容性問題
Android 提供了多種工具和技術,可讓我們的應用與各種設備兼容。為了使我們的應用可供盡可能多的用戶使用,不妨考慮執行以下操作:-
添加對多種屏幕配置的支持;
-
針對 Android 平板電腦設備優化我們的應用;
-
考慮使用支持庫
-
2. 版本控制
版本控制是應用升級和維護策略的關鍵組成部分。版本控制很重要,因為:
-
用戶需要了解其設備上所安裝應用的具體版本信息,以及可供安裝的升級版本。
-
其他應用(包括作為套件發布的其他應用)需要向系統查詢應用的版本,以確定兼容性并識別依賴關系。
-
我們將借以發布應用的服務可能也需要向我們的應用查詢其版本,以便它們可以向用戶顯示相應版本。要發布的服務可能還需要檢查應用版本,以確定兼容性并建立升級/降級關系。
Android 系統使用我們應用的版本信息來防止降級。系統不會使用應用版本信息對第三方應用的升級或兼容性施加限制。我們的應用必須強制執行所有版本限制,并且應告知用戶這些限制。
2.1 設置應用版本信息
要為我們的應用定義版本信息,請在 Gradle 構建文件中為版本設置設定相應的值。這些值隨后會在構建流程中合并到我們應用的清單文件中。
有兩種設置,我們應始終為它們定義相應的值:
-
versionCode:一個正整數,用作內部版本號。此數字僅用于確定某個版本是否比另一個版本更新:數字越大,則版本越新。這不是向用戶顯示的版本號;向用戶顯示的版本號由 versionName 設置來設定。Android 系統使用 versionCode 值來防止降級,方法是阻止用戶安裝 versionCode 低于設備上當前所安裝版本的 APK。
-
versionName:一個字符串,用作向用戶顯示的版本號。我們可以將此設置指定為原始字符串或對字符串資源的引用。
示例如下:
android {
defaultConfig {
...
versionCode 2
versionName "1.1"
}
}
示例的 defaultConfig {} 代碼塊中,versionCode 值表示當前 APK 包含應用的第二個版本,versionName 字符串則指定向用戶顯示的應用版本為版本 1.1。
2.2 指定 API 級別要求
如果我們的應用需要特定的最低 Android 平臺版本,我們可以在應用的 build.gradle 文件中將該版本要求指定為 API 級別設置。在構建流程中,這些設置將合并到應用的清單文件中。指定 API 級別要求可確保只能將我們的應用安裝在運行兼容的 Android 平臺版本的設備上。
有兩種 API 級別設置:
-
minSdkVersion:可運行應用的最低 Android 平臺版本,由平臺的 API 級別標識符指定。
-
targetSdkVersion:指定運行應用的目標 API 級別。在某些情況下,這允許應用使用針對目標 API 級別定義的清單元素或行為,而不是僅限于使用那些針對最低 API 級別定義的清單元素或行為。
示例如下:
android {
...
defaultConfig {
...
minSdkVersion 14
targetSdkVersion 24
}
}
在準備安裝我們的應用時,系統會檢查這些設置的值,并將其與系統版本進行比較。如果 minSdkVersion 值大于系統版本,系統會阻止安裝應用。
3. 應用簽名
Android 系統要求所有 APK 必須先使用證書進行數字簽名,然后才能安裝到設備上或進行更新。
3.1 生成密鑰和密鑰庫
如果我們還沒有密鑰,我們可以使用 Android Studio 生成一個,具體步驟如下所示:
-
在菜單欄中依次點擊 Build > Build > Generate Signed Bundle/APK;
-
在 Generate Signed Bundle or APK 對話框中,選擇 Android App Bundle 或 APK,然后點擊 Next;
-
在 Key store path 字段下,點擊 Create new;
-
在 New Key Store 窗口中,為密鑰庫和密鑰提供以下信息:
-
Key store path:選擇創建密鑰庫的位置。
-
Password:為我們的密鑰庫創建并確認一個安全的密碼。
-
Key-Alias:為我們的密鑰輸入一個標識名。
-
Key-Password:為我們的密鑰創建并確認一個安全的密碼。此密碼應該與我們為密鑰庫選擇的密碼不同。
-
Key-Validity (years):以年為單位設置密鑰的有效時長。密鑰的有效期應至少為 25 年,以便我們可以在應用的整個生命期內使用同一密鑰為應用更新簽名。
-
Key-Certificate:為證書輸入一些關于本人的信息。此信息不會顯示在應用中,但會作為 APK 的一部分包含在我們的證書中。
-
-
填寫完表單后,請點擊 OK。
至此,我們的密鑰庫和密鑰就創建好了,下面我們使用密鑰來給應用簽名。
3.2 為應用簽名
要使用 Android Studio 為我們的應用簽名,并導出現有的應用簽名密鑰,請按以下步驟操作:
- 在菜單欄中依次點擊 Build > Build > Generate Signed Bundle/APK;
- 在 Generate Signed Bundle or APK 對話框中,選擇 Android App Bundle 或 APK,然后點擊 Next;
- 指定密鑰庫的路徑、密鑰的別名,然后輸入二者的密碼,然后點擊 Next;
- 為簽名的應用選擇一個目標文件夾、選擇構建類型,選擇簽名版本,然后點擊 Finish。
至此,我們的應用就編譯并且簽名完成,可以上傳至應用市場或自己的服務器。
4. 小結
本節課程我們主要學習了如何合理的發布應用。本節課程的重點如下:
- 掌握發布應用前的準備工作;
- 掌握如何創建密鑰庫和密鑰;
- 掌握如何為應用簽名。