react-native run-android
命令会在Android模拟器中留下一条消息来终止。消息如下:
无法加载脚本。请确保您正在运行Metro服务器,或者已正确捆绑了软件包“ index.android.bundle”以进行发布。
我究竟做错了什么?
react-native run-android
命令会在Android模拟器中留下一条消息来终止。消息如下:
无法加载脚本。请确保您正在运行Metro服务器,或者已正确捆绑了软件包“ index.android.bundle”以进行发布。
我究竟做错了什么?
Answers:
您尚未启动捆绑器。在之前运行npm start
或react-native start
在项目的根目录中react-native run-android
。
这些步骤确实对我有帮助:
步骤1:在android / app / src / main / assets中创建目录
Linux命令:mkdir android/app/src/main/assets
第2步:将index.android.js
(在根目录中)重命名为index.js
(也许有一个index.js
文件,在这种情况下您不需要重命名),然后运行以下命令:
react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res
步骤3:
建立APK:react-native run-android
请使用最新版本的index.js。
请享用 :)
index.js
根目录中有一个文件,在这种情况下,您无需重命名
对我来说,此错误是由react-native的升级引起的
从Android 9.0(API级别28)开始,默认情况下禁用明文支持。
如果签出升级差异,则需要创建调试清单
android/app/src/debug/AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<application android:usesCleartextTraffic="true" tools:targetApi="28" tools:ignore="GoogleAppIndexingWarning" />
</manifest>
android:usesCleartextTraffic="true"
在主目录中指定AndroidManifest.xml
是否可行?
首先执行步骤4和5,然后您可以运行您的项目。如果没有得到结果(使用步骤4和5),请执行以下步骤
1-尝试降级您的Node版本(当前版本为12.13.1
)
choco uninstall nodejs
choco install nodejs --version 12.8
2-将npm模块(C:\Users\your user name\AppData\Roaming\npm
)的路径添加到系统变量而不是用户变量
3-通过使用命令全局安装本机反应
npm install -g react-native-cli
4-转到项目目录的根目录,然后运行以下命令:
react-native start
5-在项目的根目录中打开另一个终端,然后运行以下命令:
react-native run-android
编辑:
您正在使用Genymotion吗?如果是,请执行以下步骤:
完成上述步骤后,如果出现以下错误?
error Failed to launch emulator. Reason: No emulators found as an output of `emulator -list-avds`.
打开您的genymotion并转到:
genymotion menu -> Settings -> ADB -> 然后选择use custom android sdk tools(单击浏览以查找sdk位置)
最后,再次运行您的项目..
您可以尝试以下方法:
在您的AndroidManifest.xml上添加此行
<application
[...]
android:usesCleartextTraffic="true"
/>
[...]
</application>
我也发生了类似的问题。
显然,Mcafee阻止了8081端口。花了我几个小时来解决这个问题。
尝试运行:
react-native run-android --port=1234
当应用出现仿真器错误时,进入开发设置(Ctrl+ M)。
将“调试设备的服务器主机和端口”更改为“ localhost:1234”。
关闭应用程序,然后从应用程序抽屉中启动它。
如果您正确配置了所有内容,请尝试以下操作:
亚行反向tcp:8081 tcp:8081
为什么?“当RN打包程序运行时,您的浏览器中有一个活动的Web服务器,其位置为127.0.0.1:8081。在您进行更改时,正是从该服务器提供并刷新了应用程序的JS捆绑包。如果没有反向代理,您的电话将无法连接到该地址。”
所有学分归功于Swingline0
在尝试解决我的工作区中的此问题后,我找到了解决方案。
此错误是因为Metro使用NPM和Node版本的某些组合存在问题。
您有2种选择:
替代方法2: 转到此文件:\node_modules\metro-config\src\defaults\blacklist.js
并更改此代码:
var sharedBlacklist = [
/node_modules[/\\]react[/\\]dist[/\\].*/,
/website\/node_modules\/.*/,
/heapCapture\/bundle\.js/,
/.*\/__tests__\/.*/
];
并更改为:
var sharedBlacklist = [
/node_modules[\/\\]react[\/\\]dist[\/\\].*/,
/website\/node_modules\/.*/,
/heapCapture\/bundle\.js/,
/.*\/__tests__\/.*/
];
请注意,如果您运行
npm install
或,则yarn install
需要再次更改代码。
这对我有用在尝试了几种方法后,有用。
在文件中 node_modules\metro-config\src\defaults\blacklist.js
更换:
var sharedBlacklist = [
/node_modules[/\\]react[/\\]dist[/\\].*/,
/website\/node_modules\/.*/,
/heapCapture\/bundle\.js/,
/.*\/__tests__\/.*/
];
与:
var sharedBlacklist = [
/node_modules[\/\\]react[\/\\]dist[\/\\].*/,
/website\/node_modules\/.*/,
/heapCapture\/bundle\.js/,
/.*\/__tests__\/.*/
];
希望这可以帮助。
metro-config
使用\代替/来表示路径,这个答案建议修改它。 不要这样做。修改npm软件包意味着您的整个团队必须在他们的计算机上,在CI中,在登台中,在生产中以及每次Metro-config发布更新时都必须这样做。更好的方法是在GitHub上添加metro-config,提交修复程序,推送并提交PR以便为所有人修复它。
从Android 9.0(API级别28)开始,默认情况下禁用明文支持。
如果您正确执行正常的运行命令,那么这就是您要解决的问题
并像这样修改您的android清单文件。
<application
android:name=".MainApplication"
android:icon="@mipmap/ic_launcher"
android:usesCleartextTraffic="true" // add this line with TRUE Value.
android:theme="@style/AppTheme">
我对此的解决方案如下:
启动Metro服务器
$ react-native start
启动Android
$ react-native run-android
如果看到错误消息“端口8081已在使用中”,则可以终止该进程并重新运行
$ react-native start
我只想添加一个在这里未涵盖的非显而易见的可能性。我正在使用@ react-native-community / netinfo来检测网络变化,主要是网络状态。要测试网络关闭状态,需要关闭(仿真器上的)WIFI开关。这也有效地切断了仿真器和调试环境之间的桥梁。测试后,我没有重新启用WIFI,因为我不在电脑旁,回来后立即忘记了它。
其他人也可能会遇到这种情况,值得在采取任何其他严厉措施之前进行检查。
我遇到了同样的麻烦,对我来说,问题是adb不在正确的环境路径中,错误告诉您是地铁端口,而在adb中时,端口被杀死并重新启动。
注意:或取决于adb.exe在计算机中的位置
再次运行android build
$ react-native run-android
要么
$ react-native start
$ react-native run-android
我也遇到了这个问题。我解决了以下步骤。
在Environment Veritable中检查android sdk路径。
添加
ANDROID_HOME = C:\Users\user_name\AppData\Local\Android\Sdk
在系统变量
和
C:\Users\user_name\AppData\Local\Android\Sdk\platform-tools
路径系统变量
在下面的代码段中替换sharedBlacklist,
var sharedBlacklist = [
/node_modules[\/\\]react[\/\\]dist[\/\\].*/,
/website\/node_modules\/.*/,
/heapCapture\/bundle\.js/,
/.*\/__tests__\/.*/
];
在node_modules / metro-config / src / default / blacklist.js中
然后运行npx react-native run-android --port 9001
快乐编码..!
适用于我的解决方案如下:
var sharedBlacklist = [
/node_modules[\/\\]react[\/\\]dist[\/\\].*/,
/website\/node_modules\/.*/,
/heapCapture\/bundle\.js/,
/.*\/__tests__\/.*/
];
在Metro黑名单中更新此部分
var sharedBlacklist = [
/node_modules[\/\\]react[\/\\]dist[\/\\].*/,
/website\/node_modules\/.*/,
/heapCapture\/bundle\.js/,
/.*\/__tests__\/.*/
];
在遵循React Native 教程(在Linux上开发并定位到Android)时,我遇到了相同的问题。
此问题有助于我按照以下步骤解决问题。按以下顺序运行以下命令:
mkdir android/app/src/main/assets
react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res
react-native run-android
您可以通过将上述步骤放在其中的scripts
一部分中来自动执行上述步骤package.json
:
"android-linux": "react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res && react-native run-android"
然后,您npm run android-linux
每次都可以从命令行执行。
默认情况下,名为“ Metro Server”的微型JavaScript服务器在端口8081上运行。
您需要使该端口可用于此服务器启动。所以,
如何释放端口?
http://tenbull.blogspot.com/2019/05/how-to-kill-process-currently-using.html
如何使用Windows上的localhost上的端口杀死当前进程?
最重要的是,我按照facebook @ https://facebook.github.io/react-native/docs/getting-started的建议将节点版本从8.x升级到10.x(最新)。
对我来说,这个问题始于升级本机。升级是添加64位支持所必需的。
Before:
--------
Environment:
Node: 10.15.0
npm: 6.9.0
Watchman: 4.9.0
Xcode: Not Found
Android Studio: 3.4 AI-183.6156.11.34.5692245
Packages: (wanted => installed)
react: 16.0.0-alpha.12 => 16.0.0-alpha.12
react-native: ~0.55.2 => 0.55.4
react-native-cli: 2.0.1
After:
------
info
React Native Environment Info:
Binaries:
Node: 10.15.0
npm: 6.9.0
Watchman: 4.9.0
SDKs:
Android SDK:
API Levels: 23, 26, 27, 28
Build Tools: 27.0.3, 28.0.3
System Images: android-28 | Google APIs Intel x86 Atom
IDEs:
Android Studio: 3.4 AI-183.6156.11.34.5692245
Xcode: /undefined - /usr/bin/xcodebuild
npmPackages:
react: ^16.8.6 => 16.9.0
react-native: 0.59.9 => 0.59.9
npmGlobalPackages:
create-react-native-app: 2.0.2
react-native-cli: 2.0.1
另外,我为升级所做的一项重要更改是在../android/build/build.gradle中
android {
...
defaultConfig {
...
targetSdkVersion 28
...
}
...
}
尝试将build(.apk)上传到goole播放控制台时,在出现警告后,我不得不将targetSdkVersion从27更改为28。我几乎没有意识到这是上述错误的根本原因。立即使用@tom和@tinmarfrutos回答绝对有道理。
我通过将android:usesCleartextTraffic =“ true”添加到我的android / app / src / debug / AndroidManifest.xml中解决了该问题
该错误的可能性也是错误的路径,请检查一次
export ANDROID_HOME=/Users/microrentindia/Library/Android/sdk/
export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools
如果您已尝试上述解决方案中提到的所有内容,请尝试以下步骤:
react-native包--platform android --dev否--entry-file index.js --bundle-output android / app / src / main / assets / index.android.bundle --assets-dest android / app / src / main / res