当前位置: 首页 > article >正文

android property 系统

1.使用目的

目的都是为了测试。
减少编译流程。提高测试效率

2.使用方法流程

2.1 初始化默认值

方法一.
配置文件进行配置。
方法二.
手动初始化

setprop test.prop.id 1

2.2 获取键值并

property_get

2.3 配置头文件

<cutils/properties.h>

3.注意事项

3.1 关于无法设置属性 test_flag 的权限问题分析及解决方案

问题原因 (重 - - 命名规则)

错误 PROP_ERROR_PERMISSION_DENIED (0x18) 表明当前进程 缺乏修改该属性的权限,通常由以下原因导致:

  1. SELinux 策略限制
    Android 从 5.0 开始强制启用 SELinux,若属性操作未在 SELinux 策略文件中声明权限,即使应用具备 systemroot 权限也会被拒绝。

  2. 属性命名规则不合法

    • ro. 开头的属性为只读属性,不可修改。
    • 自定义属性需符合系统前缀规范(如 persist.sys.vendor. 等),否则默认策略可能禁止写入。
  3. 进程权限不足
    systemroot 进程可通过 property_set 修改属性值,普通应用需声明 android:sharedUserId="android.uid.system" 并使用平台签名。

解决方案
1. 检查并修正 SELinux 策略
  • Step 1:添加属性上下文
    property_contexts 文件中将属性关联到合法的安全上下文(如 system_prop):

    test_flag u:object_r:system_prop:s0
    
  • Step 2:配置进程的 SELinux 权限
    在进程的 .te 文件(如 hal_test_ztt.te)中添加权限声明:

    set_prop(hal_test_ztt, system_prop)
    get_prop(hal_test_ztt, system_prop)
    

    若属性需自定义类型(如 test_prop),需在 property_contexts.te 文件中同步定义。

  • Step 3:绕过 neverallow 规则(可选)
    若遇到 neverallow 规则冲突(如 default_prop),需在 domain.te 中添加例外或改用自定义属性类型。

2. 规范属性命名
  • 若属性需持久化,使用 persist. 前缀(如 persist.sys.test_flag)。
  • 避免与系统内置属性冲突,建议添加唯一标识符(如 vendor.test_flag.test.flag)。
3. 提升进程权限
  • 对于系统应用
    AndroidManifest.xml 中声明 android:sharedUserId="android.uid.system",并使用平台签名。
  • 对于 Root 设备
    通过 su 提权后操作,但需注意商业版本可能禁用此方式。
4. 临时调试方法
  • 关闭 SELinux 强制模式(仅限调试):
    adb shell setenforce 0
    
    此操作重启后失效,不可用于生产环境。
验证步骤
  1. 检查 SELinux 日志
    通过 adb shell dmesg | grep avc 查看权限拒绝的详细上下文,确认是否缺少 set_prop 权限。

  2. 测试属性读写

    adb shell setprop test_flag "false"  # 尝试设置
    adb shell getprop test_flag          # 验证值是否生效
    
  3. 编译并刷写 SELinux 策略

    • 修改策略文件后,执行 make selinux_policy
    • 将生成的 *.sepolicy 文件推送至 /vendor/etc/selinux/ 并重启设备。
http://www.lryc.cn/news/2386936.html

相关文章:

  • Karakeep | 支持Docker/NAS 私有化部署!稍后阅读工具告别云端依赖,让知识收藏更有序
  • RV1126+FFMPEG多路码流监控项目大体讲解
  • el-dialog 组件 多层嵌套 被遮罩问题
  • 探秘谷歌Gemini:开启人工智能新纪元
  • TCP建立连接为什么不是两次握手,而是三次,为什么不能在第二次握手时就建立连接?
  • 《Stable Diffusion 3.0企业级落地指南》——技术赋能与商业价值的深度融合实践
  • 【软考向】Chapter 3 数据结构
  • [原创](计算机数学)(The Probability Lifesaver)(P14): 推导计算 In(1-u) 约等于 -u
  • wordcount在集群上的测试
  • OpenCV CUDA模块图像过滤------创建一个 Sobel 滤波器函数createSobelFilter()
  • [面试精选] 0053. 最大子数组和
  • 怎么判断一个Android APP使用了Cordova这个跨端框架
  • PDF 转 JPG 图片小工具:CodeBuddy 助力解决转换痛点
  • VisionPro 与 C# 联合编程:相机连接实战指南
  • 鸿蒙OSUniApp 实现动态的 tab 切换效果#三方框架 #Uniapp
  • Docker系列(三):深度剖析Dockerfile与图形化容器实战 --- 3种容器构建方法对比与性能调优
  • 论文阅读:Next-Generation Database Interfaces:A Survey of LLM-based Text-to-SQL
  • OS面试篇
  • FFMPEG-FLV-MUX编码
  • 青少年编程与数学 02-020 C#程序设计基础 05课题、数据类型
  • React vs Vue.js:选哪个框架更适合你的项目?
  • Kafka|基础入门
  • ADS学习笔记(五) 谐波平衡仿真
  • MySQL存储引擎对比及选择指南
  • 【IDEA问题】springboot本地启动应用报错:程序包不存在;找不到符号
  • PETR- Position Embedding Transformation for Multi-View 3D Object Detection
  • Prompt Tuning与自然语言微调对比解析
  • 二十七、面向对象底层逻辑-SpringMVC九大组件之HandlerAdapter接口设计
  • QT软件开发环境及简单图形的绘制-图形学(实验一)-[成信]
  • 项目部署一次记录