it-swarm-vi.com

React-Native: Ứng dụng chưa được đăng ký lỗi

Tôi hiện đang trải qua các hướng dẫn React-Native. Tôi đã bắt đầu với hướng dẫn Bắt đầu, nơi tôi đã thực hiện một dự án gốc phản ứng mới và quản lý thành công để chạy dự án trên thiết bị của mình.

Sau đó, tôi bắt đầu Hướng dẫn đạo cụ , tôi đã sao chép đoạn mã và thử chạy lại dự án và có thông báo lỗi sau xuất hiện trên màn hình của tôi:

112
Adam

Tôi đoán đó là một lỗi gây ra bởi không khớp tên dự án và thành phần đã đăng ký của bạn.

Bạn đã thực hiện dự án với một tên, tức là.

react-native init AwesomeApp

Nhưng trong tệp index.ios.js của bạn, bạn đăng ký thành phần khác

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

Khi nó phải được

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

Cố gắng sửa nó.

390
Slowyn

Hầu hết các vấn đề là bạn có một máy chủ react-native start (nghĩa là React Native Packager) đang chạy trên một thiết bị đầu cuối khác hoặc một tab khác của TMUX (nếu bạn đang sử dụng TMUX).

Bạn cần tìm quá trình đó và đóng nó, vì vậy sau khi chạy react-native run-ios chẳng hạn, nó sẽ thiết lập một máy chủ đóng gói mới đã đăng ký cho ứng dụng cụ thể đó.

Chỉ cần tìm quá trình đó bằng cách sử dụng:

ps aux | grep react-native

tìm id tiến trình (PID) và tiêu diệt tiến trình đóng gói bằng cách sử dụng lệnh kill (ví dụ: kill -9 [PID]). Bạn nên tìm ứng dụng launchPackager.command trong macOS, không chắc chắn về các hệ điều hành khác.

Sau đó thử chạy lại run-ios (hoặc Android). Bạn sẽ có thể thấy đường dẫn mới sau khi chạy máy chủ đóng gói mới, ví dụ:

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

Sửa đổi MainActivity như thế này, 

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

Trước hết, bạn phải bắt đầu ứng dụng của bạn:

react-native start

Sau đó, bạn phải đặt tên ứng dụng của mình làm đối số đầu tiên của registerComponent.

Nó hoạt động tốt.

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

Giải pháp của tôi là thay đổi tên mô-đun trong "AppDelegate.m" 

từ moduleName:@"AwesomeProject"

đến moduleName:@"YourNewProjectName"

9
user8637708

Trong trường hợp của tôi, dòng này trong MainActivity.Java đã bị bỏ lỡ khi tôi sử dụng react-native-rename cli (từ NPM)

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

Rõ ràng là bạn phải đổi tên nó thành tên ứng dụng của bạn.

5
xemasiv

Tôi có cùng một vấn đề và đối với tôi nguyên nhân sâu xa là tôi đã chạy (start -igen start) trình đóng gói từ một thư mục gốc phản ứng khác (AwesomeApp), trong khi tôi tạo một dự án khác trong một thư mục khác.

Chạy trình đóng gói từ thư mục của ứng dụng mới đã giải quyết nó.

3
la5zl0

Vui lòng kiểm tra tệp app.json của bạn trong dự án. nếu không có dòng appKey thì bạn phải thêm nó

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

Tôi nghĩ rằng máy chủ nút đang chạy từ một thư mục khác. Vì vậy, giết nó và chạy trong thư mục hiện tại. 

Tìm máy chủ nút đang chạy: -  

lsof -i :8081

Giết máy chủ nút đang chạy: -

kill -9 <PID>

Ví dụ:-

kill -9 1653

Khởi động máy chủ nút từ thư mục gốc phản ứng hiện tại: -

react-native run-Android

2
Arshid KV

bạn cần đăng ký nó trong index.Android.js/index.ios.js

như thế này:

'use strict';

import {
    AppRegistry
} from 'react-native';

import app from "./app";

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

Tất cả các câu trả lời đã cho không làm việc cho tôi. 

