Android init.rc的property触发机制

前言:Android系统启动init进程会去解析/init.rc or init.platform.rc、/etc/init/*.rc等rc档,以便启动一些进程和服务。这里主要看下启动这些进程或服务的属性触发条件。

背景:了解init.rc的语法格式,网上很多资料可参考。比如:

#原生Actions格式 
on <trgger> [&& <trigger>]*       //trigger判断条件
                  <command>       //要执行的命令
                  <command>
                  <command>

#对应property 触发则如下:
#example 1
on property:persist.sys.usb.test=test
                  setprop sys.usb.test ${persist.sys.usb.test}
#example 2
on property:persist.sys.usb.debug=*
                  setprop sys.usb.debug ${persist.sys.usb.debug}
                  

主题:如上面的example1example2,是要说的重点。比如我在某*.rc档里添加了这两个Action。那这两个action实现起来的区别呢,两个属性一个有具体的value,一个是* 。

#example 1
on property:persist.sys.usb.test=test  //trigger的条件是只有persist.sys.usb.test的值是test, 下面command才跑
                  setprop sys.usb.test ${persist.sys.usb.test} //command

#example 2
on property:persist.sys.usb.debug=* //trigger的条件是只要persist.sys.usb.debug的值有变化, 下面command就会跑
                  setprop sys.usb.debug ${persist.sys.usb.debug} //command

在#example 1里,setprop persist.sys.usb.test test ,getprop sys.usb.test的value是test,如果setprop persist.sys.usb.test she,getprop sys.usb.test的value还是test,因为trigger条件不满足。

在#example 2里,setprop persist.sys.usb.debug boy,getprop sys.usb.debug的value是boy,why?因为trigger触发条件的属性value值是*,只要改变了就相当于触发了。

Note】on property属性值是*,源码分析参考: https://blog.csdn.net/lizuobin2/article/details/76167335 

  语法格式参考:https://blog.csdn.net/dd864140130/article/details/51975710  and

   https://blog.csdn.net/u012890170/article/details/80659425

小结:针对rc档里的属性触发条件做个记录,而且这个trigger一旦满足条件触发:开机会跑,runtime时候满足条件也会跑。另外属性如果带上前缀persist,相当于系统常驻属性,即便重启属性值也会维持之前的值。

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值