Android- Framework 非Root权限实现修改hosts
一、背景
修改system/etc/hosts,需要具备root权限,而且remount后,才能修改,本文介绍非root状态下修改system/etc/hosts方案。
环境:高通 Android 13
二、方案
非root,system/etc/hosts只有只读权限,无权限修改,如果需要修改,需要将system/etc/hosts软链到data目录,然后就可以达到修改的效果。
三、实现步骤
1、实现软链
1.1 将system/etc/hosts软链到/data/misc/hosts,涉及到的文件如下:
android/system/core/rootdir/Android.mk
LOCAL_POST_INSTALL_CMD += ; ln -sf /data/misc/hosts $(TARGET_OUT_ETC)/hosts
1.2 屏蔽原来的system/etc/hosts 拷贝动作,涉及到的mk文件修改如下
device/generic/uml/uml.mk
device/generic/goldfish/minimal_system.mk
build/make/target/product/base_system.mk
device/generic/trusty/qemu_trusty_base.mk
在以上文件中,找到system/core/rootdir/etc/hosts:system/etc/hosts语句,并删除或者注释掉,下面列出其中一个uml.mk的修改方法,其他类似:
PRODUCT_COPY_FILES += \system/core/rootdir/init.usb.rc:system/etc/init/hw/init.usb.rc \system/core/rootdir/init.usb.configfs.rc:system/etc/init/hw/init.usb.configfs.rc \# system/core/rootdir/etc/hosts:system/etc/hosts
1.3 1.2中拷贝时机不对,因此,参考env.txt的拷贝实现逻辑,在qssi/LA.QSSI.13.0/LINUX/android/vendor/qcom/proprietary/prebuilt_HY11/target/product/qssi/prebuilt.mk中实现system/etc/hosts拷贝,这个修改很关键,将决定是否能将system/etc/hosts编译到out目录下
PRODUCT_COPY_FILES += vendor/qcom/proprietary/prebuilt_HY11/target/product/qssi/system/etc/hosts:system/etc/hosts
编译完后,可以不用刷机,先查看是否软链成功,软链成功,out目录如下将可以查看如下(不同平台,目录可能不一样):

1.4 根据上面的修改后,原来的system/etc/hosts是软链到data/misc/hosts,为了兼容以前的system/etc/hosts中的值,因此,需要开机时,检测 一下data/misc/hosts中是否有该文件,如果没有,需要启动脚本,写入初始值一次,详细实现请看下面
2、开机启动脚本
原理:定义一个开机自启一次service,检测data/misc/hosts是否存在
2.1 external 目录下,新建一个copyhost目录
2.2 定义一个Android.mk,/external/copyhost/Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := copyhost
LOCAL_MODULE := copyhost
LOCAL_MODULE_CLASS := EXECUTABLES
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_PATH := $(PRODUCT_OUT)/system/bin
LOCAL_INIT_RC := copyhost.rc
include $(BUILD_PREBUILT)
2.3 定义一个copyhost脚本,/external/copyhost/copyhost
#!/system/bin/shfilePath="/data/misc/hosts"
TAG="copyhost"
echo "start copyhost"
log -t "$TAG" "begin copyhost"if [ ! -f "$filePath" ]; thenlog -t "$TAG" "$filePath not exit,write value"echo "文件不存在:$file"echo "127.0.0.1 localhost" >$filePathecho "::1 ip6-localhost" >> $filePathecho "127.0.0.1 hostname" >> $filePath
elseecho "文件存在:$file"log -t "$TAG" "$filePath exit"
fi
2.4 定义copyhost.rc,/external/copyhost/copyhost.rc
service copyhost /system/bin/sh /system/bin/copyhostclass mainuser rootgroup rootdisabledoneshotseclabel u:r:init:s0on property:sys.boot_completed=1start copyhost
2.5 将copyhost 服务添加到构建模块,vendor/qcom/proprietary/prebuilt_HY11/target/product/qssi/prebuilt.mk
PRODUCT_PACKAGES += copyhost
3、编译镜像验证

