StevGuo系列文章翻译之Android系统属性

Android属性系统分析 目录 什么是属性系统 属性的操作 属性的分类 属性系统架构设计 Property 机制总结 Init进程加载调用 JAVA层封装 什么是属性系统 属性系统是Android的一个重要特性。它作为一个服务运行,管理系统配置和状态,所有的系统配置和状态都是属性,每个属性都是以键值对(key/value),其类型都是字符串。 属性的操作 方法 key value 功能 getprop 属性名 获取属性值 setprop 属性名 属性 阅读详情

StevGuo系列文章翻译之Android系统属性  

每一个属性都是一个名值对,名和值都是文本。Android系统中,属性被大量使用,用来记录系统设置或者在进程间交换信息。属性在整个系统中是可见的,每一个进程都可以get/set属性。

系统初始化时,在init这个daemon中,Android会分配一些内存来存储这些属性,Init源码在/system/init中。Init这个daemon会开启一个运行在init进程中的property service,每一个想设置属性的client都需要连接到这个property service上去,然后向它发送消息,property service会在共享内存中更新/创建属性。查询属性的client都会从共享内存中直接读取属性,这就提高了读取效率。

Client程序会调用libcutils中关于get/set的API,而libcutils的源码位于/libs/cutils。API如下:

int property_get(const char *key, char *value, const char *default_value);
int property_set(const char *key, const char *value);

libcutils会通过调用libc中的__system_property_xxx函数在共享内存中获取属性。Libc的源码在/system/bionic中。

Property Service也是通过调用libc中的__system_Property_init函数来初始化存储属性的共享内存的。PropertyService初始过程中会从以下文件中加载默认属性:

/default.prop
/system/build.prop
/system/default.prop
/data/local.prop

上面就是属性被加载的顺序。属性重复时,后加载的值会覆盖先加载的值。最后被加载的是存储在/data/property中的persistent property。

 

特殊属性 

如果一个属性名字以“ro.”开头,那么这个属性会被当作只读属性。一旦被设置,属性值永远不会被改变。

如果属性名以“persistent.”开头,那么set这个属性时,属性的值会被写到/data/property中去。

如果属性名以“net.”开头,set属性时,属性名会被添加到“nent.change”文件中。Netresolve模块用这个属性来跟踪net.*属性是否被改变了。

属性“ctl.start”和“ctl.stop” 用来开启或者停止一个服务。每一个服务必须被定义在/init.rc中。在系统启动时,init这个daemon会解析init.rc来开启Property Service。一旦有设置“ctl.start”的请求,PropertyService就会使用属性值作为名字找到并启动服务,服务的启动结果被放到属性“init.svc.<service name>”中。Client程序通过检查这个值来获取结果。

 

Android的toolbox 

Android的toolbox提供了两个小工具:setprop和getprop,分别用来set/get属性。使用方法如下:

getprop <property name>
setprop <property name> <property value>

Java程序可以使用System.getProperty()/System.setProperty来get/set属性。

默认情况下,设置属性只能通过“init”daemon来向共享内存中写,不会执行任何脚本或者程序。但你可以在init.rc中添加动作来对属性更新做出响应。例如,在默认的init.rc中,你可以发现下面这些东西:

# adbd on at boot in emulator

on property:ro.kernel.qemu=1 

start adbd


on property:persist.service.adb.enable=1
 

start adbd 

 

on property:persist.service.adb.enable=0 

 stop adbd

所以,如果你把persist.service.adb.enable设置为1的话,“init”daemon就会启动adbd服务。

 

[Android 13]探索ctl.属性控制服务的实现 从上面可知到当socket对端,也就是属性写入端发来数据时唤醒property-service线程,然后将消息入队,唤醒init主线程处理,第二个问题找到答案了,最后一个问题,属性控制事件怎么来的,谁发送的?搜索,实际是在bionic/libc/bionic/system_property_set.cpp中,属性写入是被libc实现为标准API了,所以每个地方写入属性都会调用到这里。这个队列中的,查找这个队列的流程,得到第二个问题的流程。根据属性的前缀,走不同的分支,我们例子看的是。开头的, 其他的同理。 阅读详情

相关推荐

【新华三】通过路由复制实现Public与VRF路由互通

