React Native 打包apk的那些坑

verfallen發表於2018-06-11

在使用react-native 的整個過程中,我深一腳淺一腳的走到今天,著實為自己感到高興。在此記錄踩坑過程,阿門!

官方文件 中有完整打包apk步驟,我們一步步來。

首先,我們需要使用keytool生成一個私有祕鑰,在Windows上keytool命令放在JDK的bin目錄中。也就是說,命令必須在JDK安裝的bin目錄下執行,命令如下:

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

接下來的過程中,我需要輸入祕鑰口令及其他的一些資訊,一切都很完美,就在此時,丟擲一個錯誤:

java.io.FileNoFoundException:my-release-key.keystore(拒絕訪問。)
複製程式碼

圖片描述

這個錯誤是說找不到my-release-key這個檔案,這是由於在安裝我的JDK安裝到了C盤,命令列在當前路徑下沒有寫入檔案的許可權。這時,可以選擇兩種解決方法:

  1. 以管理員身份執行cmd,執行上述命令。 有多種方法可以使用,這裡只敘述一種,在路徑C:\Windows\System32中找到cmd.exe,右鍵以管理員身份執行。

  2. 我們可以將祕鑰生成於其他盤,執行如下命令,將<MY_PATH>替換成祕鑰儲存路徑即可。

    $ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias - keyalg RSA -keysize 2048 -validity 20000 -keystore /<MY_PATH>/my-release-key.keystore

接下來,設定gradle變數。官方文件有詳細步驟,這裡只做簡單敘述

  1. 將剛剛生成的祕鑰放到專案下的android/app資料夾下

  2. 編輯或建立~/.gradle/gradle.properties,將以下示例程式碼新增進去,注意要將******部分替換成相應密碼

    MYAPP_RELEASE_STORE_FILE=my-release-key.keystore MYAPP_RELEASE_KEY_ALIAS=my-key-alias MYAPP_RELEASE_STORE_PASSWORD=***** MYAPP_RELEASE_KEY_PASSWORD=*****

最後,生成發行apk包。執行如下命令:

cd android && ./gradlew assembleRelease

在windows 系統下,可能無法識別&&命令,所以講上述命令分為兩步:先執行cd android,進入當前專案下的android資料夾,然後執行./gradlew assembleRelease,就在即將大功告成之際,報瞭如下錯誤:

Exception in thread "main" java.util.zip.ZipException: error in opening zip file
複製程式碼

圖片描述

這是由於gradle.zip下載有問題,解決方法有二。

  1. gradle-2.14.1-all.zip刪除後重新執行上述命令,檔案會重新下載。
  2. 手動下載檔案,將其放到對應資料夾

gradle-2.14.1-all.zip檔案對應位置在個人電腦上有所不同,在我這裡是C:\Users\wxl\.gradle\wrapper\dists\gradle-2.14.1-all\8bnwg5hd3w55iofp58khbp6yv

下載成功之後,再次鍵入命令,發現這最後一步還是沒有邁過去。系統報錯:gradlew : 無法將“gradlew”項識別為 cmdlet、函式、指令碼檔案或可執行程式的名稱。請檢查名稱的拼寫,如果包括路徑,請確保路徑正確,然後再試一次。

clipboard.png

官方文件中有這樣一句:

./gradlew assembleRelease在macOS、Linux或是windows的PowerShell環境中表示執行當前目錄下的名為gradlew的指令碼檔案,且其執行引數為assembleRelease,注意這個./不可省略;而在windows的傳統CMD命令列下則需要去掉./

所以我在執行時,直接執行gradlew assembleRelease,實際上這樣反而會報錯,正確的命令就是./gradlew assembleRelease。這一步僅作為參考,可能和windows的系統版本有關。

clipboard.png

這次,打包順利完成,如圖就是我們所打包出來的apk,生成的APK檔案位於android/app/build/outputs/apk/app-release.apk

clipboard.png

寫在最後,鑑於本人水平有限,如文章有錯誤之處,請不吝指正!(^▽^)

相關文章