Android9.0以后不允许HTTP访问的解决方案

背景

自 Android 9.0 起,默认禁止使用 HTTP 进行访问。当尝试使用 HTTP 链接时,将会收到以下错误信息:

"Cleartext HTTP traffic to " + host + " not permitted"

为了解决这一问题,下面介绍两种破解方法:

XML布局设置

在 Android 9.0 及以上版本,需要通过以下配置允许 HTTP 访问。在 android/app/res 目录下新建 network_security_config.xml 文件,内容如下:

<network-security-config><base-config cleartextTrafficPermitted="true"><trust-anchors><certificates src="system" /></trust-anchors></base-config>
</network-security-config>

然后在 android/app 目录下的 AndroidManifest.xml 文件中的 application 标签内声明文件:

android:usesCleartextTraffic="true"
android:networkSecurityConfig="@xml/network_security_config"

其实只需在 AndroidManifest.xml 文件中的 application 标签内声明 android:usesCleartextTraffic="true" 就可以了。如果还有特殊的配置,则需要配置 networkSecurityConfig 文件。另外需要说明的是,networkSecurityConfig 文件中的 cleartextTrafficPermitted 属性会优先于 application 标签内的 usesCleartextTraffic,这意味着,即使在 application 标签中设置了 android:usesCleartextTraffic="false",但在 networkSecurityConfig 文件中设置了 cleartextTrafficPermitted="true",仍然会开启明文传输。

代码设置

为了验证结果,首先需要在 AndroidManifest.xml 文件中的 application 标签内声明文件:

android:usesCleartextTraffic="false"

接下来编写反射工具类,用于调用对象的指定方法:

import android.util.Log;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;/*** 反射工具类,用于调用对象的指定方法*/
public class ReflectionUtil {private static final String TAG = "ReflectionUtil"; // 日志标签/*** 调用对象的指定方法* * @param owner      方法所属的对象实例* @param methodName 方法名* @param b          方法参数,boolean类型* @return 方法的返回值,如果调用失败则返回null*/public static Object invokeMethod(Object owner, String methodName, boolean b) {if (owner == null) {Log.e(TAG, methodName + " not invoked, owner is null"); // 记录错误日志:对象为空无法调用方法return null;}try {Class<?> ownerClass = owner.getClass(); // 获取对象的类Method method = ownerClass.getDeclaredMethod(methodName, boolean.class); // 获取指定方法method.setAccessible(true); // 设置方法为可访问return method.invoke(owner, b); // 调用方法} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {Log.e(TAG, methodName +" not invoked, InvocationTargetException or NoSuchFieldException or IllegalAccessException: " +e.getMessage()); // 记录错误日志:方法调用失败}return null;}
}

最后,通过以下代码设置:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {boolean permittedOld = NetworkSecurityPolicy.getInstance().isCleartextTrafficPermitted(); // 获取旧的 cleartext 流量是否允许Log.i("TAG", "onCreate, permittedOld: " + permittedOld); // 记录旧的 cleartext 流量是否允许的日志// 动态设置 setCleartextTrafficPermitted 方法ReflectionUtil.invokeMethod(NetworkSecurityPolicy.getInstance(), "setCleartextTrafficPermitted", true);boolean permittedNew = NetworkSecurityPolicy.getInstance().isCleartextTrafficPermitted(); // 获取新的 cleartext 流量是否允许Log.i("TAG", "onCreate, permittedNew: " + permittedNew); // 记录新的 cleartext 流量是否允许的日志
}

简而言之,通过 XML 布局和反射设置,可以绕过 Android 9.0 的 HTTP 访问限制。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/782434.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python基础教程】4 . 算法的空间复杂度

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;python基础教程 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、…

最短路-Floyd Dijkstrea

Floyd算法 一种求解“多源最短路”问题的算法 在Floyd算法中&#xff0c;图一般用邻接矩阵存储&#xff0c;边权可正可负&#xff08;但不允许负环&#xff09;&#xff0c;利用动态规划的思想&#xff0c;逐步求解出任意两点之间的最短距离 int d[N][N],初始为无穷 d[i][j…

拌合楼管理软件开发(十三) 对接耀华XK3190-A9地磅(实战篇)

前言: 实战开整 目前而言对于整个拌合楼管理软件开发,因为公司对这个项目还处于讨论中,包括个人对其中的商业逻辑也存在一些质疑,都是在做一些技术上的储备.很早就写好了串口与地磅对接获取代码,也大概知道真个逻辑,这次刚好跟库区沟通,远程连接到磅房电脑,开始实操一下. 一、地…

【极简主义的深度学习】01 概览深度学习

要学习一个东西&#xff0c;需要先想清楚为什么而出发&#xff0c;以及怎么能达到自己想要的效果。当然也不能太执着于自己的目标&#xff0c;沿途的风景也是非常美丽的&#xff0c;如果路边的风景你觉得很美就停下来欣赏&#xff0c;机器学习也一样。对于我来说&#xff0c;是…

GFW不起作用

闲着折腾&#xff0c;刷openwrt到一个小米3G路由器后&#xff0c;GFW不起作用。后面发现是自己电脑设置了DNS&#xff0c;解析完IP后&#xff0c;在经过代代&#xff0c;IP不在GFW的清单里&#xff0c;所以转发控制就没有起作用。 结论 在经过代代前的所有节点&#xff0c;都…

使用Selenium的execute_script方法执行JavaScript代码

