繁体   English   中英

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

[英]React-Native: Application has not been registered error

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

然后我开始了Props 教程,我复制了代码片段并尝试再次运行该项目,并在我的屏幕上显示以下错误消息:

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

您已经用一个名称启动了项目,即

react-native init AwesomeApp

但是在您的 index.ios.js 文件中您注册了其他组件

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

什么时候必须

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

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

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

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

只需使用以下方法找到该过程:

ps aux | grep react-native

找到进程 ID (PID) 并使用kill命令(例如kill -9 [PID] )终止打包进程。 您应该在 macOS 中找到launchPackager.command应用程序,不确定其他操作系统。

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

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

像这样修改MainActivity

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

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

from moduleName:@"AwesomeProject"

moduleName:@"YourNewProjectName"

首先,您必须启动您的应用程序:

react-native start

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

它工作正常。

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

就我而言,MainActivity.java 中有这一行,当我使用react-native-rename cli(来自 NPM)时,它被遗漏了

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

显然你必须将它重命名为你的应用程序的名称。

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

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

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

查找正在运行的节点服务器:-

lsof -i :8081

杀死正在运行的节点服务器:-

kill -9 <PID>

例如:-

kill -9 1653

从当前反应本机文件夹启动节点服务器:-

react-native run-android

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

从新应用程序的目录运行打包程序解决了它。

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

来自:

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

至:

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

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

像这样:

'use strict';

import {
    AppRegistry
} from 'react-native';

import app from "./app";

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

这也可能是由于 Root 组件名称以小写开头。

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

例如点燃新的HelloWord

所有给出的答案都不适合我。

我在另一个终端中运行了另一个节点进程,我关闭了该命令终端,一切都按预期工作。

经过 2 天的调试,此解决方案对我有用。 改变这一点:

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

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

而不是更改AppRegistry的名称,

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

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

没有一个解决方案对我有用。 我不得不终止以下进程并重新运行 react-native run-android 并且它起作用了。

节点 ./local-cli/cli.js 开始

我有同样的问题。 我正在使用 Windows 为 android 创建一个 react native 应用程序,并且遇到了同样的错误。 这是有效的。

  • 导航到根目录中的文件夹ANDROID
  • 创建一个名称为: local.properties的文件
  • 在编辑器中打开它并写入:

sdk.dir = C:\\Users\\ USERNAME \\AppData\\Local\\Android\\sdk

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

保存并正常运行应用程序。 那对我有用。

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

我找出了我的问题所在(Windows 10 操作系统),但它也可能在 Linux 中有所帮助(您可以尝试)。

windows power shell ,当您想通过执行以下命令来运行应用程序(电脑启动后的第一次)时,

react-native run-android

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

您不需要关闭并重新打开power shell来运行另一个应用程序,您需要关闭node console来运行另一个应用程序。

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

就我而言:

反应原生cli:2.0.1

反应原生:0.60.4

和以下结构:

在此处输入图片说明

首先必须注意的是,当 Metro builder (react-native run-android) 运行构建时,Android Studio 中的 index.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);

这为我解决了

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"
},

我的问题是在AndroidManifest.xmlMainActivity.java包名称不同。 所以在清单中我有package=com.companyName.appName和活动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-v2 替换 react-native-material-dropdown

例如从 'react-native-material-dropdown' 导入 { Dropdown } 到从 'react-native-material-dropdown-v2' 导入 { Dropdown }

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

  1. 打开node_modules然后搜索react-native-material-textfield打开文件并转到 src 文件夹
  2. 在src下你会看到affix、helper、label文件夹——每个文件夹下都有一个index.js
  3. 将上述文件夹的index.js(全部3个文件夹)一一打开,搜索文本样式:Animated.Text.propTypes.style ,替换为样式:Text.propTypes
  4. 并像这样 import { Animated , Text} from 'react-native';

在 index.js 中,您有以下代码:-

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

因此,如果在 app.json 中,名称被定义为“AwesomeProject”,那么请确保它与以下内容相同:-

  1. ios/projectName/AppDelegate.m 中的模块名称:-
    moduleName:@"AwesomeProject"

  2. android/app/src/main/java/MainActivity.java 中的组件名称

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

对我来说,问题很简单。

创建项目 a -> 一切正常

创建的项目 b -> 遇到此错误

Metro 仍在运行,工作路径设置为其他应用程序。 在我的情况下,解决方案就像关闭地铁进程并让它重新启动一样简单

如果你在世博会,你不应该改变 AppDelegate.m 和 getMainComponentName() 中的 moduleName,registerRootComponent(App) 的默认名称是“main”,所以它应该保持“main”

使用更新的名称更改 app.json 中的 name 和 displayname 属性

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM