react-native 报错

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/stupid56862/article/details/81561669

问题

当我执行 react-native run-android 的时候。

控制台报错 :

Could not run adb reverse: Command failed: adb -s 064b4394005171ae reverse tcp:8081 tcp:8081
Starting the app on 064b4394005171ae (adb -s 064b4394005171ae shell am start -n com.shagua/.MainActivity )...
Starting: Intent { cmp=com.shagua/.MainActivity }
Error type 3
Error: Activity class {com.shagua/com.shagua.MainActivity } does not exist.

我们来分析下问题 :

现象 : 应用安装成功,但是没有启动打开应用。 并且启动的类名是错误的 , 因为 MainActivity 在我的项目中不存在的 。
我的项目中应用启动的 Activity 是 LaunchActivity 。主界面的 Activity 是 HomeActivity 。
为什么出来了一个 MainActivity ?


问题原因

react-native run-android 是通过 adb 命令行来启动应用的。


\node_modules\react-native\local-cli\runAndroid\runAndroid.js

我们打开 runAndroid.js 文件。
Android 菜鸟,不懂前端。代码看的我头大,不过没关系,我们搜索 MainActivity 。


function tryLaunchAppOnDevice(device, packageName, adbPath) {
try {
const adbArgs = ['-s', device, 'shell', 'am', 'start', '-n', packageName + '/.MainActivity '];
console.log(chalk.bold(
`Starting the app on ${device} (${adbPath} ${adbArgs.join(' ')})...`
));
child_process.spawnSync(adbPath, adbArgs, {stdio: 'inherit'});
} catch (e) {
console.log(chalk.red(
'adb invocation failed. Do you have adb in your PATH?'
));
}
}

找到了关键字 , RN 命令行启动应用的时候直接写死了启动 Activity 名称。怪不得出来个 MainActivity 。


解决方案

  1. 在 Android Studio 中将启动的Activity 移动到你的包名下,(Android Studio 会帮你更改在 AndroidManifest.xml 中的路径,以及在其他类中的路径) 例如你的应用包名为 com.shagua 那么待启动的 Activity 的路径为 com.shagua.LaunchActivity
  2. 修改 runAndroid.js后保存。
    const adbArgs = ['-s', device, 'shell', 'am', 'start', '-n', packageName + '/.LaunchActivity'];

总结

我痛恨 ReactNative , 在我学习 Android 、iOS 的过程当中,从来没有一种语言遇到这么多的问题 !

猜你喜欢

转载自blog.csdn.net/stupid56862/article/details/81561669