2016-01-23 25 views
51

Aktualnie próbuję uzyskać ES6 react-native-webpack-server z uruchomioną na emulatorze Androida. Różnica polega na tym, że zaktualizowałem swoje package.json i build.grade w celu użycia reagowania 0.18.0 i otrzymuję ten błąd podczas uruchamiania. O ile mi wiadomo, to zaimportowano poprawnie. Nawet jeśli miałbym skomentować kod, ten błąd nadal się pojawia. To działa na iOS bez problemu.React-Native: Module AppRegistry nie jest zarejestrowanym modułem wywoływalnym

Co robię źle?

EDYCJA: Po wypróbowaniu innych kotłów, które obsługują 0.18.0, nadal napotykam ten sam problem.

enter image description here

+0

Mam ten sam problem z wersjami 0.19 i 0.20, próbowałem wszystkiego, ale bez powodzenia: "(Każda aktualizacja @Dustin? – Shprink

+0

@Shprink Też dostaję ten problem z 0.20. Również otrzymuję ten problem "Jedno ze źródeł do przypisania ma przeliczalny klucz w łańcuchu prototypów." –

Odpowiedz

22

Właśnie zmodernizowane reagować-rodzimy 0.18.1 dzisiaj trudne mając pewne problemy z zależnościami rówieśnicze 0.19.0-rc wersji pre-release.

Powrót na pytanie, co zrobiłem było

  1. cd android
  2. sudo ./gradlew clean

następnie z powrotem do katalogu roboczego i uruchomić react-native run-android

należy zrestartować KMP zbyt po tym uaktualnieniu.

mam nadzieję, że to zadziała.

+3

Próbuję uruchomić polecenie gradlew, ale ciągle mi mówi, że nie może znaleźć zestawu SDK systemu Android, mimo że mam 'ANDROID_HOME 'na mojej ścieżce. Dodałem także plik 'local.properties' z' sdk.dir = '. Jakieś pomysły? – steezeburger

+9

Doradzając, aby zrobić coś takiego jak 'sudo ./gradlew clean', byłoby miło wspomnieć, że jest to ** ogromna ** operacja, która najwyraźniej ponownie pobiera i ponownie instaluje całą dystrybucję gradle. –

+0

To zadziałało, więc +1. –

1

Nie wiem dlaczego, ale kiedy przenosimy AppRegistry.registerComponent z pliku index.js, który znajduje się w pliku index.android.js bezpośrednio w pliku index.android.js, wydaje się działać.

9

Miałem ten sam problem na ios i przyczynę dla mnie, co mój index.io.js było niepoprawne (ponieważ kopiowałem wkleił jeden z przykładów bez oglądania jego zawartości), to kończyło się na module zgłoszenie wywozowe

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

zamiast oczekiwanego

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

można mieć ten sam problem na android z index.android.js Chyba.

1

Jeśli używasz niektóre przykłady mogą nie działać

Oto moja wersja do przewijania widoku

/** 
* 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

odinstalowałem go na Genymotion. Następnie uruchom aplikację react-native run-android, aby zbudować aplikację. I zadziałało. Spróbuj najpierw przed uruchomieniem sudo ./gradlew clean, to zaoszczędzi ci dużo czasu.

0

Mam nadzieję, że to uratuje komuś ból głowy. Ten błąd wystąpił po uaktualnieniu mojej wersji macierzystej reagującej. Mylnie pojawił się tylko na androidowej stronie rzeczy.

Moja struktura plików obejmuje index.ios.js i index.android.js.Obie zawierają kod:

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

Co miałem zrobić, to w android/app/src/main/java/com/{projectName}/MainApplication.java zmień index do :

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

Następnie w app/build/build.gradle, zmień entryFile z index.js do index.android.js

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

Powiązane problemy