如上图所示,S6900设备里有两张表,一张是public路由表,默认所有的路由都存放在public路由表里;除此之外还创建了VRF test,因此此设备还有VRF test路由表。通过路由复制实现Public路由和VRF路由互通,默认情况下VRF里的路由单独一张路由表,默认情况下与public路由表相互隔离,两张表之间不可互访。此时的public路由表里面并没有test的路由表。public路由表与VRF路由表之间相互隔离。此时VRF test里的路由也没有其他VRF或Public里的路由,相互隔离。

五大连池的镜子 5278

android ctl属性的实现过程

对于android开机动画的启动和停止,在代码中是通过调用property_service.c中的property_set实现的,代码如下:   property_set(“ctl.start”, “bootanim”);   property_set(“ctl.stop”, “bootanim”);   当然也可以通过命令行来控制,命令如下:   #setprop ctl

开心陈的专栏 1万+

交换芯片数据通路四大核心微架构深度解析

数据通路是交换芯片性能的物理根基,决定着低延迟、高吞吐与突发承载能力。其本质是在硅片约束下对带宽、时序、功耗与统计复用的系统性权衡。Crossbar提供确定性低延迟但受RC延迟与功耗制约;VOQ通过虚拟队列隔离输出争抢,却引入仲裁复杂度与内存开销;Shared Buffer依托统计复用提升缓存利用率,但面临碎片化与管理策略挑战;Cell Fabric以固定长度cell重构交换粒度,在AI与金融等小包敏感场景实现尾延迟稳定。这些架构并非替代关系,而是面向不同网络不确定性(如流量不对称性、突发强度、包长分布)的

weixin_32667955的博客 189

Android start stop命令使用(十七)

1.重启framwork # adb shell stop && adb shell start 2.源码位置:在system/core/toolbox/start.c下面,原理很简单就是利用ctl属性来控制进程。 //start命令 #include <string.h> #include <stdio.h> #include <stdlib.h...

Android系统攻城狮 3399

ADS仿真过孔阻抗(via designer)

目录一、将PCB层叠导入ADS(个人习惯)二、过孔的参数化设置三、过孔的仿真四、仿真结果查看五、导出仿真结果和模型六、过孔的经验法则欢迎交流,欢迎转载,转载请注明出处~ 工具:Via Designer Via Designer 调用的是ADS EMPro 仿真引擎,采用的FEM(三维全波有限元法)。 优点: 1、利用ADS已经做好的参数化和流程化的设计,不需要工程师完成过孔的建模这一繁琐的过程。 2、可以输出EMmodule 完成原理图协仿真。 一、将PCB层叠导入ADS(个人习惯) 个人认为在ADS中设置

luohuo9844的博客 1万+

别再死磕Excel了!用Vensim PLE免费版,30分钟搞定你的第一个系统动力学模型

本文介绍如何使用Vensim PLE免费版在30分钟内构建第一个系统动力学模型,无需编程或数学基础。通过个人储蓄增长案例,详细讲解因果回路图绘制、存量流量图创建及方程编写,帮助读者掌握动态系统建模与仿真技巧,适用于理财、项目管理等多种场景。

weixin_29045001的博客 328

android常用命令

