Android- Framework 非Root权限实现修改hosts

news/2024/7/8 2:22:17 标签: android

一、背景

修改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/sh

filePath="/data/misc/hosts"
TAG="copyhost"                                                                                                         
echo "start copyhost"                                                                                                  
log -t "$TAG" "begin copyhost"

if [ ! -f "$filePath" ]; then
	log -t "$TAG" "$filePath not exit,write value"
	echo "文件不存在:$file"
	echo "127.0.0.1       localhost" >$filePath
	echo "::1             ip6-localhost" >> $filePath
	echo "127.0.0.1       hostname" >> $filePath
else
    echo "文件存在:$file"
	log -t "$TAG" "$filePath exit"
fi

2.4 定义copyhost.rc,/external/copyhost/copyhost.rc

service copyhost /system/bin/sh /system/bin/copyhost
    class main
    user root
    group root
    disabled
	oneshot
    seclabel u:r:init:s0

on property:sys.boot_completed=1
    start 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


http://www.niftyadmin.cn/n/5536243.html

相关文章

配置 DNS基础服务

一、DNS原理 解析过程 用户在浏览器中输入域名,例如“www.example.com”。浏览器检查自身缓存中是否有该域名对应的 IP 地址。如果有,则直接使用该 IP 地址访问网站。如果浏览器缓存中没有,操作系统会检查本地的 hosts 文件,查看…

智能井盖采集装置 开启井下安全新篇章

在现代城市的脉络之下,错综复杂的管网系统如同城市的血管,默默支撑着日常生活的有序进行。而管网的监测设备大多都安装在井下,如何给设备供电一直是一个难题,选用市电供电需经过多方审批,选用电池供电需要更换电池包&a…

mac显示隐藏的.git文件

打开终端 输入命令 defaults write com.apple.finder AppleShowAllFiles YES killall Finder

揭开Kafka的神秘面纱:你不知道的内幕

引言 随着大数据和实时流处理技术的不断发展,Kafka作为一种高吞吐量、低延迟的分布式消息系统,得到了广泛的应用。本文将深入探讨Kafka的定义、架构、工作原理、应用场景、安装与配置、常用命令、高级特性以及优化与调优策略,帮助读者全面了解…

嵌入式硬件电路常用设计软件

目录 1. Cadence Allegro 2. PADS 3. Altium Designer 4. Multisim 5. Protues 1. Cadence Allegro 功能: Cadence Allegro是Cadence公司推出的先进PCB(Printed Circuit Board,印刷电路板)设计布线工具,也是目前…

如何安装“ Visual Studio Community 2015“?

一、下载 下载地址(这里只提供Community版) https://download.microsoft.com/download/5/d/1/5d1ec81e-bc59-448f-9ab6-27636d5cc18a/vs2015.3.com_chs.iso 二、安装 点击下载的文件,打开 安装在D盘下,选择自定义,点击下一步 只做C开发的话…

基于Python+Pytest+Playwright的UI自动化测试框架

文章目录 一、框架介绍二、实现功能三、框架目录结构四、依赖库五、安装教程六、如何创建用例1. 修改配置文件 `config.settings.py`2.删除框架中的示例用例数据3. 编写测试用例七、运行自动化测试方式一:使用pipenv管理虚拟环境1. 激活已存在的虚拟环境2. 运行方式二:依赖包…

Linux-Kafka 3.7.0 Kraft+SASL认证模式 集群安装与部署超详细

1.集群规划 一般模式下,元数据在 zookeeper 中,运行时动态选举 controller,由controller 进行 Kafka 集群管理。kraft 模式架构(实验性)下,不再依赖 zookeeper 集群,而是用三台 controller 节点…