Android开机执行指定shell脚本
文章允许转载,请注明来源: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脚本相关推荐
- Linux centos开机执行JAR Shell脚本
Linux centos开机执行shell脚本 Linux centos开机执行 java jar 1.编写jar执行脚本 vim start.sh 加入如下内容(根据自己真实路径与数据进行编写) ...
- java 读取ssh2协议得到的数据_Java通过SSH2协议执行远程Shell脚本
Java通过SSH2协议执行远程Shell脚本(ganymed-ssh2-build210.jar) ganymed-ssh2简介: Ganymed SSH-2 for Java是用纯Java实现SS ...
- win7 cmd终端连接android手机运行adb shell脚本命令
win7 cmd终端连接android手机运行adb shell脚本命令 (2013-03-22 20:13:57) 转载▼ 标签: android it shell 连接 linux 分类: 嵌入式 ...
- linux js脚本无法响应,执行Linux shell脚本时出错
我想执行一个shell脚本来在dhtmlx实时更新的框架中启动nodejs服务器.根据dhtmlx文档,nodejs服务器将被放入web根目录.我已经写了位于/ var/WWW(其中的NodeJS文件 ...
- 安卓系统linux启动脚本,Android开机执行脚本
步骤说明: 一.准备好Android要启用的运行脚本,并使其编译到系统指定的路径 二.在开机rc文件中启动脚本服务,处理SELinux赋权问题 copy_apps.sh实现app的复制,vendor/ ...
- Android init.rc启动shell脚本
init.rc启动shell脚本 0. 前言 1. 编写脚本 test.sh 2. 修改 .mk 配置文件,将创建的 test.sh 编译到系统分区 3. 配置 SELinux 权限 3.1 创建 t ...
- 树莓派开机自动运行shell脚本——记录开机时间
目录 1.目的 2.思路 3.实现步骤 1.目的:树莓派开机时自动执行某些脚本,不用手动设置,减少麻烦. 2.思路:新建一个记录时间的脚本 record_time.sh,然后添加执行命令到 /etc/ ...
- 【ijkplayer】编译 Android 版本的 ijkplayer ⑥ ( 进入 ijkplayer-android/android 目录 | 执行 compile-ijk.sh 脚本完成编译 )
文章目录 一.进入 ijkplayer-android/android 目录 二.执行 compile-ijk.sh 脚本 参考 https://github.com/bilibili/ijkplay ...
- 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 ...
- linux shell命令分布执行,Linux学习笔记:bash特性之多命令执行,shell脚本
今天我们学习了bash特性多命令执行包括各个命令之间的逻辑关系.其中包含"与""或""非"命令的执行.下面即为我们所学习的这些逻辑命令关系之 ...
最新文章
- docker一步安装mysql,docker的魅力就在于此
- 多元回归树分析Multivariate Regression Trees,MRT
- Linux imooc learning
- C++需要输出一个参数的地址时可能达不到预期的效果
- linux android build tools,build.gradle 文件中的 Android SDK Build Tools version
- LeetCode 1817. 查找用户活跃分钟数(哈希)
- Nginx配合uGIGI和Django用作应用程序网关
- Facebook 数据的横向扩展
- Windows 0day成功验证之ETERNALBLUE
- 线程如何同步?如何使用同步方法?
- 限流, 熔断,降级笔记
- 无线通讯射频测试软件,ISIS射频工具(专业射频测试软件)V2.03 正式版
- 数论 day 2 试题解析
- 前端知识点——Web Sockets
- 虚拟机怎么启动共享文件服务器,VMware虚拟机中ubuntu启用本地文件共享的设置方法...
- 【死磕DDD】聊聊领域建模方法论
- 鸿运当头凤梨花怎么养 凤梨花养殖方法及注意事项
- IP (网络之间互连的协议)
- Java学习 --- HTML
- Python | 程序查找列表中最小和最大元素的位置
热门文章
- 获取网站icon图标
- oracle excel导入卡死 新解决办法
- java的测试岗位_JAVA测试岗位职责
- cad画多段线时不显示轨迹_为什么CAD绘图编辑拖动时看不到预览效果?
- Angular 权威教程
- Excel同时冻结多行多列
- 微信小程序video控件的使用
- Linux 打包压缩(tar、gzip、bzip、xz)备份(备份dump genisoimage 还原restore)
- 服务器登录显示sa登录失败,U8应用服务器配置时提示登录SA失败发现是由于未能找到存储过程‘sp_password’的解决方案...
- lightgbm中的多分类multiclass与multiclassova