在安卓模拟器运行报错记录

报错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
]
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容