React-Native:应用程序未注册错误

我目前正在通过React-Native教程。我从入门教程开始,在那里我创建了一个新的react原生项目,并成功地在我的设备上运行了该项目。

然后我启动道具教程,我复制了代码片段,并试图再次运行项目,在我的屏幕上显示了以下错误消息:

.

163253 次浏览

我猜这是一个错误,导致不匹配的项目名称和您的注册组件。

您以一个名称发起了项目,即

react-native init AwesomeApp

但在index.ios.js文件中,你注册了其他组件

AppRegistry.registerComponent('Bananas', () => Bananas);

当它必须

AppRegistry.registerComponent('AwesomeApp', () => Bananas);

如果您的组件名称不匹配,请确保没有其他任何react-native/node进程在另一个终端上运行。

与其在AppRegistry中更改名称,

运行react-native init Bananas,这将为Bananas项目创建react样板代码,AppRegistry.registerComponent将自动指向香蕉

AppRegistry.registerComponent('Bananas', () => Bananas);

我也遇到了同样的问题,对我来说,根本原因是我从另一个react-native文件夹(AwesomeApp)运行(react-native start)打包器,而我在另一个文件夹中创建了另一个项目。

从新应用程序的目录中运行打包器解决了这个问题。

大多数情况下,问题是你有另一个react-native start(即React Native Packager)服务器运行在另一个终端或TMUX的另一个选项卡上(如果你正在使用TMUX)。

您需要找到该进程并关闭它,因此在运行react-native run-ios之后,它将为该特定应用程序建立一个新的打包器服务器。

只需发现该过程使用:

ps aux | grep react-native

找到进程id (PID)并使用kill命令(例如kill -9 [PID])杀死packager进程。你应该在macOS中找到launchPackager.command应用程序,不确定其他操作系统。

然后尝试再次运行run-ios(或android)。在运行新的packager服务器后,您应该能够看到新的路径,例如:

Looking for JS files in
/Users/afshin/Desktop/awesome-app

像这样修改android/app/src/main/java/com/your-package-name/MainActivity.java中的MainActivity

@Override
protected String getMainComponentName() {
return "Bananas"; // here
}

首先,你必须开始你的申请:

react-native start

然后,必须将应用程序名称设置为registerComponent的第一个参数。

它工作得很好。

AppRegistry.registerComponent('YourProjectName', () => YourComponentName);

你需要在index.android.js / index.ios.js中注册

是这样的:

'use strict';


import {
AppRegistry
} from 'react-native';


import app from "./app";


AppRegistry.registerComponent('test', () => app);

这也可能是因为根组件名称以小写字母开头。

更正它,或者用PascalCase名称重新创建项目。

例如,点燃新的HelloWord

在我的情况下,MainActivity.java中有这一行,当我使用react-native-rename cli(从NPM)时错过了

protected String getMainComponentName() {
return "AwesomeApp";
}

显然你得把它重命名为你的应用的名字。

所有给出的答案对我都不起作用。

我有另一个节点进程在另一个终端上运行,我关闭了该命令终端,一切正常工作。

没有一个解决方案对我有效。我不得不杀死下面的进程,重新运行react-native run-android,它工作了。

Node ./local-cli/cli.js启动

我也有同样的问题。 我正在使用Windows为android创建一个react原生应用程序,并有同样的错误。

  • 导航到根目录下的文件夹ANDROID < em > < / em >
  • 创建一个名为< em > local.properties < / em >的文件
  • 在编辑器中打开它,然后写:

__abc0用户名__abc1

  • 将USERNAME替换为您的机器名称。

保存并正常运行应用程序。这对我很管用。

问题也会出现在index.js中,你为应用程序命名的名字与你为android/ios包命名的名字不同;当你弹出应用程序时可能会发生这种情况。因此,请确保在调用AppRegistry.registerComponent('someappname', () => App)时,someappname也用于本机包,反之亦然。

我认为节点服务器是从另一个文件夹运行的。所以杀死它并在当前文件夹中运行。

查找运行节点服务器:-

lsof -i :8081

关闭运行节点服务器:-

kill -9 <PID>

如:-

kill -9 1653

从当前的react本机文件夹启动节点服务器

react-native run-android

请检查项目中的app.json文件。如果没有appKey行,则必须添加它

{
"expo": {
"sdkVersion": "27.0.0",
"appKey": "mydojo"
},
"name": "mydojo",
"displayName": "mydojo"
}

