Taro打包Android apk过程详解
作者:厦门在乎科技 发布时间:2022-01-31 02:55:27
首先,我们使用使用命令创建模板项目,创建的命令如下。
taro init myApp
然后,使用 yarn 或者 npm install安装依赖包,并使用下面的命令编译Taro项目。
yarn dev:rn
启动后会开启一个监听的进程。
不过,细心的你可能会发现,使用taro init命令初始化的项目是没有原生模块支持的,原来Taro使用了一个壳子工程,首先使用下面的命令下载壳子工程taro-native-shell,如下所示。
git clone git@github.com:NervJS/taro-native-shell.git
在taro-native-shell个目录使用 yarn 或者 npm install 安装依赖,并使用下面的命令启动壳子工程。
react-native run-android
不过,启动后报了如下的错误:
error: bundling failed: NotFoundError: Cannot find entry file index.js in any of the roots: ["/Users/mac/Taro/work/taro-yanxuan"]
at DependencyGraph.getAbsolutePath (/Users/mac/Taro/work/taro-yanxuan/node_modules/metro/src/node-haste/DependencyGraph.js:317:11)
at /Users/mac/Taro/work/taro-yanxuan/node_modules/metro/src/DeltaBundler/DeltaCalculator.js:280:416
at Generator.next (<anonymous>)
at step (/Users/mac/Taro/work/taro-yanxuan/node_modules/metro/src/DeltaBundler/DeltaCalculator.js:11:445)
at /Users/mac/Taro/work/taro-yanxuan/node_modules/metro/src/DeltaBundler/DeltaCalculator.js:11:605
at processTicksAndRejections (internal/process/task_queues.js:97:5)
上面报错的意思是找不到RN的入口文件index.js。对于这个问题,只需要将 MainApplication.java 里面的 getJSMainModuleName 修改改为:
rn_temp/index
即可,因为Taro打的包在rn_temp目录下,最新的 react-native-shell 已修复。
修改后,重新执行react-native run-android命令。
不过,由于项目是0.60.0版本以下的,所以我在运行的时候又报了下面的错误。
React Native version mismatch
javascript version 0.55.4
Native version 0.64.0
这是因为react-native-shell 是0.64.0,而我的RN项目是0.55.4,所以只能升级RN项目或者降级
react-native-shell 。如果没有任何错误,接下来就可以制作离线的apk包了。
首先,你需要生成Android的密钥文件,关于如何生成密钥文件,可以自行查找相关的资料,把生成的密钥文件拷贝到工程中的android/app文件夹中。然后,在在/android/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=*****
然后,在app/build.gradle文件中添加如下代码。
release {
if (project.hasProperty('MYAPP_UPLOAD_STORE_FILE')) {
storeFile file(MYAPP_UPLOAD_STORE_FILE)
storePassword MYAPP_UPLOAD_STORE_PASSWORD
keyAlias MYAPP_UPLOAD_KEY_ALIAS
keyPassword MYAPP_UPLOAD_KEY_PASSWORD
}
}
接下来,把前面生成的rn_temp文件复制到taro-native-shell壳子工程的android文件夹下,修改MainApplication里面的代码,如下所示。
@Override
protected String getBundleAssetName() {
return "./android/rn_temp/index";
}
};
然后,在android/app/build.gradle中修改添加如下代码。
project.ext.react = [
entryFile: "android/rn_temp/index.js",
cliPath:"node_modules/react-native/cli.js"
]
然后,执行如下命令执行生成index.bundle 文件,如下所示。
node ./node_modules/react-native/local-cli/cli.js bundle --entry-file ./android/rn_temp/index.js --bundle-output ./android/rn_temp/index.bundle --assets-dest ./rn_bundle --dev false
最后,在Android的根目录下执行打包命令。
./gradlew assembleRelease
打包完成后,就可以在android/app/build/outputs中看到签名包。
来源:https://blog.csdn.net/weixin_41996102/article/details/119868143


猜你喜欢
- 本文实例讲述了Android编程获取网络时间的方法。分享给大家供大家参考,具体如下:在网上看到的最常见的方式有:public static
- 前言:使用 interrupt 来通知线程停止运行,而不是强制停止!普通情况停止线程public class Right
- 随着C语言的学习慢慢结束,博主也要开始学习一门新语言了,那就是java。所以博主将会开启一个新的关于java的专栏,所以想要慢慢和我一起学习
- 本文主要介绍了隐式Intent匹配目标组件的规则,若有叙述不清晰或是不准确的地方希望大家指出,谢谢大家: )1. Intent简
- public class PullToLoadListView extends ListView implements OnScrollLi
- 1.鼠标右击我的电脑–》属性–》高级系统设置2.把下面的变量名称和电脑文件的本地路径填进去即可(注意:变量值后面后面不要带分号)jdk环境变
- Looper是什么用于为线程运行消息循环的类。默认情况下,线程没有与之关联的消息循环。要创建一个,在要运行循环的线程中调用 prepare(
- 可能有些同学不明白,为啥要图片反转(不是旋转哦),我们在游戏开发中,为了节省图片资源(空间) 有可能会使用到图片反转,例如,一个人物图片,面
- 先给大家展示下效果图,如果大家感觉还不错,请参考实现代码很简单的一个例子,点击刷新验证码,刷新当前显示的验证码,点击确定,如果输入的和显示的
- java中的方法重载和方法重写有很多区别。 下面给出了方法重载和方法覆盖之间的差异列表:编号方法重载方法重写1方法重载用于提高程序的可读性。
- @Entity和@Table注解的用法@Entity注解@Entity注解和@Table注解都是Java Persistence API中定
- c#判断代码是否执行超时一、使用委托delegate void dg();dg dgCase;void method(){ &n
- 由于众所周知的原因,maven的库在中国大陆非常慢。我在百度上搜到的大部分文章都是直接在~/.m2/settings.xml 加入以下内容&
- HashMap的keySet()方法比较简单,作用是获取HashMap中的key的集合。虽然这个方法十分简单,似乎没有什么可供分析的,但真正
- 首先是.select在MP查询中,默认查询所有的字段,如果有需要也可以通过select方法进行指定字段。其中要注意的细节:wrapper.s
- Spring Cloud 本地属性覆盖注:使用版本版本 spring cloud F SR2当前在项目中使用了Spring cloud 配置
- 本文实例为大家分享了java模拟进度计量器的具体代码,供大家参考,具体内容如下一、程序说明1、自定义模拟血压计外观图class M
- 一般表单数据分为两类<form method="post" action="${pageContext.
- 上一节我们完成了使用DataGrid显示所有商品信息,这节我们开始添加几个功能:添加、更新、删除和查询。首先我们实现下前台的显示,然后再做后
- 前言:最近涉及到和QQ打交道,定义所有的好友一共只能有300条消息,如果一次性从数据库读取300条或者更多,界面会有细微的卡顿.所以考虑了下