React-Native: Модуль AppRegistry не є зареєстрованим модулем для дзвінка


114

Наразі я намагаюся запустити ESA-реактор-нативно-веб-сервер, що працює на емуляторі Android. Різниця в тому, що я модернізував свій package.jsonі build.gradeвикористовую реакцію 0.18.0, і отримую цю помилку під час завантаження. Наскільки мені відомо AppRegistry, імпортується правильно. Навіть якби я коментував код, ця помилка все-таки виникає. Це працює на iOS без проблем.

Що я роблю неправильно?

EDIT: Після випробування інших котлів, які підтримують 0.18.0, я все ще стикаюся з тією ж проблемою.

введіть тут опис зображення


У мене однакова проблема з 0,19 і 0,20, я спробував все, але не пощастило: '(Будь-яке оновлення @Dustin?
Shprink

@Shprink У мене також є проблема з 0,20. Також отримав це питанняOne of the sources for assign has an enumerable key on the prototype chain.
Джош Феррара

Відповіді:


58

Я щойно модернізований, щоб реагувати на рідну 0.18.1сьогодні важку проблему з рівними залежностями з 0.19.0-rcпопередньою версією.

Повернімось до вашого питання, що я зробив

  1. cd android
  2. sudo ./gradlew clean(більше інформації про те, як чисто працює тут )

потім поверніться до робочого каталогу та запустіть react-native run-android

також слід перезапустити npm після оновлення.

сподіваюся, що це працює для вас.


3
Я намагаюся запустити команду gradlew, але вона постійно говорить мені, що не може знайти SDK для Android, хоча я маю ANDROID_HOMEна своєму шляху. Я також додав local.propertiesфайл із sdk.dir=. Якісь ідеї?
steezeburger

43
Даючи пораду зробити щось на кшталт sudo ./gradlew clean, було б непогано згадати, що це величезна операція, яка, очевидно, повторно завантажує та перевстановлює весь розподіл gradle.
Szczepan Hołyszewski

