2

ガイドに従って、既存の Android アプリを React Native と統合しようとしています。コンパイルして実行しますが、React アクティビティを起動すると、次のようにクラッシュします。

原因: java.lang.RuntimeException: 開発サーバーに接続できませんでした。

エミュレーター(genymotion)とUSB接続デバイスの両方で試しました。を実行adb reverse tcp:8081 tcp:8081して検証し、ラップトップからだけでなく、デバイスのブラウザからhttp://localhost:8081/index.android.bundleadb reverse --listにアクセスできることをさらに検証しました(したがって、パッケージサーバーは正常に動作しています。)。npm start

特に、チュートリアルの例を問題なく実行できるので、既存の Android アプリ内から RN を実行することについての何かのようです。

私は反応ネイティブ0.27.2を使用しています。

アイデア?

更新: アクティビティの 1 つからバンドルを直接取得するコードを追加しました。

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());
                }
            }
    );
}

これで問題なく動作し、バンドル コンテンツが返されます。そのため、React の http クライアントはパッケージャー サーバーを認識でき、バンドルを通常の方法 (DevServerHelper) で取得する際にエラーが発生しているに違いありません。

4

1 に答える 1

0

考えてみると、それは一連の不幸な出来事でした:

チュートリアルのサンプル コードは、次のことを示しています。

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

しかし、BuildConfig.DEBUG実際には として定義されてfalseいるため、これにより開発者サポートが無効になります (代わりに、js バンドルがアセットとして検出されることが期待されます)。

それを修正した後、Proguard に関する別の問題に遭遇しました。すべての devsupport クラスが取り除かれていたため、次を使用して、proguard 構成でそれらをホワイトリストに登録する必要がありました。

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

これで、ReactInstanceManager が開発サーバーからバンドルを読み込んで取得するところまで到達しましたが、もう 1 つのスピード バンプにぶつかりました。

エラー: 不明なモジュール "react" が必要です。モジュールが存在することが確実な場合は、パッケージャーを再起動するか、"npm install" を実行してみてください。

npm installこれを自動的に取り込まなかった理由はわかりませんが、これを手動で実行すると修正されました:

npm install react@15.1.0

( にリストされている特定のバージョンを使用してnode_modules/react-native/package.jsonください。)

于 2016-06-22T22:26:34.963 に答える