React Native не може да намери сървър за разработка, интегриращ съществуващо приложение за Android

Опитвам се да интегрирам съществуващо приложение за Android с React Native, следвайки ръководство. Той се компилира и работи, но когато стартирам дейността React, той се срива с:

Причинено от: java.lang.RuntimeException: Не може да се свърже със сървъра за разработка.

Опитах и ​​в емулатор (genymotion), и на устройство, свързано с USB. Стартирах adb reverse tcp:8081 tcp:8081 и потвърдих с adb reverse --list и освен това потвърдих, че имам достъп до http://localhost:8081/index.android.bundle от браузъра на устройството, в допълнение към моя лаптоп (така че сървърът за пакети работи добре, чрез npm start).

Трябва да се отбележи, че мога да стартирам добре примера с урока, така че изглежда е нещо свързано с стартирането на RN от съществуващото ми приложение за Android.

Аз съм на react-native 0.27.2.

идеи?

Актуализация: Добавих някакъв код за извличане на пакета директно от една от моите дейности:

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

Това работи добре, получавам обратно съдържанието на пакета. Така че http клиентът на React може да види сървъра за пакетиране и нещо друго трябва да причинява грешка при извличане на пакета по нормалния начин (DevServerHelper).


person Adam Berenzweig    schedule 21.06.2016    source източник


Отговори (1)


Разбрах, това беше поредица от нещастни събития:

Примерният код в урока показва това:

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

но BuildConfig.DEBUG всъщност се дефинира като false, така че това деактивира поддръжката за разработчици (вместо това очаква да намери js пакета като актив).

След като поправих това, попаднах на друг проблем, свързан с Proguard; беше премахнал всички класове за поддръжка на разработчици, така че трябваше да ги поставя в белия списък в моята конфигурация на proguard, използвайки:

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

Сега стигнах до зареждането на ReactInstanceManager и получаването на пакета от сървъра за разработка, но ударих още една скорост:

Грешка: Изискване на неизвестен модул "реагиране". Ако сте сигурни, че модулът е там, опитайте да рестартирате пакетера или да стартирате "npm install".

Не съм сигурен защо npm install не изтегли това автоматично, но стартирането на това ръчно го поправи:

npm install [email protected]

(използвайте конкретната версия, посочена в node_modules/react-native/package.json.)

person Adam Berenzweig    schedule 22.06.2016