四、host简介
1、概念
Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”
2、修改host作用
强制指定域名的 IP,加快域名解析 (省略了联网查询 DNS 的步骤),也能绕过 DNS 污染与劫持。
为局域网某些 IP 的机器配置一个“网址别名”,方便自己记忆和访问。比如配置一个 nas.com 访问局域网里的 NAS;gongsi 访问公司网站等等。
将域名指向到不可访问的IP地址,达到屏蔽不健康网站、屏蔽垃圾广告网址的效果;同理也能禁止系统、软件、网站访问某些指定的网址;
开发或测试应用时,利用 hosts 将域名临时指向到测试服务器IP,可以方便自己测试,同时又不影响他人和线上的应用。
附补丁链接:https://download.csdn.net/download/banzhuantuqiang/89503999
相关文章:
Android- Framework 非Root权限实现修改hosts
一、背景 修改system/etc/hosts,需要具备root权限,而且remount后,才能修改,本文介绍非root状态下修改system/etc/hosts方案。 环境:高通 Android 13 二、方案 非root,system/etc/hosts只有只读权限&…...
mac安装达梦数据库
参考:mac安装达梦数据库 实践如下: 1、下载达梦Docker镜像文件 同参考链接 2、导入镜像 镜像可以随便放在某个目录,相当于安装包,导入后就没有作用了。 查找达梦镜像名称:dm8_20240613_rev229704_x86…...
14-41 剑和诗人15 - RLAIF 大模型语言强化培训
介绍 大型语言模型 (LLM) 在自然语言理解和生成方面表现出了巨大的能力。然而,这些模型仍然存在严重的缺陷,例如输出不可靠、推理能力有限以及缺乏一致的个性或价值观一致性。 为了解决这些限制,研究人员采用了一种名为“人工…...
每日一题~oj(贪心)
对于位置 i来说,如果 不选她,那她的贡献是 vali-1 *2,如果选他 ,那么她的贡献是 ai. 每一个数的贡献 是基于前一个数的贡献 来计算的。只要保证这个数的前一个数的贡献是最优的,那么以此类推下去,整体的val…...
成人高考报名条件及收费标准详解
成人高考报名条件及收费标准详解 您想通过成人高考改变自己的命运,但不知道报名条件和收费标准?本文将为您详细介绍成人高考报名条件和收费标准,并为您提供专业的成人教育服务。 深圳成人高考www.shenzhixun.com 成人高考报名条件 成人高考…...
openmetadata1.3.1 自定义连接器 开发教程
openmetadata自定义连接器开发教程 一、开发通用自定义连接器教程 官网教程链接: 1.https://docs.open-metadata.org/v1.3.x/connectors/custom-connectors 2.https://github.com/open-metadata/openmetadata-demo/tree/main/custom-connector (一&…...
PostgreSQL 如何优化存储过程的执行效率?
文章目录 一、查询优化1. 正确使用索引2. 避免不必要的全表扫描3. 使用合适的连接方式4. 优化子查询 二、参数传递1. 避免传递大对象2. 参数类型匹配 三、减少数据量处理1. 限制返回结果集2. 提前筛选数据 四、优化逻辑结构1. 分解复杂的存储过程2. 避免过度使用游标 五、事务处…...
普中51单片机:数码管显示原理与实现详解(四)
文章目录 引言数码管的结构数码管的工作原理静态数码管电路图开发板IO连接图代码演示 动态数码管实现步骤数码管驱动方式电路图开发板IO连接图真值表代码演示1代码演示2代码演示3 引言 数码管(Seven-Segment Display)是一种常见的显示设备,广…...
web缓存代理服务器
一、web缓存代理 web代理的工作机制 代理服务器是一个位于客户端和原始(资源)服务器之间的服务器,为了从原始服务器取得内容,客户端向代理服务器发送一个请求,并指定目标原始服务器,然后代理服务器向原始…...
容器:queue(队列)
以下是关于queue容器的总结 1、构造函数:queue [queueName] 2、添加、删除元素: push() 、pop() 3、获取队头/队尾元素:front()、back() 4、获取栈的大小:size() 5、判断栈是否为空:empty() #include <iostream> #include …...
探索 WebKit 的后台同步新纪元:Web Periodic Background Synchronization 深度解析
探索 WebKit 的后台同步新纪元:Web Periodic Background Synchronization 深度解析 随着 Web 应用逐渐成为我们日常生活中不可或缺的一部分,用户对应用的响应速度和可靠性有了更高的期待。Web Periodic Background Synchronization API(周期…...
ctfshow web入门 web338--web344
web338 原型链污染 comman.js module.exports {copy:copy };function copy(object1, object2){for (let key in object2) {if (key in object2 && key in object1) {copy(object1[key], object2[key])} else {object1[key] object2[key]}}}login.js var express …...
mupdf加载PDF显示中文乱码
现象 加载PDF显示乱码,提示非嵌入字体 non-embedded font using identity encoding调式 在pdf-font.c中加载字体 调试源码发现pdf文档的字体名字居然是GBK,估计又是哪个windows下写的pdf生成工具生成pdf 字体方法: static pdf_font_desc * load_cid…...
常用的限流工具Guava RateLimiter 或Redisson RRateLimiter
在分布式系统和高并发场景中,限流是一个非常常见且重要的需求。以下是一些常用的限流工具和库,包括它们的特点和使用场景: 1. Guava RateLimiter Google 的 Guava 库中的 RateLimiter 是一个简单且高效的限流工具,适用于单节点应…...
卷积神经网络(CNN)和循环神经网络(RNN) 的区别与联系
卷积神经网络(CNN)和循环神经网络(RNN)是两种广泛应用于深度学习的神经网络架构,它们在设计理念和应用领域上有显著区别,但也存在一些联系。 ### 卷积神经网络(CNN) #### 主要特点…...
Unity【入门】场景切换和游戏退出及准备
1、必备知识点场景切换和游戏退出 文章目录 1、必备知识点场景切换和游戏退出1、场景切换2、鼠标隐藏锁定相关3、随机数和自带委托4、模型资源的导入1、模型由什么构成2、Unity支持的模型格式3、如何指导美术同学导出模型4、学习阶段在哪里获取模型资源 2、小项目准备工作需求分…...
Python 函数递归
以下是一个使用递归计算阶乘的 Python 函数示例 : 应用场景: 1. 动态规划问题:在一些需要逐步求解子问题并利用其结果的动态规划场景中,递归可以帮助直观地表达问题的分解和求解过程。 2. 遍历具有递归结构的数据:如递…...
MyBatis(27)如何配置 MyBatis 实现打印可执行的 SQL 语句
在开发过程中,打印可执行的SQL语句对于调试和性能优化是非常有帮助的。MyBatis提供了几种方式来实现SQL语句的打印。 1. 使用日志框架 MyBatis可以通过配置其内部使用的日志框架(如Log4j、Logback等)来打印SQL语句。这是最常用的方法。 Lo…...
3.js - 裁剪平面(clipIntersection:交集、并集)
看图 代码 // ts-nocheck// 引入three.js import * as THREE from three// 导入轨道控制器 import { OrbitControls } from three/examples/jsm/controls/OrbitControls// 导入lil.gui import { GUI } from three/examples/jsm/libs/lil-gui.module.min.js// 导入tween import …...
在5G/6G应用中实现高性能放大器的建模挑战
来源:Modelling Challenges for Enabling High Performance Amplifiers in 5G/6G Applications {第28届“集成电路和系统的混合设计”(Mixed Design of Integrated Circuits and Systems)国际会议论文集,2021年6月24日至26日,波兰洛迪} 本文讨…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
