react-native 报错

旧城等待, 2022-05-17 10:55 355阅读 0赞

问题

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

控制台报错 :

  1. Could not run adb reverse: Command failed: adb -s 064b4394005171ae reverse tcp:8081 tcp:8081
  2. Starting the app on 064b4394005171ae (adb -s 064b4394005171ae shell am start -n com.shagua/.MainActivity )...
  3. Starting: Intent { cmp=com.shagua/.MainActivity }
  4. Error type 3
  5. Error: Activity class {
  6. 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 的过程当中,从来没有一种语言遇到这么多的问题 !

发表评论

表情:
评论列表 (有 0 条评论,355人围观)

还没有评论,来说两句吧...

相关阅读