在使用react-native 的整個過程當中,我深一腳淺一腳的走到今天,着實爲本身感到高興。在此記錄踩坑過程,阿門!html
官方文檔 中有完整打包apk步驟,咱們一步步來。java
首先,咱們須要使用keytool
生成一個私有祕鑰,在Windows上keytool
命令放在JDK的bin目錄中。也就是說,命令必須在JDK安裝的bin目錄下運行,命令以下:react
$ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-
alias -keyalg RSA -keysize 2048 -validity 10000
接下來的過程當中,我須要輸入祕鑰口令及其餘的一些信息,一切都很完美,就在此時,拋出一個錯誤:android
java.io.FileNoFoundException:my-release-key.keystore(拒絕訪問。)
這個錯誤是說找不到my-release-key
這個文件,這是因爲在安裝個人JDK安裝到了C盤,命令行在當前路徑下沒有寫入文件的權限。這時,能夠選擇兩種解決方法:windows
C:\Windows\System32
中找到cmd.exe
,右鍵以管理員身份運行。咱們能夠將祕鑰生成於其餘盤,運行以下命令,將<MY_PATH>
替換成祕鑰保存路徑便可。react-native
$ 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
變量。官方文檔有詳細步驟,這裏只作簡單敘述app
android/app
文件夾下編輯或建立~/.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包。運行以下命令:gradle
cd android && ./gradlew assembleRelease
在windows 系統下,可能沒法識別&&
命令,因此講上述命令分爲兩步:先運行cd android
,進入當前項目下的android
文件夾,而後運行./gradlew assembleRelease
,就在即將大功告成之際,報了以下錯誤:ui
Exception in thread "main" java.util.zip.ZipException: error in opening zip file
這是因爲gradle.zip
下載有問題,解決方法有二。
gradle-2.14.1-all.zip
刪除後從新運行上述命令,文件會從新下載。gradle-2.14.1-all.zip
文件對應位置在我的電腦上有所不一樣,在我這裏是C:\Users\wxl\.gradle\wrapper\dists\gradle-2.14.1-all\8bnwg5hd3w55iofp58khbp6yv
。
下載成功以後,再次鍵入命令,發現這最後一步仍是沒有邁過去。系統報錯:gradlew : 沒法將「gradlew」項識別爲 cmdlet、函數、腳本文件或可運行程序的名稱。請檢查名稱的拼寫,若是包括路徑,請確保路徑正確,而後再試一次。
官方文檔中有這樣一句:
./gradlew assembleRelease
在macOS、Linux或是windows的PowerShell環境中表示執行當前目錄下的名爲gradlew的腳本文件,且其運行參數爲assembleRelease,注意這個./不可省略;而在windows的傳統CMD命令行下則須要去掉./
。
因此我在運行時,直接運行gradlew assembleRelease
,實際上這樣反而會報錯,正確的命令就是./gradlew assembleRelease
。這一步僅做爲參考,可能和windows的系統版本有關。
此次,打包順利完成,如圖就是咱們所打包出來的apk,生成的APK文件位於android/app/build/outputs/apk/app-release.apk
。
寫在最後,鑑於本人水平有限,如文章有錯誤之處,請不吝指正!(^▽^)