报错,明文链接不支持
java.io.IOException: Cleartext HTTP traffic to 100.107.1.1 not permitted at com.android.okhttp.HttpHandler$CleartextURLFilter.checkURLPermitted(HttpHandler.java:127) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:462) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:411) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:542) at com.alibaba.sdk.android.oss.common.utils.HttpdnsMini$QueryHostTask.call(HttpdnsMini.java:138) at com.alibaba.sdk.android.oss.common.utils.HttpdnsMini$QueryHostTask.call(HttpdnsMini.java:120) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
CleartextURLFilter.checkURLPermitted() 是一个用于检查是否允许通过明文(非加密)方式访问URL的方法,它在Android中的网络安全策略中起作用。在较新的Android版本中,默认情况下禁止明文流量的使用。
解决方法:
1、链接使用https
2、强制使用明文
尽量使用https,确实不方便就强制允许,方法如下
方法1
在Application onCreate 方法里
setCleartextTrafficPermitted方法是隐藏的,因为我正在用Xposed,所以直接用xposed调了,无xposed用反射方法调用隐藏方法,我懒得写了
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { NetworkSecurityPolicy policy = NetworkSecurityPolicy.getInstance(); if (policy != null && !policy.isCleartextTrafficPermitted()) { // 允许明文流量 XposedHelpers.callMethod(policy, "setCleartextTrafficPermitted", true); L.i(TAG, "allow CleartextTraffic:" + policy.isCleartextTrafficPermitted()); } }
方法2
在app/src/main/res/xml 下面创建文件network.xml (名字随意,后面对应上就行),写入
<network-security-config> <base-config cleartextTrafficPermitted="true" /> </network-security-config>
然后在AndroidManifest.xml文件的Application标签中加入一行
android:networkSecurityConfig="@xml/network"
发表评论