React Native 打包apk的那些坑

砾歌协程
• 阅读 4792

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(拒绝访问。)

React Native 打包apk的那些坑

这个错误是说找不到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

React Native 打包apk的那些坑

这是由于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、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。

React Native 打包apk的那些坑

官方文档中有这样一句:

./gradlew assembleRelease在macOS、Linux或是windows的PowerShell环境中表示执行当前目录下的名为gradlew的脚本文件,且其运行参数为assembleRelease,注意这个./不可省略;而在windows的传统CMD命令行下则需要去掉./

所以我在运行时,直接运行gradlew assembleRelease,实际上这样反而会报错,正确的命令就是./gradlew assembleRelease。这一步仅作为参考,可能和windows的系统版本有关。

React Native 打包apk的那些坑

这次,打包顺利完成,如图就是我们所打包出来的apk,生成的APK文件位于android/app/build/outputs/apk/app-release.apk

React Native 打包apk的那些坑

写在最后,鉴于本人水平有限,如文章有错误之处,请不吝指正!(^▽^)

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
3年前
VBox 启动虚拟机失败
在Vbox(5.0.8版本)启动Ubuntu的虚拟机时,遇到错误信息:NtCreateFile(\\Device\\VBoxDrvStub)failed:0xc000000034STATUS\_OBJECT\_NAME\_NOT\_FOUND(0retries) (rc101)Makesurethekern
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Stella981 Stella981
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Easter79 Easter79
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Stella981 Stella981
3年前
Node.js 中使用 ECDSA 签名遇到的坑
文/Fenying最近有个朋友问我关于Node.js下使用ECDSA的问题,主要是使用Node.js的Crypto模块无法校验网络传输过来的签名结果。在踩坑无数后,终于搞清楚了原因。坑0x00:签名输出格式在排除了证书、消息不一致的可能之后,我开始对比使用Node.js签名的结果与网络传输过来的签
linbojue linbojue
1年前
超完整的Electron打包签名更新指南,这真是太酷啦!
大家好,我是多喝热水。在踩了数不清的坑之后,终于从0到1完成了一个桌面端应用,但万万没想到,最最痛苦的还不是开发过程,而是开发完成后的打包签名阶段,这真是踩坑踩麻了!!!超完整的Electron打包签名更新指南,这真是太酷啦!ok,踩坑归踩坑,收获也是不小