我正在尝试第一次在我的设备(Android 4.2.2)上运行我的第一个 React Native 项目。
我得到:
无法从资产 index.android.bundle 加载脚本
我使用的命令:
cd (项目目录) react-native start react-native run-android
Loading dependency graph...
更改为 Loading dependency graph, done
,然后在应用程序上点击重新加载。
mkdir ... /assets && react-native bundle --platform..
不能完全解决这个问题,请检查:stackoverflow.com/a/55511803/10139109
我在关注 React Native tutorial(在 Linux 上开发并针对 Android)时遇到了同样的问题。
此 issue 帮助我通过以下步骤解决了问题。
(在项目目录中) 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
您可以通过将上述步骤放置在 package.json
的 scripts
部分来自动执行这些步骤,如下所示:
"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
。
如果您在物理设备上运行应用程序并收到此错误
unable to load script from assets index.android.bundle
尝试运行命令:
adb reverse tcp:8081 tcp:8081
它对我有用...
我花了几个小时试图解决这个问题。我的问题不是特定于 Windows,而是特定于 Android。
访问开发服务器在本地和模拟器的浏览器中工作。唯一不起作用的是访问应用程序中的开发服务器。
从 Android 9.0(API 级别 28)开始,默认情况下禁用明文支持。
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
<uses-permission android:name="android.permission.INTERNET" />
<application
...
android:usesCleartextTraffic="true"
...>
...
</application>
</manifest>
查看更多信息:https://stackoverflow.com/a/50834600/1713216
targetSdkVersion
升级到 28
后的问题。
使用 npm 版本 4.3.0 react-native-cli 版本 2.01 react-native 版本 0.49.5
在项目目录中,
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 /主/资源
react-native run-android
文件名已从 index.android.js 更改为 index.js
index.js
而不是 index.android.js
或 index.ios.js
sudo 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
我在使用真正的 android 设备时也遇到过同样的问题。
解决方案:基于 Niltoid 的 answer
找到您的本地 IP 打开应用程序并摇动您的 Android 设备 Go Dev Setting and>Debug Server... 粘贴您的 IP 和端口; XXXX:8088"(其中 X 是您的本地 IP)
对于 Mac 用户:打开您的网络首选项,在这里您将获得您的本地 IP。
如果您使用的是 Windows,请按以下方式运行命令,或者如果您收到错误“找不到条目文件 index.android.js”
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
在 mac 中遇到了同样的问题,花了 2 天后,我终于可以正常工作了。
从 Emulator cellular data was turned off
开始,我得到了 unable to load script from assets index.android.bundle make sure your bundle is running
。
通过执行此程序包服务器确保您的 Emulator cellular data is turned on
能够捆绑 index.android.js
。希望它对处于开发阶段的人有所帮助。
Emulator cellular data is turned on
?哪里是?虚拟设备?真机?
您可以按照 official page 中提到的说明解决此问题。此问题发生在真实设备上,因为 JS 包位于您的开发系统中,而您真实设备中的应用程序不知道它的位置。
react-native run-android
修复它
我已经有同样的问题好几个月了。我最初使用@Jerry 的解决方案,但这是一个错误的解决方案,因为它没有完全解决问题。相反,它所做的是将每个构建都视为生产构建,这意味着您在应用程序中所做的任何细微更改都意味着需要重新构建整个应用程序。
虽然这是一个临时解决方案,但从长远来看,它的效果非常糟糕,因为您不再能够利用 React Native 的惊人开发工具,例如热重载等。
一个合适的解决方案如下所示:
在您的 MainApplication.java
文件中,替换以下内容:
@Override
public boolean getUseDeveloperSupport() {
return BuildConfig.DEBUG;
}
和
@Override
public boolean getUseDeveloperSupport() {
return true;
}
由于某种原因 BuildConfig.DEBUG
总是返回 false 并导致资产目录中的捆绑文件。
通过手动将此设置为 true,您将强制应用程序使用打包程序。这在生产中不起作用,因此请务必将其更改为 false 或默认值。
别忘了也跑
$ adb reverse tcp:8081 tcp:8081
1 转到您的项目目录并检查此文件夹是否存在 android/app/src/main/assets
如果存在,则删除两个文件,即 index.android.bundle 和 index.android.bundle.meta 如果文件夹 assets 不存在,则在那里创建 assets 目录。
2.从你的项目根目录做
cd android && ./gradlew clean
3.最后,导航回根目录并检查是否有一个名为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
如果有两个文件,即 index.android.js 和 index.ios.js 然后运行这个 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 现在运行 react-native run-android
现在运行 react-native run-android
操作系统:Windows
尝试上述两种方法后解决此问题的另一种方法(因为我安装的 SDK 不在 DEFAULT LOCATION 中,例如 C:\users\"user_name"\appdata\local\sdk)
如果您注意到命令行宣布:“'adb' 不被识别为内部或外部命令......”
所以这就是我克服的方法: 示例:我在 D:\Android\sdk 中安装了 SDK 所以我将在系统变量中插入路径 2 多行:
D:\Android\sdk\tools
D:\Android\sdk\platform-tools
(如果您不知道如何编辑路径系统变量,这里是主题:https://android.stackexchange.com/questions/38321/what-do-i-type-in-path-variable-for-adb-server-to-start-from-cmd/38324)
然后我再次运行 cmd:react-native run-android
它对我有用。
就我而言,我已从 MainApplication.java 中删除了以下行。 (这是我之前错误添加的。):-
导入 com.facebook.react.BuildConfig;
之后清理项目并点击命令
react-native run-android
我也遇到了这个问题,因为当我在模拟器上运行项目时它工作正常,但在真实设备上它给出了这个错误。所以我通过以下解决方案解决了这个问题
第一步:首先打开 cmd 并转到您的 SDK 管理器 Platform-tools 文件夹
cd C:Development\Android\Sdk\Platform-tools
第二步:现在运行这个命令:
adb devices
执行此命令后,检查命令提示符中列出的设备
第三步:现在运行这个
adb reverse tcp:8081 tcp:8081
现在您的设置已完成
第 4 步:转到您的项目目录并运行此命令
react-native run-android
对于IOS:
在终端中:
cd ios
删除构建文件夹: rm -r build
再次运行: react-native run-ios
或者,您可以打开 Finder,导航到 YOUR_PROJECT/ios 并删除构建文件夹。
然后再次运行:react-native run-ios
对于安卓:
在终端中:
cd android/app
删除构建文件夹: rm -r build
再次运行: react-native run-android
或者,您可以打开 Finder,导航到 YOUR_PROJECT/android/app 并删除构建文件夹。
然后再次运行:react-native run-android
android/app/bin
文件夹也有效。我直接从 Android Studio 构建了项目,而不是运行 react-native run-android
,它似乎构建了一些错误,我不得不手动删除。
对于这个问题,我只是通过运行来解决它:
react-native start
然后
adb reverse tcp:8081 tcp:8081
在命令行上。然后我可以运行:
react-native run-android
所以我不会浪费时间跑:
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
每次。
Ubuntu
第一次,我使用 react-native init project-name
创建了新应用。我得到了同样的错误。所以我执行以下步骤来解决这个问题。
在我的情况下,首先运行 sudo chown user-name-of-pc /dev/kvm 。从 Android 手机调试时,选择使用 USB 传输照片 (PTP)。在 project-name/android/app/src/main 中创建文件夹资产,确保 index.js 在您的项目根目录中可用,然后在 cd project-name 目录之后从控制台运行以下命令。
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 /主/资源
或者对于 index.android.js 然后
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-studio/bin 目录中运行命令 ./studio.sh。它将打开 Android Studio。运行命令 react-native run-android。
https://i.stack.imgur.com/16TBn.jpg
确保 Metro Builder 正在运行以使您的物理设备和服务器同步
首先,运行这个命令来运行 Metro Builder
npm 开始
然后你可以在 react native 中开始构建
react-native run-android
这次他们应该没有错误。如果您希望您的代码在更改时实时重新加载。摇动您的设备,然后点击启用实时重新加载
确保已将 /path/to/sdk/platform-tools 添加到路径变量中。
当您运行 react-native run-android 时,它会运行 adb reverse tcp:< device-port > tcp:< local-port > 命令将请求从您的设备转发到在您计算机上本地运行的服务器。如果找不到 adb,您将看到类似的内容。
/bin/sh: 1: adb: not found
Starting the app (.../platform-tools/adb shell am start -n
com.first_app/com.first_app.MainActivity...
Starting: Intent { cmp=com.first_app/.MainActivity }
它可能是由 React Native 项目代码库中未链接的资产引起的,例如,当您重命名项目应用程序/捆绑包 ID 或添加外部包时未正确链接它。
只需在您的项目根目录中尝试:
react-native link
react-native run-android
如果您在主 AndroidManifest.xml
中定义 android:networkSecurityConfig
,也会出现此问题。调试 AndroidManifest.xml
中的 android:usesCleartextTraffic="true"
将被忽略。
要解决此问题,您必须将应用程序配置为允许到 localhost 的 http 流量。
创建文件 android/src/debug/res/xml/network_security_config.xml
:
<?xml version="1.0" encoding="utf-8" ?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">localhost</domain>
</domain-config>
</network-security-config>
并在 android/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:networkSecurityConfig="@xml/network_security_config"
tools:targetApi="28"
tools:ignore="GoogleAppIndexingWarning" />
</manifest>
如果在运行 react-native run-android
命令时,跟踪的第二行是
JS server not recognized, continuing with build...
这意味着应用程序的打包程序无法启动,如果没有一些额外的步骤,应用程序将无法加载。请注意,跟踪结束仍然报告成功:
BUILD SUCCESSFUL
问题可能是一些端口冲突(在我的情况下,它是我完全忘记的默认 IIS 站点)。该问题的另一种表现形式是无法在 Chrome 中打开 http://localhost:8081/debugger-ui
URL。
解决端口冲突后,跟踪将报告
Starting JS server...
然后将打开一个额外的节点窗口 (node ...cli.js start
),应用程序将成功加载/重新加载。
之后,您应该可以使用 http://localhost:8081/debugger-ui
在 Chrome 中打开调试控制台。
即使在模拟器上运行,我也遇到了同样的问题。我做了一个快速的解决方法,以便我可以拥有正常的开发工作流程。
private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
@Override
public boolean getUseDeveloperSupport() {
// return true here to load JS from the packager
// BuildConfig.DEBUG for me was set to false which meant it
// it was always trying to load the assets from assets folder.
return true;
}
@Override
protected String getJSMainModuleName() {
return "index";
}
};
在尝试进行生产构建时可能必须恢复更改。
我在我的 mac 上遇到了 McAfee 阻塞端口 8081 的问题,不得不将其更改为 8082。
首先运行你的包服务器:
react-native start --port 8082
打开另一个终端,像往常一样启动安卓应用:
react-native run-android
完成后,现在重写 adb 隧道的 tcp 端口:
adb reverse tcp:8081 tcp:8082
查看 adb tcp 隧道列表:
adb reverse --list
您现在应该会看到一条温馨的消息:
(reverse) tcp:8081 tcp:8082
转到您的应用程序并重新加载,完成!
PS:不要更改应用程序开发设置中的任何内容,如果您添加了“localhost:8082”,只需将其删除,将其留空。
编辑:对于所有 McAfee 受害者,如果您具有 root 访问权限,则有更简单的解决方案,只需暂时终止位于端口 8081 上的 McAfee 进程,根本不需要更改端口:
sudo launchctl remove com.mcafee.agent.macmn
我认为你没有安装纱线尝试用巧克力或其他东西安装它。它应该在创建项目之前安装(react-native init 命令)。
无需创建资产目录。
如果不起作用,请回复。
编辑: 在最新版本的 react-native 中,他们已经修复了它。如果您想完全摆脱这个只是卸载节点(要完全卸载 Completely remove node,请参阅此链接)并重新安装节点,react-native-cli 然后创建您的新项目。
不要忘记在模拟器设备中打开互联网,我解决了这个错误,它运行完美:VI 收到此错误,因为我关闭互联网以测试 NetInfo:D
这是一条一般性的错误信息,您可能在 react native 应用程序开发过程中遇到过。因此,在本教程中,我们将为这个问题提供解决方案。
问题描述:无法从 windows 上的资产 index.android.bundle 加载脚本 无法从 windows 上的资产 index.android.bundle 加载脚本
请按照以下步骤解决上述问题:
第 1 步:在项目目录中创建“assets”文件夹现在在项目目录中创建 assets 文件夹,即“MobileApp\android\app\src\main”。您可以手动创建资产文件夹:
< 或 >
您也可以使用命令创建文件夹。命令:mkdir android/app/src/main/assets
第 2 步:运行您的 React Native 应用程序让我们运行以下命令在模拟器或物理设备中运行 React Native 应用程序。
切换到项目目录。 cd 移动应用程序
运行以下有助于捆绑您的 android 应用程序项目的命令。
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 /主/资源
运行最后一步以在模拟器或物理设备中运行本机应用程序。 react-native run-android
< 或 >
您也可以将最后两个命令合二为一,在这种情况下,您只需执行一次命令。
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
< 或 >
您可以通过将它们放在 package.json 的脚本部分中来自动化上述步骤,如下所示:
"android-android": "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"
如果一切设置正确,您应该很快就会看到您的新应用程序在您的 Android 模拟器中运行。
我刚刚遇到完全相同的问题并解决了它。所以希望能有所帮助。
假设您正在组装发布应用程序包 (.apk)
检查您的资产文件夹是否存在?:\android\app\src\main\assets 如果不存在,请创建一个。执行“Assemble Release”后,检查该文件夹(\android\app\src\main\assets)是否有任何东西,如果没有,找到js bundle文件(index.android.bundle),它应该在多个以下路径:*a)\android\app\build\intermediates\merged_assets\release\out\index.android.bundle b)\android\app\build\intermediates\merged_assets\release\mergeReleaseAssets\out\index.android。包 c)\android\app\build\intermediates\assets\release\index.android.bundle d)\android\app\build\generated\assets\react\release\index.android.bundle*
更好的方法是使用“Everything”来搜索文件名:index.android.bundle。
然后将此文件复制到你的资产文件夹(\android\app\src\main\assets\index.android.bundle)回到powershell或命令控制台,执行:
react-native run-android --variant=release
它应该工作。
祝你好运!
我花了半天时间解决这个问题......
如果您使用的是 28.0.0 以上的 API 目标版本,那么您可能会遇到此问题。
只需添加这一行
android:usesCleartextTraffic="true"
在您的清单应用程序块中。
清单应用程序块代码。
<application
....
android:usesCleartextTraffic="true"
.../>
实际上,在我的情况下(React-native
版本 0.61.5 并尝试在设备上安装调试 APK)没有一个答案对我有帮助,我的解决方案是像这样将 bundleInDebug: true
添加到 android/app/build.gradle
:
project.ext.react = [
entryFile: "index.js",
enableHermes: true, // clean and rebuild if changing
bundleInDebug: true
]
index.android.js
怎么办?每次在终端中,我们都必须插入命令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
Loading dependency graph...
并且需要太多时间。仅供参考,我正在使用 ubuntu 14.04index.js
,而不是App.js