初识Android 属性

属性是存储在系统共享内存中的一个个key:value键值对,主要有以下作用:

  • 提供系统公共的信息
  • 进程间通讯
  • 作为rc文件的触发器,用于行为控制

提供系统公共属性
比如获取SDK版本,获取系统语言其实都是通过系统属性得到的

ro.build.version.sdk=30
ro.product.locale=zh-CN

进程间通讯
比如bootanim进程和systemserver进程通过service.bootanim.exit属性通讯。bootanim进程需要通过检测改属性的值是否为1来退出开机动画,systemserver进程设置该属性来告知bootanim进程。

service.bootanim.exit=1

行为控制

on property:ro.debuggable=1# Give writes to anyone for the trace folder on debug builds.# The folder is used to store method traces.chmod 0773 /data/misc/trace# Give reads to anyone for the window trace folder on debug builds.chmod 0775 /data/misc/wmtrace

当ro.debuggable属性被设置成1时,执行下面的语句。

属性在哪里

系统中默认存在很多属性,可以通过adb命令“getprop” 查看。那这些默认的属性是从哪里来的呢?
这些默认的属性是通过init进程加载prop文件得到的,查看PropertyLoadBootDefaults方法

void PropertyLoadBootDefaults() {// TODO(b/117892318): merge prop.default and build.prop files into one// We read the properties and their values into a map, in order to always allow properties// loaded in the later property files to override the properties in loaded in the earlier// property files, regardless of if they are "ro." properties or not.std::map<std::string, std::string> properties;if (!load_properties_from_file("/system/etc/prop.default", nullptr, &properties)) {// Try recovery pathif (!load_properties_from_file("/prop.default", nullptr, &properties)) {// Try legacy pathload_properties_from_file("/default.prop", nullptr, &properties);}}load_properties_from_file("/system/build.prop", nullptr, &properties);load_properties_from_file("/system_ext/build.prop", nullptr, &properties);load_properties_from_file("/vendor/default.prop", nullptr, &properties);load_properties_from_file("/vendor/build.prop", nullptr, &properties);if (SelinuxGetVendorAndroidVersion() >= __ANDROID_API_Q__) {load_properties_from_file("/odm/etc/build.prop", nullptr, &properties);} else {load_properties_from_file("/odm/default.prop", nullptr, &properties);load_properties_from_file("/odm/build.prop", nullptr, &properties);}load_properties_from_file("/product/build.prop", nullptr, &properties);load_properties_from_file("/factory/factory.prop", "ro.*", &properties);//省略

可以看出,依次加载以下文件

/system/etc/prop.default
/system/build.prop
/system_ext/build.prop
/vendor/default.prop
/vendor/build.prop
/odm/etc/build.prop
/product/build.prop
/factory/factory.prop

设置和获取属性
当然,除了上面文件中默认的属性,我们也可以通过命令或者方法来设置属性
adb 命令
getprop获取属性

console:/ # getprop
[apexd.status]: [ready]
[bpf.progs_loaded]: [1]
[build.version.extensions.r]: [0]

setprop 设置或者改变属性的值

console:/ # setprop test.a 1

c中的函数
使用property_set和property_get来设置或者获取属性。这些函数是定义在libcutils库的properties.h中,使用时需要在Android.mk或者Android.bp中引入该库并添加头文件

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

java中的方法
在java中,使用SystemProperties类中的set和get方法来设置和获取属性

String test= SystemProperties.get("my.test.a");
SystemProperties.set("my.test.a", "0");

c++中的函数
在c++中,使用GetProperty和SetProperty来获取和设置属性,其在system\core\base\include\android-base\properties.h头文件中定义,实现在\system\core\base\properties.cpp文件中

#include <android-base/properties.h>
std::string prop_val = android::base::GetProperty("sys.boot_completed", "");
if (!android::base::SetProperty("ctl.stop", "mpdecision")){LOG(ERROR) << "setprop ctl.start mpdecision failed";
}

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

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

相关文章

golang变量初始化顺序

顺序&#xff1a; 1.引用的包 2.全局变量 3.init()函数 4.main()函数 package pkgimport "fmt"func init() {fmt.Println("pkg init") }package mainimport ("fmt"_ "gg/pkg" )var v val()func val() int {fmt.Println("func()…

React Native调用Android的原生功能

React Native 通过 JavaScript 接口与原生代码通信&#xff0c;这是通过名为 Bridge 的机制实现的。Bridge 负责在 JavaScript 和原生端之间建立通信桥梁。 以下是调用 Android 原生功能的基本步骤&#xff1a; 在 JavaScript 中&#xff0c;使用 React Native 提供的模块创建…

配置Spring Boot WebSocket 客户端与前端vue实现多人通信聊天

后台引入 <!-- websocket --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency> 然后配置类配置下 Configuration public class WebSocketConfig {/…

图像识别与增强现实(AR)的结合

图像识别与增强现实&#xff08;AR&#xff09;的结合是当今技术领域的一个热点&#xff0c;它通过将数字信息叠加到现实世界的视觉呈现中&#xff0c;为用户提供了一种全新的交互体验。这种技术融合了计算机视觉、图像处理、传感器融合、人机交互等多个技术领域的最新成果&…

MES实施之工控机和电脑的选择

在MES项目实施过程中,经常会碰到工控机和电脑的选型问题,那么他们的区别是什么? 1、控机和普通个人电脑(PC)相比,具有以下几个区别: 1.运行环境不同:工控机通常需要在各种恶劣的工业环境中运行,如高温、高湿、强电磁干扰等,因此需要具有防尘、防水、抗干扰等特点。而…

常用的scss工具方法封装

主要总结开发中常用的工具方法: 1.移动端1px mixin border1($bColor,$type:bottom){position: relative;&::before{content:;display: block;position: absolute;left:0;right: 0;if ($type top){top: 0;}if ($type bottom){bottom: 0;}border-#{$type}: 1px solid $bC…

蓝桥杯入门题知识点总结

1.小写和大写转换 &#xff08;1&#xff09;相关函数 C 头文件「ctype.h」里的&#xff1a;isalpha、islower、isupper、isalnum等函数_c isalpha-CSDN博客 isalpha()用来判断一个字符是否为字母isalnum用来判断一个字符是否为数字或者字母&#xff0c;也就是说判断一个字符…

基于Spring Boot的简历系统设计与开发

基于Spring Boot的简历系统设计与开发 开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/idea 部分系统展示 前台首页界面 简历模板管理界面 用户管理界面 管理员登录界…

Debian12 使用 nginx 与 php8.2 使用 Nextcloud

最近将小服务器升级了下系统&#xff0c;使用了 debian12 的版本&#xff0c;正好试试 nginx 和 php-fpm 这种方式运行 Nextcloud 这个私有云的配置。 一、基本系统及应用安装 系统&#xff1a;debian12 x86_64 位版本最小安装&#xff0c;安装后可根据自己需求安装一些工具&…

代码随想录算法训练营Day15|二叉树Part02|层序遍历||226翻转二叉树||101对称二叉树

今日任务 层序遍历 看完本篇可以一口气刷十道题&#xff0c;试一试&#xff0c; 层序遍历并不难&#xff0c;大家可以很快刷了十道题。 题目链接/文章讲解/视频讲解&#xff1a;代码随想录 226.翻转二叉树 &#xff08;优先掌握递归&#xff09; 这道题目 一些做过的同学 理解…

二维相位解包理论算法和软件【全文翻译- 质量分布图(3.3)】

在本节中,我们将定义几个在相位解包中非常有用的质量映射。质量图是定义给定相位数据中每个像素质量或好坏的数值数组。它们对于指导第 4 章将要介绍的几种路径跟踪算法是必要的,对于第 5 章将要介绍的一些加权 L^P-norm 算法也是必要的。 我们要讨论的第一个质量图是相关图,…

SpringBoot整合Netty整合WebSocket-带参认证

文章目录 一. VectorNettyApplication启动类配置二.WebSocketServerBoot初始化服务端Netty三. WebsocketServerChannelInitializer初始化服务端Netty读写处理器四.initParamHandler处理器-去参websocket识别五.MessageHandler核心业务处理类-采用工厂策略模式5.1 策略上下文 六…

CSS-属性

&#x1f4da;详见 W3scholl&#xff0c;本篇只做快速思维索引。 CSS 背景 用于定义元素的背景效果。 background-colorbackground-imagebackground-positionbackground-repeatbackground-attachment background-color background-color 属性指定元素的背景色。 h1 {back…

蓝桥杯 十一届C++A组 字符排序 21分(运行超时)

思路&#xff1a; 1. 此题考查的冒泡排序中的交换次数&#xff0c;其实就是考察当前数与后面的逆序对个数问题。而为了最大利用位数&#xff0c;应当使每一位都不小于后面的字符&#xff0c;否则会造成一次逆序对的浪费&#xff08;贪心&#xff0c;为了使总位数最少&#xff…

c++ 指数搜索(Exponential Search)

该搜索算法的名称可能会产生误导&#xff0c;因为它的工作时间为 O(Log n)。该名称来自于它搜索元素的方式。 给定一个已排序的数组和要 搜索的元素 x&#xff0c;找到 x 在数组中的位置。 输入&#xff1a;arr[] {10, 20, 40, 45, 55} x 45 输出&#xff1a;在索…

什么样的数据库才是开发者需要的

什么样的数据库才是开发者需要的 什么是Serverless数据库Serverless数据库应该关注哪些技术要点DBA的工作会被AI取代吗什么样的数据库是你目前最需要的 其实关于数据库的话题&#xff0c;能聊的很多&#xff0c;作为开发者来说&#xff0c;单说自己接触过的或者曾经用过的数据库…

WCH恒沁单片机-CH32V307学习记录2----FreeRTOS移植

RISC-V 单片机 FreeRTOS 移植 前面用了 5 篇博客详细介绍了 FreeRTOS 在 ARM Cortex-M3 MCU 上是如何运行的。 FreeRTOS从代码层面进行原理分析系列 现在我直接用之前的 RISC-V MCU 开发板子&#xff08;CH32V307VCT6&#xff09;再次对 FreeRTOS 进行移植&#xff0c;其实也…

.xml配置文件的方式,测试jdbcTemplate的使用

父工程的pom文件&#xff0c;要安装的依赖&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLoca…

量身定制:选择能够解决企业问题的六西格玛培训机构

现在的培训机构太多了&#xff0c;都在打着六西格玛管理的旗号&#xff0c;甚至有很多培训机构连六西格玛管理都没有学习过&#xff0c;就敢号称自己是六西格玛管理专家。在这个鱼龙混杂的市场上&#xff0c;很多企业对于选择什么样的培训机构&#xff0c;以及如何选择一家靠谱…

Android EditText可编辑与不可编辑的切换

需求背景&#xff1a;EditText需要根据用户的选择在可编辑与不可编辑之间进行切换。 一、可编辑与不可编辑的切换 1、可编辑 mEt.setInputType(InputType.TYPE_CLASS_TEXT); 2、不可编辑 mEt.setInputType(InputType.TYPE_NULL); 二、长按[全选、复制、粘贴、剪切等]的显示与…