HTTP-трафик Cleartext на myserver.com не разрешен на Android N preview
Вчера я получил новое обновление для Android N Preview. С тех пор, как я обновился, я больше не могу запускать свое приложение.
java.io.IOException: Cleartext HTTP traffic to myserver.com not permitted
Я попытался установить usesCleartextTraffic
на true
в манифесте или добавить network_security_config.xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">myserver.com</domain>
</domain-config>
</network-security-config>
Ни один не работал. Есть идеи о том, что там происходит?
Когда я пытаюсь определить networkSecurityConfig в манифесте, я получаю ошибку компиляции
Error:(35) No resource identifier found for attribute 'networkSecurityConfig' in package 'android'
Не совсем уверен, почему. Файл там, и все выглядит хорошо.
Нашел это предложение в трекере проблем Android от Google. Они предлагают перенести определение network_security_config
в meta-data
. Я все еще получаю то же исключение, хотя.
Ответы
Ответ 1
Известная проблема в Android N Developer Preview 4, где, если приложение изменяет свой ApplicationInfo.flags
, оно вызывает блокировку трафика с открытым текстом из приложения, даже если приложение не запрашивает блокировку открытого текста. Исправление находится в следующем предварительном представлении разработчика. Таким образом, это не имеет ничего общего с конфигурацией сетевой безопасности. На самом деле, похоже, вам даже не нужно объявлять пользовательскую конфигурацию сетевой безопасности.
Если вы не можете дождаться следующего предварительного просмотра Android N Developer, проверьте свое приложение на наличие мест, где он изменяет свой собственный ApplicationInfo.flags
. Обычно это принимает форму getApplicationInfo().flags &= ApplicationInfo.FLAG_DEBUGGABLE
или getApplicationInfo().flags = ApplicationInfo.FLAG_DEBUGGABLE
. Исправление для этих обычаев (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE)
.
Альтернативно, как обходной путь, вызовите NetworkSecurityPolicy.isCleartextTrafficPermitted()
как можно раньше в жизненном цикле приложения. Этот обходной путь должен работать, если вызывается перед кодом, который затухает с ApplicationInfo.flags
.
Ответ 2
android:usesCleartextTraffic="true"
поместите эту строку в тег приложения в файле манифеста
Ответ 3
Попробуйте только одну строку в теге приложения
android:usesCleartextTraffic="true"
<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
<uses-permission android:name="android.permission.INTERNET" />
<application
...
android:usesCleartextTraffic="true"
...>
</application>
</manifest>
Ответ 4
Создайте XML res/xml/network_security_config.xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
Ссылайтесь на этот файл в вашем теге Application внутри AndroidManifest.xml. Подобно:
android:networkSecurityConfig="@xml/network_security_config"