为Android添加一个开机完成后执行的脚本

1.完成对应的执行脚本编写,并将该脚本放在编译项目对应的路径下。

比如写一个xxx.sh脚本,在脚本中加入自己所以执行的任务对应的命令。并将该脚本放在编译工程对应的路径下,比如:device/ti/jacinto6evm

2.在init.rc中创建该服务
编写自己要执行的服务,比如:
service service_xxx /system/bin/xxx.sh
    user root
    group root
    disabled
    oneshot

3.在init.rc中启动该服务

on property:sys.boot_completed=1
        start service_xxx

4.在device.mk中修改

将该脚本从编译路径下拷贝到生成系统文件的指定路径下
#xxx
PRODUCT_COPY_FILES += \
        device/ti/jacinto6evm/xxx.sh:system/bin/xxx.sh

以上四步完成后,就会在系统启动后去自动执行该服务了,这样就达到了用root权限去执行我们要执行的命令的目的了。

当然,还可以在系统中根据我们的需求用系统启动服务的方式去启动,执行代码为:
SystemService.start("service_xxx");
不过这时候要将 import android.os.SystemService;引入到对应的java文件中,不然编译不过。

好的,下面是一个Android RK3588 平台中将 shell 脚本添加到 `/vendor/bin` 目录下,并实现开机自启动的示例,以及对之前的脚本进行了一定的优化。 首先,我们将之前的脚本保存为 `/system/bin/switch_screen.sh` 文件,并赋予可执行权限: ```bash chmod +x /system/bin/switch_screen.sh ``` 然后,我们在 `/vendor/bin` 目录下创建一个名为 `switch_screen` 的符号链接,指向 `/system/bin/switch_screen.sh` 文件: ```bash ln -s /system/bin/switch_screen.sh /vendor/bin/switch_screen ``` 接下来,我们在 `/vendor/etc/init/hw/init.rc` 文件中添加以下内容,实现在系统启动时自动执行 `/vendor/bin/switch_screen` 脚本: ```bash on property:sys.boot_completed=1 start switch_screen ``` 最后,我们在 `/vendor/etc/init/hw/post-init.rc` 文件中添加以下内容,实现在系统启动时自动赋予 `/vendor/bin/switch_screen` 可执行权限: ```bash # Set permissions for switch_screen script chmod 755 /vendor/bin/switch_screen ``` 在这个示例中,我们使用了 `/vendor/bin` 目录来存放自定义的 shell 脚本,并通过修改 `/vendor/etc/init/hw/init.rc` 文件来实现在系统启动时自动执行自定义的 shell 脚本。需要注意的是,不同的 Android 平台可能会有所不同,具体的实现方法可能需要根据实际情况进行调整。 另外,对于之前的脚本,我们进行了一定的优化,具体包括: 1. 使用 `sleep` 命令来降低 CPU 占用率,避免过度消耗系统资源。 2. 使用 `grep` 和 `awk` 命令来解析遥控器的输入事件,提高脚本的可读性和可维护性。 3. 添加了注释,方便你理解每一行代码的作用。 下面是优化后的脚本: ```bash #!/system/bin/sh # 设置主屏幕为默认显示屏幕 setprop sys.display.use_main_screen true # 启动 ConsumerIRService 服务,以便接收遥控器的输入事件 setprop ro.remotecontroller.modules consumerir start consumer_ir_service # 循环监听遥控器的输入事件 while true; do # 读取遥控器的输入事件,并解析出按键码 ir_code=$(getevent -t -c 1 /dev/input/event0 | grep -oP ".*?((?<=KEYCODE_)[A-Z0-9]+).*" | awk '{print $10}') # 如果按键码是 KEYCODE_SWITCH_SCREEN,则切换主副屏幕的显示状态 if [ "$ir_code" = "KEYCODE_SWITCH_SCREEN" ]; then if [ "$(getprop sys.display.use_main_screen)" = "true" ]; then setprop sys.display.use_main_screen false else setprop sys.display.use_main_screen true fi fi # 降低 CPU 占用率,避免过度消耗系统资源 sleep 0.1 done ``` 希望这个示例对你有所帮助。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值