天天看點

React Native 打包 APK

打包APK

Android 要求所有應用都有一個數字簽名才會被允許安裝在使用者手機上,是以在把應用釋出到類似Google Play store這樣的應用市場之前,你需要先生成一個簽名的 APK 包。Android 開發者官網上的如何給你的應用簽名文檔描述了簽名的細節。本指南旨在提供一個簡化的簽名和打包 js 的操作步驟,不會涉及太多理論。

你可以用keytool指令生成一個私有密鑰。在 Windows 上keytool指令放在 JDK 的 bin 目錄中(比如C:\Program Files\Java\jdkx.x.x_x\bin),你可能需要在指令行中先進入那個目錄才能執行此指令。

$ keytool -genkeypair -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

這條指令會要求你輸入密鑰庫(keystore)和對應密鑰的密碼,然後設定一些發行相關的資訊。最後它會生成一個叫做my-release-key.keystore的密鑰庫檔案。

在運作上面這條語句之後,密鑰庫裡應該已經生成了一個單獨的密鑰,有效期為 10000 天。--alias 參數後面的别名是你将來為應用簽名時所需要用到的,是以記得記錄這個别名。

注意:請記得妥善地保管好你的密鑰庫檔案,一般不要上傳到版本庫或者其它的地方。

把my-release-key.keystore檔案放到你工程中的android/app檔案夾下。

編輯~/.gradle/gradle.properties(全局配置,對所有項目有效)或是項目目錄/android/gradle.properties(項目配置,隻對所在項目有效)。如果沒有gradle.properties檔案你就自己建立一個,添加如下的代碼(注意把其中的****替換為相應密碼)

注意:~符号表示使用者目錄,比如 windows 上可能是C:\Users\使用者名,而 mac 上可能是/Users/使用者名。

上面的這些會作為 gradle 的變量,在後面的步驟中可以用來給應用簽名。

關于密鑰庫的注意事項:
一旦你在 Play Store 釋出了你的應用,如果想修改簽名,就必須用一個不同的包名來重新釋出你的應用(這樣也會丢失所有的下載下傳數和評分)。是以請務必備份好你的密鑰庫和密碼。

提示:如果你不想以明文方式儲存密碼,同時你使用的是 macOS 系統,那麼你也可以把密碼儲存到鑰匙串(Keychain)中。這樣一來你就可以省略掉上面配置中的後兩行(即 MYAPP_RELEASE_STORE_PASSWORD 和 MYAPP_RELEASE_KEY_PASSWORD)。

編輯你項目目錄下的android/app/build.gradle,添加如下的簽名配置:

隻需在終端中運作以下指令:

譯注:cd android表示進入 android 目錄(如果你已經在 android 目錄中了那就不用輸入了)。./gradlew assembleRelease在 macOS、Linux 或是 windows 的 PowerShell 環境中表示執行目前目錄下的名為 gradlew 的腳本檔案,且其運作參數為 assembleRelease,注意這個./不可省略;而在 windows 的傳統 CMD 指令行下則需要去掉./。

Gradle 的assembleRelease參數會把所有用到的 JavaScript 代碼都打包到一起,然後内置到 APK 包中。如果你想調整下這個行為(比如 js 代碼以及靜态資源打包的預設檔案名或是目錄結構等),可以看看android/app/build.gradle檔案,然後琢磨下應該怎麼修改以滿足你的需求。

注意:請確定 gradle.properties 中沒有包含_org.gradle.configureondemand=true_,否則會跳過 js 打包的步驟,導緻最終生成的 apk 是一個無法運作的空殼。

生成的 APK 檔案位于android/app/build/outputs/apk/release/app-release.apk,它已經可以用來釋出了。

在把發行版本送出到 Play Store 之前,你應該做一次最終測試。輸入以下指令可以在裝置上安裝發行版本:

$ react-native run-android --variant=release

注意--variant=release參數隻能在你完成了上面的簽名配置之後才可以使用。你現在可以關掉運作中的 packager 了,因為你所有的代碼和架構依賴已經都被打包到 apk 包中,可以離線運作了。

注意:在 debug 和 release 版本間來回切換安裝時可能會報錯簽名不比對,此時需要先解除安裝前一個版本再嘗試安裝。