定义新的Property

自定义新属性。

👇

步骤

希望新增自定义的属性,单纯使用

1
android.os.SystemProperties.set("json.smarttv.config.order.backlight.home","80");

会报错:

libc : Unable to set property “json.smarttv.config.order.backlight.home” to “80”: error code: 0x18

需要在device/realtek/common/sepolicy/property_contexts定义自己的属性

1
json.                           u:object_r:json_prop:s0  

在device/realtek/common/sepolicy/property.te定义新增加的json_prop域

1
type json_prop, property_type;  

重新编译运行,可能还会有错。
可能还需要补充权限,比如:
修改device/realtek/common/sepolicy/hal_smarttv_default.te:

1
2
set_prop(hal_smarttv_default, json_prop);  
get_prop(hal_smarttv_default, json_prop);

修改device/realtek/common/sepolicy/system_app.te:

1
allow system_app json_prop:file { read open getattr map };  

参考链接

system.prop新增自己的欄位
Android coredomain 如何使用自定义的 property type?

问题

编译user版本的image,添加的property属性无法在console通过getprop获得,但是查看out/target/product/RealtekATV/system/build.prop文件却有这些属性,可能与selinux规则有关,把这些属性修改到system/sepolicy/private/property_contexts

1
2
ro.yndx.build           u:object_r:system_prop:s0
yndx.config u:object_r:system_prop:s0

OK,但是不知道为什么:

  1. 编写 SELinux 政策
  2. SELinux 安全上下文
  3. permissive domains not allowed in user builds
  4. Android 9 SELinux
  5. 自定义 SELinux

深入理解SELinux SEAndroid