Des utilisateurs d'Android 8 m'ont signalé que mon application (qui utilise le flux principal) n'affiche pas de contenu. Après enquête, j'ai constaté que l'exception suivante se produisait sur Android 8:
08-29 12:03:11.246 11285-11285/ E/: [12:03:11.245, main]: Exception: IOException java.io.IOException: Cleartext HTTP traffic to * not permitted
at com.android.okhttp.HttpHandler$CleartextURLFilter.checkURLPermitted(HttpHandler.java:115)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:458)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:127)
at com.deiw.android.generic.tasks.AbstractHttpAsyncTask.doConnection(AbstractHttpAsyncTask.java:207)
at com.deiw.android.generic.tasks.AbstractHttpAsyncTask.extendedDoInBackground(AbstractHttpAsyncTask.java:102)
at com.deiw.android.generic.tasks.AbstractAsyncTask.doInBackground(AbstractAsyncTask.java:88)
at android.os.AsyncTask$2.call(AsyncTask.java:333)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)
(J'ai supprimé le nom du package, l'URL et d'autres identifiants possibles)
Sur Android 7 et inférieur, tout fonctionne, je ne définis pas android:usesCleartextTraffic
dans le manifeste (et le définir sur true
n'aide pas, c'est la valeur par défaut de toute façon), je n'utilise pas non plus les informations de sécurité réseau. Si j'appelle NetworkSecurityPolicy.getInstance().isCleartextTrafficPermitted()
, il revient false
pour Android 8, true
pour une version plus ancienne, en utilisant le même fichier apk. J'ai essayé d'en trouver une mention sur Google info sur Android O, mais sans succès.
cleartextTrafficPermitted="true"