Cordova 打包 Android release app 過程詳解

NO IMAGE
1 Star2 Stars3 Stars4 Stars5 Stars 給文章打分!
Loading...

TL;DR

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

建立一個 demo app

為了演示,首先我們需要建立一個 Cordova 專案的基本步驟。如果你已經對此很熟悉,可以跳過這一步。

先全域性安裝 Cordova CLI :

npm install -g cordova

cordova-demo 目錄建立一個專案,ID 為 com.example.cordovaDemo ,專案名為 cordovaDemo

cordova create cordova-demo com.example.cordovaDemo cordovaDemo

加上 Android 平臺,這會下載一個 Android 專案的框架,並把版本資訊儲存到 config.xml 。你可以去 platforms/android 目錄下檢視它。

cordova platform add android --save

你可以檢查下平臺需求是否滿足。基本上 Cordova 需要你把 Java SDK, Android SDK 和 Gradle 都配置好。

cordova requirements android

現在一個 Cordova 專案就已經準備好了。你可以嘗試構建一個版本。一切順利的話,你會在 platforms/android/build/outputs/apk 目錄下看到 APK 檔案。這個目錄後面會經常用到,為了方便我們建立一個符號連結 android-apk

# 構建 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 手動打包的流程。

Android APK 手動打包流程

Android app 的打包流程大致分為 build , sign , align 三部分。

build 是構建 APK 的過程,分為 debug 和 release 兩種。release 是釋出到應用商店的版本。

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

相關文章

Android 開發 最新文章