我的解决方案是在“AppDelegate.m”中更改模块名称

< p >从 moduleName:@"AwesomeProject" < / p > < p > moduleName:@"YourNewProjectName" < / p >

我发现了问题在我的情况下(Windows 10操作系统),但它可能也有助于Linux(你可以试试)。

windows power shell中,当你想运行一个应用程序(第一次在pc引导后)通过执行以下命令,

react-native run-android

它在另一个console panel中开始一个node process/JS server,并且你不会遇到这个错误。但是,当你想运行另一个应用程序时,你必须需要关闭 已经运行 JS server console panel。然后从power shell为另一个应用程序执行相同的命令,该命令将自动为该应用程序启动另一个new JS服务器,并且您不会遇到此错误。

你不需要关闭和重新开放 power shell来运行另一个应用,你需要关闭 node console来运行另一个应用。

在阅读了以上所有内容后,我发现这可能还有另一个原因。

在我的例子中:

react-native-cli: 2.0.1

react-native: 0.60.4

并有以下结构:

enter image description here

首先要注意的是索引。当Metro builder(react-native run-android)运行构建时,android Studio中没有更新android,因此必须手动完成。 同样在Android studio中不“读取”

App.json(默认和index.js一起创建,重命名为index.android.js):

 {
"name": "authApp",
"displayName": "authApp"
}

这就像

(就我而言)

import {authApp as appName} from './app.json';

,因为android studio不知道authApp指什么。 我修复了暂时引用应用程序名称与它的字符串名称,而不是使用 导入app.json:

AppRegistry.registerComponent('authApp', () => MyApp);

我通过修改app.json文件中的以下内容来解决这个问题。似乎是大写字母抛出了这个错误。

< em >: < / em >

{
"name": "Nameofmyapp",
...
}

< em >: < / em >

{
"name": "nameofmyapp",
...
}

这为我解决了问题

AppRegistry.registerComponent('main', () => App);

我的index.js文件

import { AppRegistry } from 'react-native';
import App from './App';
AppRegistry.registerComponent('main', () => App);

我的package.json文件:

"dependencies": {
"react": "^16.13.1",
"react-dom": "~16.9.0",
"react-native": "~0.61.5"
},
经过2天的调试,这个解决方案对我有效。 修改为

AppRegistry.registerComponent('AppName', () => App);

AppRegistry.registerComponent('main', () => App);

我的问题是在AndroidManifest.xmlMainActivity.java包的名称是不同的。因此,在manifest中我有package=com.companyName.appName,在activity中有package com.appName

就我而言,我有一个不同的解决方案,以防有人需要

yarn remove react-native-material-dropdown

安装新包react-native-material-dropdown-v2

yarn add react-native-material-dropdown-v2

将代码中的react-native-material-dropdown替换为react-native-material-dropdown-v2

< p >。导入{Dropdown}从'react-native-material-dropdown'到 import {Dropdown} from 'react-native-material-dropdown-v2'

另一件事==========

    打开node_modules,然后搜索 打开文件,进入SRC文件夹
  1. 在src下,你会看到词缀,辅助词,标签文件夹-在每个文件夹下,都有一个index.js
  2. 逐个打开上述三个文件夹的index.js,搜索文本风格:Animated.Text.propTypes.style,并将其替换为风格:Text.propTypes
  3. 从'react-native'导入文本形式{Animated, text};

在index.js中,你有以下代码

< p > import {name as appName} from './app.json'; AppRegistry.registerComponent(appName, () => MyApp); < / p >

如果在app.json中,name被定义为“awesomeproject”;然后确保与以下内容相同:-

  1. moduleName in ios/projectName/AppDelegate。M:-
    moduleName:@"AwesomeProject" < / p >

  2. 组件名称

    < p > @Override
    protected String getMainComponentName() {
    return "AwesomeProject"; // here
    } < / p >

对我来说,问题很简单。

创建项目a >一切工作

创建项目b ->遇到这个错误

Metro仍在运行,工作路径设置为另一个应用程序。在我的案例中,解决方案很简单,就是关闭metro进程,让它重新启动

如果你使用的是expo,你不应该改变AppDelegate中的moduleName。在getMainComponentName()中,registerRootComponent(App)的默认名称是"main",所以它应该是remain "main"

将app.json中的name和displayname属性更改为新的名称