当前位置:   article > 正文

Android 新增可执行脚本方式总结_#!/vendor/bin/sh

#!/vendor/bin/sh

Shell脚本

怎么添加可执行脚本,小白如何开始,首先就是参考google 的,看看他们是怎么做的

device/google/sunfish/init.sensors.sh

  1. #! /vendor/bin/sh
  2. version=`grep -ao "OEM_IMAGE_VERSION_STRING[ -~]*" \
  3. /vendor/firmware/adsp.b04 | \
  4. sed -e s/OEM_IMAGE_VERSION_STRING=ADSP.version.// -e s/\(.*\).//`
  5. setprop vendor.sys.adsp.firmware.version "$version"

可以看到这是一个标准的shell 语句,android是基于linux操作系统,linux支持shell脚本,所以安卓也是支持的一些shell命令的运行,如果有特殊功能需要在shell 里面执行的话,可以学习shell 知识,看看是否能实现,这个不再赘述.

上面知识脚本文件,那么他是如何运行的呢,我们根据init.sensors.sh 这个关键字继续在源码中查找

定义shell 脚本

device/google/coral/init.hardware.rc

  1. service init-sensors-sh /vendor/bin/init.sensors.sh
  2. class main  #服务类型
  3. user root
  4. group root system
  5. disabled   #默认是不启动,由其他动作触发才会启动
  6. oneshot   #只执行一次
  7. # Init sensor specific services
  8. start init-sensors-sh #启动服务

上面是服务启动的一种方式,还有其他方式,rc 文件都有,就不一一举例了

方式一:

 start init-sensors-sh  #启动服务

方式二:

exec u:r:vendor_qti_init_shell:s0 -- /vendor/bin/init.qti.can.sh #系统标签可以不加,可以在context 中定义

方式三:

property_set("ctl.start", service_xx);//C++

SystemProperties.java.set("ctl.start", service_xx);//java

方式四:

class_start main #启动所有class 为main 的所有服务,diaabled 不能被启动,只能通过以上三种方式启动,也可以先enable  class_servcexx,然后通过class_start 启动

方式五:

通过组合按键启动,下面的是通过音量+,-,电源键,启动服务

# bugreport is triggered by holding down volume down, volume up and power

service bugreport /system/bin/dumpstate -d -p -z

class main

disabled

oneshot

keycodes 114 115 116

这里面有涉及到可执行脚本的selinux 配置,可以参考android 开机动画动态替换_xss534890437的博客-CSDN博客_安卓开机动画替换

rc 文件和sh 脚本文件一些读写文件区别

其实rc 文件和脚本语法完全不一样,都是区别......不过我整理了一些我工作常用的,都是抄google 原生的,记录分享一下,以免大家搞混了.

system/core/init/README.md  rc 的语法都在这里哦

rc文件sh 脚本文件
setprop xxxx ${yyyy}#去yyyy这个宏值,或者对应propery 值bootanimtionp=`getprop vendor.animation.file.path`#取值同样是${bootanimtionp}
on property:xxxx.xxxx=1#监听属性值变化setprop qemu.hw.mainkeys 0#也可以取其他值同上${xxx}
copy 原始路径 目标路径  #复制文件cp -rf $bootanimtionp  /mnt/vendor/bootanim/  #复制文件
write /config/usb_gadget/g1/strings/0x409/serialnumber ${ro.serialno}#写节点echo "$nv_sn" > /config/usb_gadget/g1/strings/0x409/serialnumber #读取宏变量,写节点

上面都是我工作中用到的,其实还有很多类似的功能,后续用到会补充上去哈,我的经验是如果有需要的功能,可以优先到原生的里面去找,抄google 的作业,实在没有那就只能百度学习啦

ps:读写节点和属性值,启动脚本的时候,有时候语法都是对的,但是莫名其妙读写不成功,这个时候可以怀疑是不是selinux 问题哦,我也总结了一小点.

Android selinux 入门学习_xss534890437的博客-CSDN博客_android selinux自学

rc 和sh 可以说相当于一门独立的小语言知识点了,我也是边学习根据实际经验更新,后续学习后会持续更新.....

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/134446
推荐阅读
相关标签
  

闽ICP备14008679号