Конфигурация сетевой безопасности приводит к тому, что приложение React Native не подключается к серверу metro

#android #react-native #metro-bundler

Вопрос:

У меня очень странная проблема, которую я не могу решить. Я также не уверен, как это сделать в Google, потому что, хотя я знаком с React Native, я не знаком с самим Android и не уверен, каким должен быть мой поисковый запрос.

Итак, в моем собственном коде react мой клиент добавил следующий network_security_config.xml файл по android/app/src/main/res/xml пути:

 <?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">_my_clients_ip</domain>
    </domain-config>
</network-security-config>
 

и, следовательно, они добавили следующее в AndroidManifest.xml файл по android/app/src/main пути:

 .
.
<application
.
.
        android:networkSecurityConfig="@xml/network_security_config"
</application>
.
.
 

Точки выше указывают на другие атрибуты и теги, которые я опустил для краткости.

Моя проблема

Я использую эмулятор Android для тестирования своего приложения React Native.
Пока вышеуказанного xml не было, мое приложение react native функционировало нормально. Однако с учетом вышеприведенного добавления, когда я запускаю свое приложение react native с помощью команд (в 2 разных терминалах):

 $ npx react-native start --reset-cache
$ npx react-native run-android
 

Приложение загружается в эмулятор, но, похоже, оно отключено от пакета metro (работает терминал npx react-native start --reset-cache ).

Я пытаюсь нажать r клавишу в этом терминале, чтобы проверить, работает ли перезагрузка, и она выводит:

 warn No apps connected. Sending "reload" to all React Native apps failed.
Make sure your app is running in the simulator or on a phone connected via USB.
 

Хотя я не совсем понимаю, почему. Если бы я убрал то android:networkSecurityConfig="@xml/network_security_config" из того AndroidManifest.xml , то все было бы хорошо.

Как мне решить эту проблему?

Ответ №1:

Вы можете попробовать добавить домены локального хоста в XML-файл :

 <?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">_my_clients_ip</domain>
        <domain includeSubdomains="true">127.0.0.1</domain>
        <domain includeSubdomains="true">10.0.0.1</domain>
        <domain includeSubdomains="true">localhost</domain>
    </domain-config>
</network-security-config>