报错1
Command failed with ENOENT: adb shell am start -n com.awesomeproject/com.awesomeproject.MainActivity -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
需要配置环境变量(还以为是自动配置的),这个直接指路官方文档。搭建开发环境 · React Native 中文网
不要相信什么安卓模拟器需要手动开。也是可以自动打开的。不过,前提是需要在安卓斯丢丢里面下载好虚拟设备-创建和管理虚拟设备 | Android Studio | Android Developers (google.cn)
3. 配置 ANDROID_HOME 环境变量
React Native 需要通过环境变量来了解你的 Android SDK 装在什么路径,从而正常进行编译。
具体的做法是把下面的命令加入到 shell 的配置文件中。如果你的 shell 是 zsh,则配置文件为~/.zshrc
,如果是 bash 则为~/.bash_profile
(可以使用echo $0
命令查看你所使用的 shell。):
# 如果你不是通过Android Studio安装的sdk,则其路径可能不同,请自行确定清楚
export ANDROID_HOME=/Users/你的用户名/Library/Android/sdk
export PATH=$PATH:$ANDROID_HOME/emulator
export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$ANDROID_HOME/tools/bin
export PATH=$PATH:$ANDROID_HOME/platform-tools
报错2
Unable to load script. Make sure you're eitherrunning Metro (run 'npx react-native start") or thatyour bundle 'index.android.bundle' is packagedcorrectly for release. iniLoadScriptFromAssets
模拟器打开报错图
报错原因:没有找到index.android.bundle。
控制台先看看端口号----8081,直接在浏览器访问http://localhost:8081
【原理:每启动一个react-native 项目,会自动用node启动一个后台服务 ,app访问这个服务来获取bundle。出现unable to load script的原因,就是因为app访问不到这个后台服务】
image.png
是可以访问到——说明服务已经跑起来了。
!!!再通过本机IP:8081访问,如果访问不了,大概率是端口被占用了
# 查看端口使用情况及进程
lsof -i tcp:8081
# 杀掉多余进程
kill -9 pid
# 关掉终端并重跑服务
react-native start
image.png
其他方法:
解决方法
方法一(未试,但是其他人用这个方法解决了)
- 创建android/app/src/main/assets文件夹
- 执行命令
react-native bundle --platform android --dev false --entry-file index.android.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res
方法二(试了,无用)
- 修改 项目目录/android/app/build.gradle,如果没有这个声明,直接在最外层添加
- 主要是设置bundleInDebug等于true,使得开发时也会打包index.android.bundle
project.ext.react = [
bundleAssetName: 'index.android.bundle',
bundleInDebug: true,
bundleInAlpha: true,
bundleInBeta : true
]