iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何在Android项目中设置Property模块的键值
  • 442
分享到

如何在Android项目中设置Property模块的键值

androidpropertyroi 2023-05-31 08:05:06 442人浏览 独家记忆
摘要

这期内容当中小编将会给大家带来有关如何在Android项目中设置Property模块的键值,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Android中Property模块的键值设置Prop模块是保存少量

这期内容当中小编将会给大家带来有关如何在Android项目中设置Property模块的键值,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

Android中Property模块的键值设置

Prop模块是保存少量的全局共享信息,其保存的数据具有信息量少,跨进程共享数据等特性;每一条信息包含两个属性,键名和键名对应的键值,例如:

ro.product.locale.language=en

“Ro.product.locale.language”表示本产品本地语言,表示该条信息的名字,“en”表示该条信息的取值为英文,这样任何一个应用程序就知道本机使用的语言情况。在接口设计时也需要有两个参数,name和value(键名和键值),方法有set和get,例如:

Set(String name,String value);String Get(String name);

当然,无论上层怎么设计,在C底层键名name和键值value都是以char数组进行保存的,因为设计者并不知道传入name和value的数据大小。

在android.os.SystemProperties类中对prop模块进行了封装,该类使用Set和Get直接进行设置和获取,当然这些java接口最终还是调用系统接口完成的。在jni层有一个property_service.c文件,文件中有对应的实际处理接口,这些接口即可以给java调用,也可以一些系统命令使用(例如setprop和getprop命令就是调用这些接口方法)。SystemProperties类中的get方法没有什么限制,但是set方法就有权限的限制,应用程序是不能随便使用set接口的。

SystemProperties类的访问必须要有系统权限,并且应用的uid必须是系统id:1000或者为root:0。因为set和get操作不同,set时该操作建立了一个Socket管道通过发cmd出去完成的,服务端接收cmd同时比较权限,关键代码如下:

if (uid == aiD_SYSTEM || uid == AID_ROOT)  return check_control_Mac_perms(name, sctx);

只有权限是AID_SYSTEM(系统ID)和AID_ROOT(root用户ID)才能通过验证;而get没有权限检查,不过试想也正常,如果谁都能进行修改,那这黑客也太好当了。当然个人觉得,对于set的设计使用权限验证无可厚非,但对于查看系统属性这样的功能(get),应该还可以进行细分,比如有些属性是不重要的,任何进程和用户都可以读取使用;当然有些敏感的数据在指定读取权限时也可以进行指定(由于时间有限本人没有更深入的细读,也不知道android系统是否完成了这些功能)。

设置键值名时需要注意的地方

在进行设置时,包含两个参数,变量名和变量值,形如:[[key]]: [[value]]。如果原来没有对应的key值,那么就会在该模块中创建一个新的键值,否则覆盖原有键值。对于键值名在设计时最好按规范书写,比如“类名.模块.用途”,这样清晰可记而且不容易冲突。另外,如果属性名称以“ro.”开头,那么这个属性被视为只读属性。一旦设置,属性值不能改变。这个判断动作是在property_service.c中的property_set函数中完成的:

if(!strncmp(name, "ro.", 3)) return -1;

如果是以“persist.”开头,当设置这个属性时,其值也将写入/data/property/目录中,键值名就是该属性名,下次开机重新加载和读取该属性;该文件中的load_persistent_properties函数就是用来完成该功能。特别的属性名以“net.change”开头那么其值中必须以“net.”开头,例如键值名为[net.change]: 那么键值为[net.Qtaguid_enabled],这个设置目前还没想到有什么作用。

Shell中对应的prop操作命令

在android的shell中也有对应的命令进行操作,有如下三个命令:

  • getprop [keyname] Keyname为需要获取的键值名,如果没有参数则打印全部的键值信息。

  • setprop [keyname] [value] Keyname为需要获取的键值名,value为设置的值,这个值为字符串

  • watchprops 监听系统属性的变化,如果期间系统的属性发生变化则把变化的值显示出来。

在init.rc中也使用setprop来设置一些属性状态。

补充setprop:

Property模块的键值设置

Prop模块是保存少量的全局共享信息,其保存的数据具有信息量少,跨进程共享数据等特性;每一条信息包含两个属性,键名和键名对应的键值。“Ro.product.locale.language”表示本产品本地语言,表示该条信息的名字,“en”表示该条信息的取值为英文,这样任何一个应用程序就知道本机使用的语言情况。

Android终端属性prop操作的底层实现

在init.c文件中main函数中会调用start_property_service(),而它分别调用load_properties_from_file函数读取PROP_PATH_SYSTEM_BUILD(/system/build.prop)、PROP_PATH_SYSTEM_DEFAULT(/system/default.prop)和PROP_PATH_LOCAL_OVERRIDE(/data/local.prop)存放系统属性的文件并设置到系统属性。

上述就是小编为大家分享的如何在Android项目中设置Property模块的键值了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网精选频道。

--结束END--

本文标题: 如何在Android项目中设置Property模块的键值

