在使用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 10000android
接下来的过程当中,我须要输入秘钥口令及其余的一些信息,一切都很完美,就在此时,抛出一个错误:windows
java.io.FileNoFoundException:my-release-key.keystore(拒绝访问。)
这个错误是说找不到my-release-key
这个文件,这是因为在安装个人JDK安装到了C盘,命令行在当前路径下没有写入文件的权限。这时,能够选择两种解决方法:react-native
以管理员身份运行cmd,执行上述命令。
有多种方法可使用,这里只叙述一种,在路径C:\Windows\System32
中找到cmd.exe
,右键以管理员身份运行。app
咱们能够将秘钥生成于其余盘,运行以下命令,将<MY_PATH>
替换成秘钥保存路径便可。函数
$ keytool -genkey -v -keystore my-release-key.keystore -alias
my-key-alias - keyalg RSA -keysize 2048 -validity 20000 -keystore
//my-release-key.keystore gradle
接下来,设置gradle
变量。官方文档有详细步骤,这里只作简单叙述ui
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包。运行以下命令:
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
下载有问题,解决方法有二。
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
。
写在最后,鉴于本人水平有限,如文章有错误之处,请不吝指正!(^▽^)