【发布时间】:2017-07-13 08:00:14
【问题描述】:
当我运行 react-native run-android 时,它只会在模拟器中安装旧版本的应用程序,并且不会显示更改。
欢迎提出任何建议。
【问题讨论】:
-
删除旧版本,构建新版本然后安装。
-
我这样做了,但还是有问题。
标签: react-native
当我运行 react-native run-android 时,它只会在模拟器中安装旧版本的应用程序,并且不会显示更改。
欢迎提出任何建议。
【问题讨论】:
标签: react-native
似乎每次将资源编译到 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
【讨论】:
你试过react-native start --reset-cache吗?
或者你可以尝试重置MAX_WAIT_TIME(我找到了here)。
在文件\node_modules\node-haste\lib\FileWatcher\index.js
您应该增加MAX_WAIT_TIME 变量(例如:360000)并更改函数_createWatcher.
发件人:
key: '_createWatcher',
value: function _createWatcher(rootConfig) {
var watcher = new WatcherClass(rootConfig.dir, {
glob: rootConfig.globs,
dot: false
});
return new Promise(function (resolve, reject) {
var rejectTimeout = setTimeout(function () {
return reject(new Error(timeoutMessage(WatcherClass)));
}, MAX_WAIT_TIME);
watcher.once('ready', function () {
clearTimeout(rejectTimeout);
resolve(watcher);
});
});
}
收件人:
key: '_createWatcher',
value: function _createWatcher(rootConfig) {
var watcher = new WatcherClass(rootConfig.dir, {
glob: rootConfig.globs,
dot: false
});
return new Promise(function (resolve, reject) {
const rejectTimeout = setTimeout(function() {
reject(new Error([
'Watcher took too long to load',
'Try running `watchman version` from your terminal',
'https://facebook.github.io/watchman/docs/troubleshooting.html',
].join('\n')));
}, MAX_WAIT_TIME);
watcher.once('ready', function () {
clearTimeout(rejectTimeout);
resolve(watcher);
});
});
}
希望对您有所帮助! :D
【讨论】:
sudo lsof -i :8081杀死应用程序侦听端口8081之前
尝试使用上述解决方案,不确定它们是否有助于最终版本,但最终有效的是在 /android 文件夹中运行 ./gradlew clean assembleRelease。
【讨论】:
检查 VS 代码可能未突出显示的任何语法错误。
在拉我的头发三个小时后,我发现它没有提醒我注意对象中的 = 而不是 :。
【讨论】:
我在使用 iOS 时遇到了这种情况,以下是我为恢复正常工作而采取的步骤:
$ react-native start --reset-cache
$ rm -rf ios/build
当您运行 yarn ios 时,单独执行这些操作将迫使 RN 从头开始重建 iOS 版本,因此对于大多数其他运行 iOS 的人来说,这可能是答案。
在我最近遇到的这个问题中,我发现在强制新构建后,metro-bundler 会抛出以下错误:Metro Bundler 遇到错误:SHA-1 for file
有了这个,我必须刷新我的 node_modules 才能完全解决问题。
$ rm -r node_modules
$ yarn
【讨论】:
对我来说,我只是重新启动了我的系统。或者干脆停止 react-native 服务器,然后重新运行您的应用。
【讨论】:
通过从图标栏拖动来使用 expo 的重新加载选项
【讨论】:
解决此问题的另一种方法是在 Web 浏览器控制台中运行此命令。我在使用 React Native for Windows 时遇到了这个问题,并且上述解决方案都不适用于我。
localStorage.clear()
【讨论】:
问题是 projectroot > ios > main.jsbundle 没有像它应该随着代码更改/构建而更新。要获取最新信息,请删除该文件。然后在终端(只在这里,不依赖自动创建),放: react-native bundle --entry-file index.js --platform ios --dev false --bundle-output ios/main.jsbundle --assets-dest ios/assets
这将创建一个当前的 main.jsbundle,用于创建应用程序以及用于创建存档的内容。问题是,如果你更新你的代码,你必须再做一次。
如果需要,您可以手动编辑 main.jsbundle。我必须对其进行调整,以便在我有多层文件夹/页面时显示我的一些图像。不难,只需搜索您的图片名称并查看/编辑链接即可。
【讨论】:
这是我的调试/发布解决方案 注: - 如果您使用的是 expo - 这可能不适用。
yarn android:bundle:debug 应该得到最新的调试版本... 假设您使用 index.js 作为主要入口点。
将这些添加到您的 package.json 中
"scripts": {
"android": "npx react-native run-android",
"android:bundle:debug": "react-native bundle --platform android --dev true --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res/",
"android:bundle:release": "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/build/intermediates/res/merged/release/",
}
release.sh
yarn android:bundle:release
cd android
./gradlew bundleRelease
cd app/build/outputs/bundle/release
open .
【讨论】: