Cordova 打包 Android release app 過程詳解 時間 2016-05-22 22:56:27 SegmentFault 原文 https://segmentfault.com/a/1190000005177715 主題 Cordova 安卓開發 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 的密碼。我們分別設置為 testing 和 testing2 。這四個屬性要記牢,下一步有用。 然后我們就可以用下面的命令對 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 官方教程
