web-dev-qa-db-fra.com

Le trafic HTTP en texte clair vers myserver.com n'est pas autorisé sur Android N preview

Hier, j'ai eu une nouvelle mise à niveau pour l'aperçu Android N. Depuis que j'ai mis à niveau, je ne peux plus démarrer mon application.

Java.io.IOException: Cleartext HTTP traffic to myserver.com not permitted

J'ai essayé de définir usesCleartextTraffic sur true dans le manifeste ou d'ajouter un 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>

Ni l'un ni l'autre n'a fonctionné. Des idées sur ce qui se passe là-bas?

Lorsque j'essaie de définir networkSecurityConfig dans le manifeste, j'obtiens une erreur de compilation

Error:(35) No resource identifier found for attribute 'networkSecurityConfig' in package 'Android'

Je ne sais pas vraiment pourquoi. Le fichier est là et tout a l'air bien.

Trouvé cette suggestion dans le Android tracker problème de Google. Ils suggèrent de déplacer le network_security_config définition au meta-data. J'ai toujours la même exception.

11
SimonSays

Il existe un problème connu dans Android N Developer Preview 4 où, si une application modifie son ApplicationInfo.flags, Elle déclenche le blocage du trafic en texte clair de l'application, même si l'application n'a pas ne demande pas que le trafic en texte clair soit bloqué. Le correctif se trouve dans la prochaine prévisualisation du développeur. Ainsi, cela n'a rien à voir avec votre configuration de sécurité réseau. En fait, il semble que vous n'ayez même pas besoin de déclarer une configuration de sécurité réseau personnalisée .

Si vous ne pouvez pas attendre la prochaine Android N Developer Preview, vérifiez votre application pour les endroits où elle modifie sa propre ApplicationInfo.flags. En général, cela prend la forme de getApplicationInfo().flags &= ApplicationInfo.FLAG_DEBUGGABLE ou getApplicationInfo().flags = ApplicationInfo.FLAG_DEBUGGABLE. Le correctif pour ces utilisations est (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE).

Alternativement, comme solution de contournement, appelez NetworkSecurityPolicy.isCleartextTrafficPermitted() le plus tôt possible dans le cycle de vie de votre application. Cette solution de contournement devrait fonctionner si elle est invoquée avant le code qui altère ApplicationInfo.flags.

14
Alex Klyubin
Android:usesCleartextTraffic="true"

mettre cette ligne dans la balise d'application dans le fichier manifeste

8
Makvin

Essayez une seule ligne dans votre balise d'application

Android: usesCleartextTraffic = "true"

<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
    <uses-permission Android:name="Android.permission.INTERNET" />
    <application
       ...
       Android:usesCleartextTraffic="true"
       ...>
    </application>
</manifest>
5
Sanjay Hadiya

Créez un fichier XML res/xml/network_security_config.xml

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

Référencez ce fichier dans votre application Tag, dans AndroidManifest.xml. Comme:

Android:networkSecurityConfig="@xml/network_security_config"
1
babin raj