1
отримання помилки Модуль HMRClient не є зареєстрованим модулем дзвінка (включення виклику). Я не в змозі побачити мої зміни, які зроблені у файлах js :(
Dinesh R Rajput

Щоб знайти своє Android SDK-місце, відкрийте Android Studio і натисніть конфігурацію, ви побачите шлях у верхній частині, який, мабуть, щось на кшталт:/Users/karim/Library/Android/sdk
Карім Мортабіт,

це не зробило нічого для мене після того, як я спробував оновити до 0,44 RN
SleepsOnNewspapers

15

У мене була така ж проблема в iOS, і причиною для мене було те, що мій index.ios.js був неправильним (оскільки я копіював один із прикладів, не дивлячись на його вміст), він закінчувався декларацією про експорт модуля

exports.title = ...
exports.description = ...
module.exports = MyRootComponent;

Замість очікуваного

AppRegistry.registerComponent('MyAppName', () => MyRootComponent);

У вас може бути однакова проблема на android із index.android.js, я думаю.


13

Однією з основних причин цієї проблеми може бути те, де ви встановили б плагін і забули пов’язати його .

спробуйте це:

react-native link

Перезапустіть додаток.

Сподіваюсь, це допоможе. Будь ласка, повідомте мене у коментарях . Дякую.


1
Запуск react-native linkбез назви пакета застарілий і буде видалений у наступній версії.
Харшад Мадей

9

Я вирішив це питання лише додавши

import { AppRegistry } from "react-native";
import App from "./App";
import { name as appName } from "./app.json";  
AppRegistry.registerComponent(appName, () => App);

до мого index.js

переконайтеся, що це існує у вашому index.js


3

Для мене мою проблему ставив неправильний файл вступу під час поєднання.

Я використовував App.js як свій вхідний файл, отже, додаток не міг знайти AppRegistry

Правильно:

react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res/

Неправильно:

react-native bundle --platform android --dev false --entry-file App.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res/

ти врятував мій мозок ... я намагався зрозуміти, чому я запускаю команду: react-native bundle --platform android --dev false --entry-file index.js --bundle-output android /app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res все спрацювало, а натомість якщо я опублікував Fastlane, програма зазнала аварії з цією помилкою: Module AppRegistry is not a registered callable module (calling runApplication) У build.gradle, мабуть, був бруд, неправильний записФайл! Знову дякую!
Нобади

3

Сподіваємось, це може врятувати когось головний біль. Я отримав цю помилку після оновлення своєї рідної реакції. Конфузно він з'явився лише на андроїдній стороні речей.

Моя файлова структура включає в себе index.ios.jsі index.android.js. Обидва містять код:

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

Що я повинен був зробити android/app/src/main/java/com/{projectName}/MainApplication.java, це змінилося indexна index.android:

@Override
protected String getJSMainModuleName() {
    return "index.android"; // was "index"
}

Потім app/build/build.gradleперейдіть на зміну entryFileз index.jsнаindex.android.js

project.ext.react = [
    entryFile: "index.android.js" // was index.js"
]

3

Для мене просто перезапуск комп’ютера виправлено. (Моя помилка полягала в тому, що "модуль appRegistry не є зареєстрованим модулем дзвінка (виклик runapplication) js engine: hermes")

Ще одна найкраща відповідь, яка тут відсутня і, можливо, спрацювала, - це просто вбити вузлові процеси:

killall -9 node

[ Модуль AppRegistry не зареєстрований модулем для виклику (виклик runApplication) ]


2

Я не знаю, чому, але коли я переміщу AppRegistry.registerComponent з файлу index.js, який включений до index.android.js, безпосередньо безпосередньо до index.android.js, це здається, що він працює.


1

Якщо ви використовуєте деякі приклади, вони можуть не працювати

Ось моя версія для перегляду прокрутки

/**
 * Sample React Native App
 * https://github.com/facebook/react-native
 */

import React, {
  AppRegistry,
  Component,
  StyleSheet,
  Text,
  View,
  ScrollView,
  TouchableOpacity,
  Image
} from 'react-native';

class AwesomeProject extends Component {
  render() {
    return (
        <View>
          <ScrollView
            ref={(scrollView) => { _scrollView = scrollView; }}
            automaticallyAdjustContentInsets={false}
            onScroll={() => { console.log('onScroll!'); }}
            scrollEventThrottle={200}
            style={styles.scrollView}>
            {THUMBS.map(createThumbRow)}
          </ScrollView>
          <TouchableOpacity
            style={styles.button}
            onPress={() => { _scrollView.scrollTo({y: 0}); }}>
            <Text>Scroll to top</Text>
          </TouchableOpacity>
        </View>
    );
  }
}

var Thumb = React.createClass({
  shouldComponentUpdate: function(nextProps, nextState) {
    return false;
  },
  render: function() {
    return (
      <View style={styles.button}>
        <Image style={styles.img} source={{uri:this.props.uri}} />
      </View>
    );
  }
});

var THUMBS = [
'http://loremflickr.com/320/240?random='+Math.round(Math.random()*10000) + 1,
'http://loremflickr.com/320/240?random='+Math.round(Math.random()*10000) + 1,
'http://loremflickr.com/320/240?random='+Math.round(Math.random()*10000) + 1
];

THUMBS = THUMBS.concat(THUMBS); // double length of THUMBS
var createThumbRow = (uri, i) => <Thumb key={i} uri={uri} />;

var styles = StyleSheet.create({
  scrollView: {
    backgroundColor: '#6A85B1',
    height: 600,
  },
  horizontalScrollView: {
    height: 120,
  },
  containerPage: {
    height: 50,
    width: 50,
    backgroundColor: '#527FE4',
    padding: 5,
  },
  text: {
    fontSize: 20,
    color: '#888888',
    left: 80,
    top: 20,
    height: 40,
  },
  button: {
    margin: 7,
    padding: 5,
    alignItems: 'center',
    backgroundColor: '#eaeaea',
    borderRadius: 3,
  },
  buttonContents: {
    flexDirection: 'row',
    width: 64,
    height: 64,
  },
  img: {
    width: 321,
    height: 200,
  }
});

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

1

Я видалив його на Genymotion. Потім запустіть, react-native run-androidщоб створити додаток. І це спрацювало. Спробуйте це спочатку перед запуском sudo ./gradlew clean, це заощадить вам багато часу.


1

перезапуск пакувача працював на мене. просто вбийте реагувати нативний пакувальник і запустіть його знову.


1

якщо ви стикаєтеся з цією помилкою у Windows з Android

відкрийте папку додатків для кореневого каталогу та перейдіть у папку Android.

     cd android 
     gradlew clean

запустити додаток знову реагувати на рідний запуск Android

bhooom це працює


0

У моєму випадку мій index.jsпросто вказує на іншого js замість мого Launcher js помилково, який не містить AppRegistry.registerComponent().

Отже, переконайтесь, що у файлі ваш index.jsпункт, щоб зареєструвати клас.



0

Для мене це було проблемою з нативною залежністю від реакції на наступну версію пакета react, тоді як у моїм package.json була вказана стара. Оновлення моєї версії реагування вирішило цю проблему.


0

Для мене просто я пов’язаний з реакцією рідного так:


Можливо, трохи розгорніть цю проблему.

0

npm start - - reset-кеш

Можливо, порт вже використовується. Я зіткнувся з подібною проблемою, коли я спершу запускаю реагуючу-натиснуту андроїд, а потім запуск npm. Я вирішую це так: Спочатку отримайте ідентифікатор процесу, що працює в порту 8081: sudo lsof -i: 8081


0

Я отримав цю помилку в Expo, тому що я експортував неправильну назву компонента, наприклад

const Wonk = props => (
  <Text>Hi!</Text>
)

export default Stack;

0

Я вирішив цю проблему, зробивши наступне:

  1. cd android
  2. ./gradlew очистити
  3. taskkill / f / im node.exe
  4. видалити додаток з Android

0

Якщо ви використовуєте вікна машини вам потрібно зробити , а cd androidпотім ./gradlew cleanзапустітьreact-native run-android

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.