Android System Property 解析

Android是如何使用selinux来保护系统属性的 Android是如何使用selinux来保护系统属性的尝试获取Android设备的序列号SerialNo1 Build.SERIAL新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 尝试获取Android设备的序列号Seri 阅读详情


一 System Property

      今天在折腾HDMI 显示,为Setting提供接口,遇到很多跟Android系统属性相关的问题.因此,顺便分析和总结一些.

  android的代码中大量存在:SystemProperties.set()/SystemProperties.get();通过这两个接口可以对系统的属性进行读取/设置,顾名思义系统属性,肯定对整个系统全局共享。通常程序的执行以进程为单位各自相互独立,如何实现全局共享呢?为了让大家有个映像深刻的总体认识,请看下图:


       System Properties是怎么一回事,又是如何实现的呢?

       属性系统是android的一个重要特性。它作为一个服务运行,管理系统配置和状态。所有这些配置和状态都是属性。

每个属性是一个键值对(key/value pair),其类型都是字符串。

这些属性可能是有些资源的使用状态,进程的执行状态,系统的特有属性……

       可以通过命令adb shell :

    getprop查看手机上所有属性状态值。

       或者 getprop init.svc.bootanim制定查看某个属性状态

       使用setprop init.svc.bootanim start 设置某个属性的状态

特别属性 :

  如果属性名称以“ro.”开头,那么这个属性被视为只读属性。一旦设置,属性值不能改变。

  如果属性名称以“persist.”开头,当设置这个属性时,其值也将写入/data/property。

  如果属性名称以“net.”开头,当设置这个属性时,“net.change”属性将会自动设置,以加入到最后修改的属性名。

    (这是很巧妙的。 netresolve模块的使用这个属性来追踪在net.*属性上的任何变化。)

  属性“ ctrl.start ”和“ ctrl.stop ”是用来启动和停止服务。每一项服务必须在/init.rc中定义.系统启动时,与init守护

    进程将解析init.rc和启动属性服务。一旦收到设置“ ctrl.start ”属性的请求,属性服务将使用该属性值作为服务

    名找到该服务,启动该服务。这项服务的启动结果将会放入“ init.svc.<服务名>“属性中。客户端应用程序可以轮询那个属性值,以确定结果。

二 framework访问系统服务流程

  framework通过SystemProperties接口操作系统属性,SystemProperties通过JNI调用访问系统属性。

  \frameworks\base\core\java\android\os\ SystemProperties.java:

复制代码
public class SystemProperties
{
    //JNI
    private static native String native_get(String key, String def);
    private static native void native_set(String key, String def);

    public static String get(String key, String def) {
        return native_get(key, def);
    }

    public static void set(String key, String val) {
        native_set(key, val);
    }
}
复制代码

Jni代码位置:

\frameworks\base\core\jni\android_os_SystemProperties.cpp

获取系统属性 阻塞方式:

static jstring SystemProperties_getSS()
{
        len = property_get(key, buf, "");
} 

操作在\bionic\libc\bionic\system_properties.c中:

int __system_property_get(const char *name, char *value)
{
    //数据已经存储在内存中__system_property_area__ 等待读取完返回
    const prop_info *pi = __system_property_find(name);
    return __system_property_read(pi, 0, value);
} 

       进程启动后数据已经将系统属性数据读取到相应的共享内存中,保存在全局变量__system_property_area__;

进程之间都是独立的,系统属性数据是如何读取到当前进程空间中的呢?后续介绍。

设置属性异步socket通信:

复制代码
int __system_property_set(const char *key, const char *value)
{
      msg.cmd = PROP_MSG_SETPROP;
    strlcpy(msg.name, key, sizeof msg.name);
    strlcpy(msg.value, value, sizeof msg.value);
    err = send_prop_msg(&msg);
}

static int send_prop_msg(prop_msg *msg)
{
    //sokcet 通信 /dev/socket/property_service 
    s = socket(AF_LOCAL, SOCK_STREAM, 0);
    connect(s, (struct sockaddr *) &addr, alen)
    send(s, msg, sizeof(prop_msg), 0)
    close(s);
}
复制代码

  通过socket向property_service发送消息,property_service运行在哪里呢?

三 Property Service创建服务端socket

init进程启动监听过程中:\system\core\init\Init.c

