Android 关机前指定操作
Android 关机前指定操作
在 Android 关机前执行指定程序,主要有应用层和系统层两种实现路径。应用层方案无需系统级权限,适合普通 App;系统层方案需要 Root 或修改系统固件,适合更底层的任务。
作者:炭烤毛蛋 ,点击博主了解更多。
文章目录
- Android 关机前指定操作
- 1. 关机前保存系统运行日志
- 1.1 方案一:通过 `init.rc` 触发器与 Shell 脚本(推荐)
- (a) 编写保存日志的 Shell 脚本
- (b) 在 `init.rc` 中配置服务
- (c) 配置 SELinux 策略(Android 13 核心)
- 1.2 方案二:修改 Framework 层 `ShutdownThread.java`
- 💡 避坑提示与注意事项
- 2. 关机前执行停止内核某个驱动
- 2.1 方案一:在内核驱动源码中实现 `shutdown` 接口(原生且最稳妥)
- 2.2 方案二:通过 Android `init.rc` 监听关机属性(应用/脚本级控制)
- (a) 编写 Shell 脚本
- (b) 修改 `init.rc`
- (c) 配置编译选项 (Android.bp / Android.mk)
- (d) 配置 SELinux 策略(至关重要)
- 2.3 方案三:修改 Android Framework 层(Java 级拦截)
- 结语
1. 关机前保存系统运行日志
在 Android 13 中,由于系统的沙箱机制(Sandbox)和 SELinux 强制访问控制极其严格,在关机前拦截并保存日志需要考虑到系统服务退出的顺序。
最稳妥且常用的两种代码实现方式如下:方案一(推荐)利用init.rc监听系统关机属性并触发 Vendor 脚本;**方案二是通过修改 Framework 层的ShutdownThread**。
1.1 方案一:通过init.rc触发器与 Shell 脚本(推荐)
当用户点击关机或系统触发重启时,Android 的init进程会监听到sys.powerctl属性的变化。此时系统还没有完全杀死底层守护进程,是抓取日志的黄金时间。
(a) 编写保存日志的 Shell 脚本
在你的 Vendor 目录(例如vendor/oem/hardware/)下创建save_logs.sh:
#!/vendor/bin/sh# 创建日志存放目