文章允许转载,请注明来源:https://blog.csdn.net/feiniao8651/article/details/81664496

首先说明一点,这篇文章是偏向Android ROM定制,不适用于应用开发方向,如果是普通的应用开发者可以不用看了。

Android启动流程

对Android启动流程有了解的人,可能知道Android系统最开始是由init进程启动起来的,init进程会启动zygote进程,有了zygote才启动起上层的系统服务来。而init进程启动其实就是包含了解析执行init.rc的过程。我们今天这个开机完成后执行指定shell脚本的功能,也是通过在init.rc里添加配置来实现。

init.rc

init.rc是使用AIL(Android Init Language)编写的脚本,init进程读取执行里面的配置,进行一系列的环境初始化,关于这个脚本的写作语法可以参考深入分析AIL语言及init.rc文件,这篇博客里写的已经很详细了。

init.rc的修改

init.rc不能直接通过adb命令修改,我是直接修改了系统源码的/system/core/rootdir/init.rc文件,重新编译成rom后烧写到设备上(网上也有解包boot.img后,修改init.rc并重新打包烧写到设备上的方法,不过我并没有尝试)。对AIL的语法有了解之后,应该就能看懂下面的配置了

#触发器,当系统属性dev.bootcomplete=1即启动完成时触发
on property:dev.bootcomplete=1start bootcomplete #以root身份执行脚本
service bootcomplete /system/bin/sh /system/bin/bootcomplete.shclass mainuser rootgroup rootdisabledoneshot

这里需要注意的是service的名称不能超过16个字符,另外也有说法是不能包含”_”和”-“,但是我看到init.rc里其他service名称有含”_”的,这个可能是不同版本Android系统init解析的方法相同。稳妥起见是不要包含这两个字符。
之后只要在自己指定路径放上要执行的shell脚本即可。

出问题时debug的方法

init进程的日志不会在adb logcat里面显示,而是写入了dmesg,所以当自己的配置没有生效时,可以通过以下命令查看init进程的日志,看看是否有报错

adb shell dmesg

参考:
How to execute a shell script from init.rc after boot finished
init.rc: invalid service name
深入分析AIL语言及init.rc文件
Android 系统(56)—Android 系统开机日志

Android开机执行指定shell脚本相关推荐

  1. Linux centos开机执行JAR Shell脚本

    Linux centos开机执行shell脚本 Linux centos开机执行 java  jar 1.编写jar执行脚本 vim start.sh 加入如下内容(根据自己真实路径与数据进行编写) ...

  2. java 读取ssh2协议得到的数据_Java通过SSH2协议执行远程Shell脚本

    Java通过SSH2协议执行远程Shell脚本(ganymed-ssh2-build210.jar) ganymed-ssh2简介: Ganymed SSH-2 for Java是用纯Java实现SS ...

  3. win7 cmd终端连接android手机运行adb shell脚本命令

    win7 cmd终端连接android手机运行adb shell脚本命令 (2013-03-22 20:13:57) 转载▼ 标签: android it shell 连接 linux 分类: 嵌入式 ...

  4. linux js脚本无法响应,执行Linux shell脚本时出错

    我想执行一个shell脚本来在dhtmlx实时更新的框架中启动nodejs服务器.根据dhtmlx文档,nodejs服务器将被放入web根目录.我已经写了位于/ var/WWW(其中的NodeJS文件 ...

  5. 安卓系统linux启动脚本,Android开机执行脚本

    步骤说明: 一.准备好Android要启用的运行脚本,并使其编译到系统指定的路径 二.在开机rc文件中启动脚本服务,处理SELinux赋权问题 copy_apps.sh实现app的复制,vendor/ ...

  6. Android init.rc启动shell脚本

    init.rc启动shell脚本 0. 前言 1. 编写脚本 test.sh 2. 修改 .mk 配置文件,将创建的 test.sh 编译到系统分区 3. 配置 SELinux 权限 3.1 创建 t ...

  7. 树莓派开机自动运行shell脚本——记录开机时间

    目录 1.目的 2.思路 3.实现步骤 1.目的:树莓派开机时自动执行某些脚本,不用手动设置,减少麻烦. 2.思路:新建一个记录时间的脚本 record_time.sh,然后添加执行命令到 /etc/ ...

  8. 【ijkplayer】编译 Android 版本的 ijkplayer ⑥ ( 进入 ijkplayer-android/android 目录 | 执行 compile-ijk.sh 脚本完成编译 )

    文章目录 一.进入 ijkplayer-android/android 目录 二.执行 compile-ijk.sh 脚本 参考 https://github.com/bilibili/ijkplay ...

  9. Azkaban实战,Command类型单一job示例,任务中执行外部shell脚本,Command类型多job工作flow,HDFS操作任务,MapReduce任务,HIVE任务

    1.Azkaban实战 Azkaba内置的任务类型支持command.java Command类型单一job示例 1.创建job描述文件 vi command.job #command.job typ ...

  10. linux shell命令分布执行,Linux学习笔记:bash特性之多命令执行,shell脚本

    今天我们学习了bash特性多命令执行包括各个命令之间的逻辑关系.其中包含"与""或""非"命令的执行.下面即为我们所学习的这些逻辑命令关系之 ...

最新文章

  1. docker一步安装mysql,docker的魅力就在于此
  2. 多元回归树分析Multivariate Regression Trees,MRT
  3. Linux imooc learning
  4. C++需要输出一个参数的地址时可能达不到预期的效果
  5. linux android build tools,build.gradle 文件中的 Android SDK Build Tools version
  6. LeetCode 1817. 查找用户活跃分钟数(哈希)
  7. Nginx配合uGIGI和Django用作应用程序网关
  8. Facebook 数据的横向扩展
  9. Windows 0day成功验证之ETERNALBLUE
  10. 线程如何同步?如何使用同步方法?
  11. 限流, 熔断,降级笔记
  12. 无线通讯射频测试软件,ISIS射频工具(专业射频测试软件)V2.03 正式版
  13. 数论 day 2 试题解析
  14. 前端知识点——Web Sockets
  15. 虚拟机怎么启动共享文件服务器,VMware虚拟机中ubuntu启用本地文件共享的设置方法...
  16. 【死磕DDD】聊聊领域建模方法论
  17. 鸿运当头凤梨花怎么养 凤梨花养殖方法及注意事项
  18. IP (网络之间互连的协议)
  19. Java学习 --- HTML
  20. Python | 程序查找列表中最小和最大元素的位置

热门文章

  1. 获取网站icon图标
  2. oracle excel导入卡死 新解决办法
  3. java的测试岗位_JAVA测试岗位职责
  4. cad画多段线时不显示轨迹_为什么CAD绘图编辑拖动时看不到预览效果?
  5. Angular 权威教程
  6. Excel同时冻结多行多列
  7. 微信小程序video控件的使用
  8. Linux 打包压缩(tar、gzip、bzip、xz)备份(备份dump genisoimage 还原restore)
  9. 服务器登录显示sa登录失败,U8应用服务器配置时提示登录SA失败发现是由于未能找到存储过程‘sp_password’的解决方案...
  10. lightgbm中的多分类multiclass与multiclassova