复制代码
int main(
Android系统中prop详解 Android 中很多时候会用到prop的操作,这样的话在系统操作的时候可能会更方便一点。这篇文章就是关于prop的详细使用,以后一定会慢慢补充。 主要分两部分: 1. SystemProperties 类 2. 终端prop命令   首先来看一下SystemProperties类的source code。   package android.os; import java.u 阅读详情

相关推荐

Android 10.0 动态修改ro开头系统属性的值

在10.0 定制化产品开发时,在10.0的产品中为了产品的安全性,ro开头属性值是不能修改的,由于项目需要变成可以修改它的值, 所以这就要从System的开机init.rc中来分析来实现这个功能 android10.0它是在开机的时候从build.prop中读取的属性值 由property_service.cpp来负责系统属性的修改,下面从property_service.cpp来分析相关代码 来看如何实现功能 3.2 动态修改ro开头系统属性的值的功能实现......

安卓兼职framework和app工程师的博客 1993

安卓10源码开发定制(31)安卓系统属性系统之启动属性服务流程分析

一、前言 最近在研究通过添加自定义安卓系统属性的方式来实现控制后台服务启动和停止。如果在关闭selinux的情况下,添加自定义的属性读取、写入比较方便。如果开启selinux的情况下,就显得稍微麻烦一些了。需要为自定义的属性添加seandroid策略,为对应的进程域添加相应的允许规则才能达到修改的目的。在安卓系统中,通过属性控制后台服务启动和停止一个最好的参考例子是adbd进程的配置。在init.rc中,控制adbd启动和停止的参考实现如下: #在"开发者选项"中通过选择"...

xiaomaNo01的专栏 788

FreeModbus从入门到实战:手把手教你用STM32实现工业级Modbus RTU通信

本文详细介绍了如何使用STM32和FreeModbus实现工业级Modbus RTU通信,涵盖硬件搭建、协议栈移植及优化技巧。重点解析了FreeModbus的移植过程,包括串口驱动适配、定时器配置和工业级稳定性优化,为开发者提供了一套完整的工业通信解决方案。

weixin_33737774的博客 348

STC32G电调调试血泪史:从TPH1R403NL MOS管烧毁到PWM信号异常排查全记录

本文详细记录了STC32G无刷电调调试过程中的常见问题与解决方案,包括MOS管烧毁、PWM信号异常等关键故障排查。通过电源系统检测、驱动电路验证及三相平衡调试等实战经验,帮助硬件爱好者快速定位问题,提升电调调试效率。特别针对TPH1R403NL等MOS管的保护措施进行了重点分析。

weixin_33736048的博客 551

手把手教你用EG2153搭建开关电源:SOP-8封装驱动芯片的5个设计技巧

本文详细介绍了使用EG2153自振荡半桥驱动芯片搭建开关电源的五个核心设计技巧。内容涵盖从深入理解芯片工作机制、频率编程计算误区、SOP-8封装的热管理方案,到死区时间评估与外部保护电路设计,以及实战调试与故障排查指南,旨在帮助工程师实现稳定可靠的小功率电源设计。

weixin_29200485的博客 377

从零解析:富斯i6遥控器与STM32的IBUS协议通信实战

本文详细解析了富斯i6遥控器与STM32通过IBUS协议通信的实战指南,涵盖硬件准备、协议解析、驱动实现及常见问题解决。特别适合机器人及智能小车开发者,提供低成本、高可靠性的无线控制方案,助力快速实现多通道控制功能。

weixin_29193359的博客 440

学习海康VisionMaster之圆查找

(1):ROI选中位置修正,并且修正信息需要选择刚刚创建的位置修正组件输出信息,这里的话后续的检测窗口一般都需要做这一步,因为大部分的应用场景都是需要用到实时跟踪的。圆查找模块是用于查找指定区域的圆,并且会输出该圆的相关参数信息,比如圆中心点,圆半径,圆是否存在等信息。7):剔除点数:和高级参数里面的剔除距离搭配使用的,就是过滤较远的边缘点,让拟合圆心出来的轮廓更加接近。中的圆查找,相当于就是拟合圆心,这个在视觉软件中的应用也是非常广泛的,通常用于定位,测量项目。

yuhouxiyang的专栏 2104

K8S部署Java项目(Gitlab CI/CD自动化部署终极版)

每个人都有惰性,但不断学习是好好生活的根本,共勉!

感谢阅读 6954

YOLO-V8训练自己的数据集之标注样本

四、标注样本 4.1、标注样本概述 4.1.1、样本标注主要方法 4.1.2、标注样本概念 4.1.3、标注样本实现方式 4.1.4、常见标注样本软件 4.2、标注工具LabelImg 4.2.1、LabelImg介绍 4.2.2、LabelImg特点 4.2.3、LabelImg安装方法 4.2.4、LabelImg使用方法 4.3、标注样本实操 4.3.1、安装标注软件Labelimg 4.3.2、Labelimg界面介绍 4.3.3、LabelImg实操过程中常

qq_29633789的博客 662

Docker:安装Apache Pulsar 消息队列的详细指南

本文详细介绍了Apache Pulsar的Docker化安装部署方法,包括单节点Pulsar服务和管理界面Pulsar Manager的安装配置。通过Docker命令快速搭建Pulsar环境,并演示了租户和命名空间的基础管理操作。同时提供了Spring Boot项目与Pulsar集成的完整方案,从依赖配置到客户端初始化,为开发人员构建实时消息系统提供实用参考。

木头 2209

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

上一篇: 《Linux Device Drivers》第十章 中断处理——note
下一篇: Git 常用命令
pingfengluo
博客等级 码龄14年 260粉丝 48原创
评论 11
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值