android property 系统

1.使用目的

目的都是为了测试。

减少编译流程。提高测试效率

2.使用方法流程

2.1 初始化默认值

方法一.

配置文件进行配置。

方法二.

手动初始化

bash 复制代码
setprop test.prop.id 1

2.2 获取键值并

c++ 复制代码
property_get

2.3 配置头文件

c++ 复制代码
<cutils/properties.h>

3.注意事项

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

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

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

  1. SELinux 策略限制

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

  2. 属性命名规则不合法

    • 以 ro. 开头的属性为只读属性,不可修改。
    • 自定义属性需符合系统前缀规范(如 persist.sys.、vendor. 等),否则默认策略可能禁止写入。
  3. 进程权限不足

    仅 system 或 root 进程可通过 property_set 修改属性值,普通应用需声明 android:sharedUserId="android.uid.system" 并使用平台签名。

解决方案
1. 检查并修正 SELinux 策略
  • Step 1:添加属性上下文

    在 property_contexts 文件中将属性关联到合法的安全上下文(如 system_prop):

    text 复制代码
    test_flag u:object_r:system_prop:s0
  • Step 2:配置进程的 SELinux 权限

    在进程的 .te 文件(如 hal_test_ztt.te)中添加权限声明:

    text 复制代码
    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 强制模式(仅限调试):

    bash 复制代码
    adb shell setenforce 0

    此操作重启后失效,不可用于生产环境。

验证步骤
  1. 检查 SELinux 日志

    通过 adb shell dmesg | grep avc 查看权限拒绝的详细上下文,确认是否缺少 set_prop 权限。

  2. 测试属性读写

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

    • 修改策略文件后,执行 make selinux_policy。
    • 将生成的 *.sepolicy 文件推送至 /vendor/etc/selinux/ 并重启设备。
相关推荐
Liben18 小时前
Weex开发踩坑记录
android·前端·ios
救救孩子把20 小时前
结构化输出为何“格式正确、答案错误”?JSON Schema 的能力边界
android·java·json·agent·agent服务
张小姐的猫21 小时前
【MySQL】事务
android·mysql·adb
你看我名字21 小时前
数眼智能 Search + Reader 实战:联网问答怎样避免“搜到了,却引用错了”
android·java·开发语言
恋猫de小郭21 小时前
最近 Android 有什么更新:Android Dev Summit 2026 技术解读
android·前端·flutter
Kapaseker1 天前
删掉 1.1 万行 C 代码,Rust 正式接手 Android Binder
android·rust
嵌入式-老费1 天前
esp32开发与应用(题外话之ADB和Android NDK开发)
android·adb
野生的码农1 天前
能工智人,40 大寿,尚能班否?
android·ai编程
事圆则缓1 天前
Android 串口通信:从 /dev/ttyS1到协议帧
android
java1234_小锋1 天前
【技术专题】CSS3 网页技术 - CSS3 基础样式
android·前端·css3