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"