Cordova 打包 Android release app 過程詳解

TL;DR

Android app 的打包分爲 debug 和 release 兩種,後者是用來發布到應用商店的版本。這篇文章會告訴你 Cordova 如何打包 Android release 版本,也會讓你瞭解 Android app 的打包流程。html

建立一個 demo app

爲了演示,首先咱們須要建立一個 Cordova 項目的基本步驟。若是你已經對此很熟悉,能夠跳過這一步。android

先全局安裝 Cordova CLI :apache

npm install -g cordova

cordova-demo 目錄建立一個項目,ID 爲 com.example.cordovaDemo ,項目名爲 cordovaDemonpm

cordova create cordova-demo com.example.cordovaDemo cordovaDemo

加上 Android 平臺,這會下載一個 Android 項目的框架,並把版本信息保存到 config.xml 。你能夠去 platforms/android 目錄下查看它。json

cordova platform add android --save

你能夠檢查下平臺需求是否知足。基本上 Cordova 須要你把 Java SDK, Android SDK 和 Gradle 都配置好。安全

cordova requirements android

如今一個 Cordova 項目就已經準備好了。你能夠嘗試構建一個版本。一切順利的話,你會在 platforms/android/build/outputs/apk 目錄下看到 APK 文件。這個目錄後面會常常用到,爲了方便咱們創建一個符號連接 android-apkbash

# 構建 apk
cordova build android

# 創建符號連接 android-apk
ln -s platforms/android/build/outputs/apk android-apk

# 查看一下這個目錄,你應該會看到 android-debug-unsigned.apk
ls android-apk

搞定!但這個構建的 APK 是 debug 版本的。要構建 release 版本,咱們須要先了解一下 Android 手動打包的流程。app

Android APK 手動打包流程

Android app 的打包流程大體分爲 build , sign , align 三部分。框架

build 是構建 APK 的過程,分爲 debug 和 release 兩種。release 是發佈到應用商店的版本。ionic

sign 是爲 APK 簽名。無論是哪種 APK 都必須通過數字簽名後才能安裝到設備上,簽名須要對應的證書(keystore),大部分狀況下 APK 都採用的自簽名證書,就是本身生成證書而後給應用簽名。

align 是壓縮和優化的步驟,優化後會減小 app 運行時的內存開銷。

debug 版本的的打包過程通常由開發工具(好比 Android Studio)自動完成的。開發工具在構建時會自動生成證書而後簽名,不須要咱們操心。而 release 版本則須要開發者本身生成證書文件。Cordova 做爲 hybrid app 的框架不像純 Android 開發那麼自動化,因此第一次打 release 包咱們須要瞭解一下手動打包的過程。

Build

首先,咱們生成一個 release APK 。這點在 cordova build 命令後加一個 --release 參數局能夠。若是成功,你能夠在 android-apk 目錄下看到一個 android-release-unsigned.apk 文件。

cordova build android --release

Sign

咱們須要先生成一個數字簽名文件(keystore)。這個文件只須要生成一次。之後每次 sign 都用它。

keytool -genkey -v -keystore release-key.keystore -alias cordova-demo -keyalg RSA -keysize 2048 -validity 10000

上面的命令意思是,生成一個 release-key.keystore 的文件,別名(alias)爲 cordova-demo 。
過程當中會要求設置 keystore 的密碼和 key 的密碼。咱們分別設置爲 testingtesting2。這四個屬性要記牢,下一步有用。

而後咱們就能夠用下面的命令對 APK 簽名了:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore release-key.keystore android-apk/android-release-unsigned.apk cordova-demo

這個命令中須要傳入證書名 release-key.keystore,要簽名的 APK android-release-unsigned.apk,和別名 cordova-demo。簽名過程當中須要前後輸入 keystore 和 key 的密碼。命令運行完後,這個 APK 就已經改變了。注意這個過程沒有生成新文件。

Align

最後咱們要用 zipalign 壓縮和優化 APK :

zipalign -v 4 android-apk/android-release-unsigned.apk android-apk/cordova-demo.apk

這一步會生成最終的 APK,咱們把它命名爲 cordova-demo.apk 。它就是能夠直接上傳到應用商店的版本。

自動打包

一旦有了 keystore 文件,下次打包就能夠很快了。你能夠在 cordova build 中指定全部參數來快速打包。這會直接生成一個 android-release.apk 給你。

cordova build android --release -- --keystore="release-key.keystore" --alias=cordova-demo --storePassword=testing --password=testing2

但每次輸入命令行參數是很重複的,Cordova 容許咱們創建一個 build.json 配置文件來簡化操做。文件內容以下:

{
  "android": {
    "release": {
      "keystore": "release-key.keystore",
      "alias": "cordova-demo",
      "storePassword": "testing",
      "password": "testing2"
    }
  }
}

下次就能夠直接用 cordova build --release 了。

爲了安全性考慮,建議不要把密碼放在在配置文件或者命令行中,而是手動輸入。你能夠把密碼相關的配置去掉,下次 build 過程當中會彈出一個 Java 小窗口,提示你輸入密碼。

用 Gradle 配置自動打包

另外一種配置方法是使用 Gradle ,一個 Android 的自動化構建工具。cordova build android 的過程其實就是使用它。你要在 platforms/android 目錄下創建 release-signing.properties 文件,內容相似下面這樣:

storeFile=relative/path/to/keystore
storePassword=SECRET1
keyAlias=ALIAS_NAME
keyPassword=SECRET2

這個文件的名稱和位置也是能夠經過 Gradle 的配置 cdvReleaseSigningPropertiesFile 修改的。我以爲通常狀況使用 build.json 就足夠了。有興趣的能夠看這個 Cordova 官方教程

參考資料

Ionic: Publishing your app
Android Studio: Sign Your App
Cordova: Android Platform Guide
How to automatically sign your Android apk using Ionic framework and Crosswalk

相關文章
相關標籤/搜索