2016-06-21 7 views
1

integrieren Ich versuche, eine vorhandene Android-App mit React Native zu integrieren, die guide folgt. Es kompiliert und ausgeführt, aber wenn ich die Reaktion Aktivität zu starten, stürzt mit:React Native kann Entwicklungsserver nicht finden, die vorhandene Android-App

Caused by: java.lang.RuntimeException: Could not connect to development server.

Ich habe beide versucht, in einem Emulator (genymotion) und auf einem USB-Gerät verbunden. Ich habe adb reverse tcp:8081 tcp:8081 ausgeführt und mit adb reverse --list verifiziert, und außerdem verifiziert, dass ich http://localhost:8081/index.android.bundle vom Browser auf Gerät zugreifen kann, zusätzlich zu meinem Laptop (so läuft der Paketserver gut, über npm start).

Bemerkenswert, ich kann das Tutorial-Beispiel in Ordnung, so scheint es etwas über das Ausführen von RN aus meiner bestehenden Android App zu sein.

Ich bin auf Reaktion-native 0.27.2.

Ideen?

aktualisieren: habe ich einige Code das Bündel direkt von einem meiner Aktivitäten zu holen:

Dieses funktioniert gut
public void pingReactServer() { 
    Request request = new Request.Builder() 
      .url("http://10.0.3.2:8081/index.android.bundle") 
      .build(); 
    OkHttpClient client = OkHttpClientProvider.getOkHttpClient(); 
    client.newCall(request).enqueue(
      new Callback() { 
       @Override 
       public void onFailure(Call call, IOException e) { 
        Log.v(TAG, "React ping failed: " + call); 
       } 

       @Override 
       public void onResponse(Call call, Response response) throws IOException { 
        Log.v(TAG, "React ping response: " + response.body().string()); 
       } 
      } 
    ); 
} 

, ich wieder das Bündel Inhalt bekommen. Daher kann der HTTP-Client von React den Packager-Server sehen, und etwas anderes muss einen Fehler verursachen, wenn er das Bundle auf normale Weise (den DevServerHelper) holt.

Antwort

0

es heraus, es war eine Reihe unglücklicher Ereignisse:

Das Codebeispiel in der tutorial zeigt dies:

mReactInstanceManager = ReactInstanceManager.builder() 
    ... 
    .setUseDeveloperSupport(BuildConfig.DEBUG) 

aber BuildConfig.DEBUG tatsächlich als false definiert ist, so dass diese deaktiviert Entwickler-Support (Stattdessen erwartet es, das js-Bündel als Aktivposten zu finden).

Nachdem ich das behoben hatte, stieß ich auf ein anderes Problem mit Proguard; es hatte all devsupport Klassen gezupft, so musste ich sie in meiner proguard Konfiguration weiße Liste, mit:

# Keep developer support classes. 
-keep class com.facebook.react.devsupport.** { *; } 

nun bis zum ReactInstanceManager Laden und bekam das Bündel aus dem Entwicklungs-Server, ich habe getroffen, aber eine mehr speedbump:

Error: Requiring unknown module "react".If you are sure the module is there, try restarting the packager or running "npm install".

nicht sicher, warum npm install das nicht automatisch zerrte, aber läuft diese manuell behoben:

npm install [email protected] 

(verwenden Sie die spezifische Version, die unter node_modules/react-native/package.json aufgeführt ist.)

Verwandte Themen