React Native 打包apk的那些坑
在使用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盘,命令行在当前路径下没有写入文件的权限。这时,可以选择两种解决方法:
- 以管理员身份运行cmd,执行上述命令。
有多种方法可以使用,这里只叙述一种,在路径C:\Windows\System32
中找到cmd.exe
,右键以管理员身份运行。 -
我们可以将秘钥生成于其他盘,运行如下命令,将
<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
变量。官方文档有详细步骤,这里只做简单叙述
- 将刚刚生成的秘钥放到项目下的
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
。
写在最后,鉴于本人水平有限,如文章有错误之处,请不吝指正!(^▽^)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。