1. Android是基于Linux操作系统,Linux大部分命令在Android上是可用的,比如 ps、top、free、vi、cat、kill等这种常见命令 2.Android自己独有的命令 (1)pm (package manager) usage: pm list packages [-f] [-d] [-e] [-s] [-3] [-i] [-u] [--user USER_I...

xiaozihui的专栏 957

PCL点云DBSCAN聚类算法:基于密度的点云聚类

核心点是在给定半径内拥有足够多邻居点的点,边界点是在给定半径内没有足够多邻居点但是位于核心点的邻域内的点,噪声点是既不是核心点也不是边界点的点。本文将介绍PCL中的DBSCAN(基于密度的空间聚类应用噪声)算法,用于点云数据的聚类。上述示例代码首先从PCD文件中读取点云数据,并设置了DBSCAN聚类的参数,包括邻域搜索半径(epsilon)和邻域内最小点数(min_points)。需要注意的是,示例代码中的点云数据格式为pcl::PointXYZ,如果使用其他类型的点云数据,需要相应地修改代码。

LpmShell的博客 1237

StevGuo系列文章翻译之Talking about Android process

通过这个篇文章,我们会了解关于Android进程管理的相关信息。首先我们看一下Android完成boot后加载的进程: USER PID PPID VSIZE RSS WCHAN PC NAME root 1 0 264 176 c00acc6c 0000c36c S /init root 28 1 724 308 c0051354 afe0c4cc S /system/bin/sh sy

dzhj11的专栏 618

爬虫实战:拆解WASM加密参数,破局2026电商动态接口反爬(实测某头部电商可用)

sign和wasm_token,而且每次请求这两个参数都在动态变化。用常规的参数拼接、MD5加密尝试还原,结果全是403;反编译前端JS,发现核心加密逻辑被打包成了.wasm,把关键参数加密、签名逻辑藏在二进制模块里,让爬虫无法直接逆向JS拿到加密规则。前后折腾了5天,从WASM文件解析、JS与WASM交互逻辑拆解,到本地还原加密参数、实战验证,踩了无数坑(比如WASM版本不兼容、内存数据读取失败、加密依赖环境缺失),最终成功还原了加密流程,稳定爬取商品详情、价格、销量等核心数据,连续运行72小时无封禁。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1912

SerDes学习笔记:DFE均衡架构示例(USB3.1、PCIe3.0\4.0)

本文探讨了DFE均衡器架构在不同数据接口中的应用特性。研究表明,抽头数量随数据速率提升而增加,1-16抽头架构较为常见。通过PCIeGen3/4实例分析,对比了单抽头、双抽头和15抽头DFE的性能差异,证明多抽头结构能通过精细调节有效提升噪声容限和降低误码率。文章详细阐述了DFE工作原理,包括其通过反馈信号对输入信号的补偿机制,以及不同抽头对消除码间干扰的作用。实验采用8Gbps速率(125ps/UI)进行波形仿真,直观展示了均衡处理前后的信号变化,为理解信道均衡技术提供了重要参考。

一只豌豆象的博客 517

StevGuo系列文章翻译之Android中禁止屏保

<br />在Android内部,屏保被称为Key guard screen。有两种方法禁止屏保。<br /><br />我们可以手动把“device_provisioned”系统属性设置“0”。但是,由于来电时,Phone程序会检查这个设置,可能会导致来电处理不<br /> <br />了。因为开发者不需要处理来电,这个方法对我来说非常方便。<br /><br />我们还可以在Java程序中禁掉它。关于具体的做法,可以参考PhoneApp.java如何开启和禁止屏保的方法。<br /><br />如果你对

农场老马的专栏 2375

【知识分享】IBIS 建模指南 05

本文详细阐述了IBIS模型创建过程中的关键技术和数据规范要求。主要内容包括:1. 数据完整性检查要点,强调I-V和V-T数据必须覆盖所有工艺角且匹配;2. 数据限制处理方法,介绍100/1000点限制下的两种数据筛选算法;3. 特殊数据处理技术,包括内部终端电阻调整和V-T表时间窗口选择;4. 高级关键字应用,涵盖[ModelSelector]、[Sub model]、[DiffPin]等复杂功能实现方法;5. 预加重缓冲器等特殊结构的建模方案。

一只豌豆象的博客 1593

StevGuo系列文章翻译之Android中的输入事件如何分发

<br />输入事件分发的源头在WindowManagerService.java中,它创建了一个线程从KeyInputQueue.java中读取输入事件并通过Binder分发给当前聚焦的Window:<br />// Retrieve next event, waiting only as long as the next repeat timeout.  If the configuration has changed, then don't wait at all -- we'll report th

农场老马的专栏 2316

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

StevGuo系列文章翻译之Android内存泄漏检测

<br />编译完Android源码后,会得到两个bionic动态C库,libc.so和libc_debug.so,为了能够检测内存泄漏,我们应该首先在Android的rootfs中用libc_debug.so替换libc.so。在libc_debug.so库中,Android隐藏了两个可以用来检测内存泄漏的API:<br />void get_malloc_leak_info(uint8_t** info, size_t* overallSize, size_t* infoSize, size_t* to

农场老马的专栏 4013

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

StevGuo系列文章翻译之Android电源管理

上图展示了Android电源管理的整体设计框架。Android实现了一个非常简单的电源管理机制,目前,它只支持screen on/off,screen backlight on/off,keyboard backlight on/off,button backlight on/off和调整screen亮度。不支持sleep,standby等更加充分利用CPU能力的模式。 电源管理模块通过三个途径接收输入:RPC调用,电池状态改变事件和电源设置改变事件。与其它模块通信时,使用Intent广播或者直

农场老马的专栏 2026

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

上一篇: Talking about Android Initialization Process
下一篇: 动态库so打包到android apk
jackie_gnu
博客等级 码龄16年 3粉丝 114原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值