Selenium 的 execute_script 方法允许在浏览器上下文中执行 JavaScript 代码。这对于执行一些 WebDriver 本身不提供的操作非常有用&#xff0c;比如直接操作 DOM 元素、执行一些特定的 JavaScript 功能等。这个方法的一般语法是&#xff1a; driver.execute_script(script, *…

Java基础知识总结(30)

注解 获取注解中的值 /*** 自定义注解*/ Target({ElementType.TYPE,ElementType.METHOD}) Retention(RetentionPolicy.RUNTIME) public interface MyAnno { ​String value() default "admin"; // String value(); // int age(); } ​ //若注解属性没有给定属…

一.Git环境

1.Linux安装 sudo apt-get install git2.初次运行Git的配置 当我们安装好Git后&#xff0c;还需要在Git bash或者terminal进行一些相关设置&#xff0c;以下设置仅需设置一次即可。 git config --global user.name "Your Name" git config --global user.email &q…

【C++】反向迭代器

一、前言 在前面对vector等容器的学习中&#xff0c;我们学会了如何去使用正向迭代器并模拟实现 但是我们没有去模拟实现反向迭代器&#xff0c;这篇文章中我们就来了解反向迭代器的底层并实现它&#xff0c;把之前的坑给填上。 二、反向迭代器 反向迭代器的底层设计十分精妙…

python统计分析——灵敏度、特异度和ROC曲线

参考资料&#xff1a;python统计分析【托马斯】 1、灵敏度和特异度 灵敏度&#xff1a;也叫作效能。被检验正确识别出来的阳性结果&#xff08;病人中有疾病且检验结果是阳性的概率&#xff09;。 特异度&#xff1a;被检验正确识别出来的阴性结果&#xff08;病人健康且检验结…

大模型融合方法-DARE

LLM在SFT之后会产生大量的冗余参数(delta参数)&#xff0c;阿里团队提出DARE方法来消除delta参数&#xff0c;并将其合并到PRE模型中&#xff0c;从而实现多源模型能力的吸收。 DARE无需GPU重新训练&#xff0c;其思路非常简单&#xff0c;就跟dropout类似&#xff1a; m t ∼…

针对pycharm打开新项目需要重新下载tensorflow的问题解决

目录 一、前提 二、原因 三、解决办法 一、前提 下载包之前&#xff0c;已经打开了&#xff0c;某个项目。 比如&#xff1a;我先打开了下面这个项目&#xff1a; 然后在terminal使用pip命令下载&#xff1a; 如果是这种情况&#xff0c;你下载的这个包一般都只能用在这一个…

RGB到灰度图像的转换原理及例程

RGB到灰度图像的转换是一种常用的图像处理操作&#xff0c;其原理是根据人眼对不同颜色的敏感度&#xff0c;将彩色图像的红、绿、蓝三个通道的像素值按照一定权重进行加权平均&#xff0c;得到灰度图像的像素值。 在RGB图像中&#xff0c;每个像素点由红、绿、蓝三个分量组成…

自动驾驶轨迹规划之时空语义走廊(一)

欢迎大家关注我的B站&#xff1a; 偷吃薯片的Zheng同学的个人空间-偷吃薯片的Zheng同学个人主页-哔哩哔哩视频 (bilibili.com) 目录 1.摘要 2.系统架构 3.MPDM 4.时空语义走廊 ​4.1 种子生成 4.2 具有语义边界的cube inflation ​4.3 立方体松弛 本文解析了丁文超老师…

如何计算KST指标,昂首资本一个公式计算

在上一篇文章中&#xff0c;Anzo Capital昂首资本和各位投资者一起了解了KST指标&#xff0c;今天我们继续分享如何计算KST指标。 首先投资者可以在时间范围9、12、18和24分析变化率值。 前三个值(时间帧9、12、18)用EMA 26平滑&#xff0c;最后一个值用EMA 39平滑。 然后&…

从0开始搭建基于VUE的前端项目

准备与版本 安装nodejs(v20.11.1)安装vue脚手架(vue/cli 5.0.8) ,参考&#xff08;https://cli.vuejs.org/zh/&#xff09;vue版本&#xff08;2.7.16&#xff09;&#xff0c;vue2的最后一个版本 初始化项目 创建一个git项目&#xff08;可以去gitee/github上创建&#xff…

Windows Edge 兼容性问题修复 基本解决方案

Windows Edge 浏览器兼容性问题可能源于多个方面&#xff0c;以下是一些常见的问题及其处理结果&#xff1a; 插件或扩展冲突&#xff1a;某些第三方插件或扩展可能与Edge浏览器不兼容&#xff0c;导致崩溃或运行异常。处理结果为&#xff0c;尝试禁用所有插件和扩展&#xff…

数据分析之POWER Piovt透视表分析

将几个数据表之间进行关联 生成数据透视表 超级透视表这里的字段包含子字段 这三个月份在前面的解决办法 1.选中这三个月份&#xff0c;鼠标可移动的时候移动到后面 2.在原数据进行修改 添加列获取月份&#xff0c;借助month的函数双击日期 选择月份这列----按列排序-----选择月…

速盾:cdn能防什么攻击

CDN&#xff08;Content Delivery Network&#xff09;是一种分布式网络架构&#xff0c;用于提供高可靠性、高性能的内容传输服务。它通过在世界各地部署服务器节点来缓存和分发网站的静态内容&#xff0c;以优化用户访问体验。除了提供性能优化的功能&#xff0c;CDN还能够防…