本文链接: https://www.lsjlt.com/news/224443.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何在Android项目中设置Property模块的键值
    这期内容当中小编将会给大家带来有关如何在Android项目中设置Property模块的键值,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Android中Property模块的键值设置Prop模块是保存少量...
    99+
    2023-05-31
    android property roi
  • 如何在Python项目中使用collections模块
    这篇文章主要介绍了如何在Python项目中使用collections模块,编程网小编觉得不错,现在分享给大家,也给大家做个参考,一起跟随编程网小编来看看吧!Python主要用来做什么Python主要应用于:1、Web开发;2、数据科学研究;...
    99+
    2023-06-06
  • 如何在python项目中使用urllib.request模块
    今天就跟大家聊聊有关如何在python项目中使用urllib.request模块,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。urllib子模块urllib.request 打开或请...
    99+
    2023-06-14
  • Linux中如何配置键盘的设备模块
    这篇文章主要介绍Linux中如何配置键盘的设备模块,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!配置键盘1. 配置键盘的设备模块对于我们常见的键盘一般有三种类型,其一为老式的五针键盘,其二为ps/2键盘,其三是usb...
    99+
    2023-06-16
  • 如何在IDEA中创建java多模块项目
    小编给大家分享一下如何在IDEA中创建java多模块项目,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、使用spring initializr创建java工程&...
    99+
    2023-06-14
  • HTTPS配置如何在Android项目中使用
    本篇文章给大家分享的是有关HTTPS配置如何在Android项目中使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Android 使用 HTTPS 配置的步骤。1、step配...
    99+
    2023-05-31
    android https roi
  • 如何在Zabbix中设置监控项的阈值
    要在Zabbix中设置监控项的阈值,您可以按照以下步骤操作: 登录到Zabbix的Web界面。 转到“配置”选项卡,然后选择“主机...
    99+
    2024-03-12
    Zabbix
  • 如何在Android项目中显示与隐藏软键盘
    本篇文章为大家展示了如何在Android项目中显示与隐藏软键盘,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、软键盘显示的原理    软件盘的本质是什么?软键盘其实是...
    99+
    2023-05-31
    android roi 目中
  • vue项目中如何给出功能模块
    作为一名前端开发者,在开发Vue项目时,给出含有功能模块的页面是一个基本的需求。功能模块是指与页面相关的可重用的代码块,Vue提供了诸多方法来实现这一点,本文将会详细介绍其中的方法。一、使用Vue插件Vue插件是一些独立的功能模块,可以在V...
    99+
    2023-05-14
  • Django项目中如何集成日志模块?
    Django是一个流行的Python Web框架,用于快速开发Web应用程序。在开发Django应用程序时,日志模块是非常重要的。它可以帮助开发人员在应用程序运行时记录和跟踪事件,从而更好地了解应用程序的行为和性能。 本文将介绍如何在Dja...
    99+
    2023-09-04
    日志 javascript django
  • 如何在Go IDE中设置Spring项目的路径?
    在本文中,我们将介绍如何在Go IDE中设置Spring项目的路径。首先,我们需要了解Spring框架和Go IDE是什么。 Spring是一个流行的Java框架,用于开发Web应用程序。它提供了许多功能和模块,例如IoC容器、AOP、OR...
    99+
    2023-10-06
    ide spring path
  • EditText如何在Android项目中使用
    EditText如何在Android项目中使用?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1.获取光标选中的文字EditText view = (EditTe...
    99+
    2023-05-31
    android edittext roi
  • static{}块如何在java项目中使用
    这篇文章给大家介绍static{}块如何在java项目中使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。java中的static{}块的实例详解第一个小程序: package com.babyDuncan....
    99+
    2023-05-31
    java static{} ava
  • 如何在Android项目中使用ImageView
    这期内容当中小编将会给大家带来有关如何在Android项目中使用ImageView,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。首先创建一个叫MatrixImageView的类去继承ImageView,然...
    99+
    2023-05-31
    android age imageview
  • AutoCompleteTextView如何在Android项目中使用
    这期内容当中小编将会给大家带来有关AutoCompleteTextView如何在Android项目中使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。自动编辑文本框(AutoCompleteTextVie...
    99+
    2023-05-31
    android roi autocompletetextview
  • Intent如何在Android 项目中使用
    今天就跟大家聊聊有关Intent如何在Android 项目中使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一 Android系统用于Activity的标准Intent1 根据联系...
    99+
    2023-05-31
    android intent
  • IntentService如何在Android项目中使用
    IntentService如何在Android项目中使用 ?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Android IntentService详解一、Int...
    99+
    2023-05-31
    android intentservice roi
  • GridView如何在Android项目中使用
    这期内容当中小编将会给大家带来有关GridView如何在Android项目中使用 ,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。定义各种layout 和对应的item <&#63;...
    99+
    2023-05-31
    android gridview idv
  • log4j如何在Android项目中使用
    log4j如何在Android项目中使用?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 Android 使用log4j前言: 如果要直接在a...
    99+
    2023-05-31
    android log4j roi
  • Go语言中的HTTP模块:如何在项目中打包和加载?
    Go语言是一门相对年轻的编程语言,但它在网络编程方面却表现得十分强大。Go语言内置了HTTP模块,使得它成为了一个优秀的Web开发语言。在本文中,我们将讨论如何在你的项目中使用Go语言的HTTP模块,并且演示如何打包和加载这些模块。 Go语...
    99+
    2023-10-18
    http 打包 load
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作