Tôi đã có một quá trình nút khác chạy trong một thiết bị đầu cuối khác, tôi đã đóng thiết bị đầu cuối lệnh đó và mọi thứ hoạt động như mong đợi.

1
Khemraj

Điều này cũng có thể là do tên thành phần Root bắt đầu bằng chữ thường.

Sửa lại nó hoặc đúng hơn là tạo dự án một lần nữa với tên PascalCase.

ví dụ. đốt cháy HelloWord mới

1
Venkat

Vấn đề cũng sẽ xuất hiện khi, trong index.js, bạn đã đặt tên ứng dụng khác với tên bạn đã đặt cho gói Android/ios ; có lẽ điều này đã xảy ra khi bạn đã gỡ bỏ ứng dụng. Vì vậy, hãy chắc chắn rằng khi gọi AppRegistry.registerComponent('someappname', () => App), tên lại cũng được sử dụng cho các gói gốc hoặc ngược lại.

1
gavri

Sau khi đọc tất cả những điều trên, tôi thấy rằng có thể có một lý do khác cho việc này.

Trong trường hợp của tôi:

reac -igen-cli: 2.0.1

phản ứng tự nhiên: 0,60,4

và cấu trúc sau:

enter image description here

Đầu tiên phải lưu ý rằng index.Android không được cập nhật trong Android Studio khi quá trình xây dựng được chạy bởi nhà xây dựng Metro (Reac -igen run-Android) vì vậy nó phải được thực hiện thủ công. Ngoài ra trong Android studio không "đọc"

app.json (được tạo theo mặc định cùng với index.js, được đổi tên thành index.Android.js):

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

và vì vậy nó như thế

(trong trường hợp của tôi)

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

vì thực tế là Android studio không biết authApp đề cập đến điều gì. Tôi khắc phục ngay lúc này đề cập đến tên ứng dụng bằng tên chuỗi của nó và không sử dụng thao tác nhập đó từ app.json:

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

Tôi gặp vấn đề tương tự . Tôi đang sử dụng Windows để tạo một ứng dụng gốc phản ứng cho Android và cũng gặp lỗi tương tự. Đây là những gì đã làm việc.

  • Điều hướng đến thư mụcAndroidtrong thư mục gốc của bạn.
  • Tạo một tệp có tên:local.properies
  • Mở nó trong trình soạn thảo và viết: 

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

  • Thay thế USERNAME bằng tên của máy của bạn.

Lưu và chạy ứng dụng bình thường. Điều đó làm việc cho tôi.

0
Utsav Chawla

Thay vì thay đổi tên trong AppRegistry,

Chạy Chuối ban đầu phản ứng, điều này sẽ tạo mã phản ứng cho dự án Chuối và AppRegistry.registerComponent sẽ tự động trỏ đến chuối

AppRegistry.registerComponent('Bananas', () => Bananas);
0
vipul srivastav

Tôi đã tìm ra vấn đề ở đâu trong trường hợp của tôi (HĐH Windows 10), nhưng nó cũng có thể giúp ích cho Linux (Bạn có thể thử).

Trong windows power Shell, khi bạn muốn chạy một ứng dụng (lần đầu tiên sau khi khởi động máy tính) bằng cách thực hiện lệnh sau,

react-native run-Android

Nó bắt đầu một node process/JS server trong một console panel khác và bạn không gặp phải lỗi này. Nhưng, khi bạn muốn chạy ứng dụng khác, bạn phải cần phải đóng đó đã chạyJS server console panel. Và sau đó thực thi cùng một lệnh cho một ứng dụng khác từ power Shell, lệnh đó sẽ tự động khởi động một new máy chủ JS cho ứng dụng này và bạn sẽ không gặp phải lỗi này. 

Bạn không cần đóng và mở lạipower Shell để chạy ứng dụng khác, bạn cần đóngnode console để chạy ứng dụng khác.

0
Shamsul Arefin Sajib

Không phải là giải pháp làm việc cho tôi. Tôi đã phải giết quá trình sau đây và chạy lại Android gốc tự nhiên và nó đã hoạt động.

nút ./local-cli/cli.js bắt đầu

0
G. Thabit