玩转Android Framework:Android Init Language

本文将介绍Android Init Language 相关的一些知识。

什么是Android Init Language

Android Init Language 是Android用来进行服务初始化的一种脚本语言,这些脚本的后缀名均为.rc,这种脚本主要的作用是用来顺序启动Android的一系列服务

这是Android Init Language的官方文档:

android.googlesource.com/platform/sy...

语法结构

Android Init Language 语法结构十分简单,大致如下:

xml 复制代码
import <path>

service <name> <pathname> [ <argument> ]*
   <option>
   <option>
   ...

on <trigger> [&& <trigger>]*
   <command>
   <command>
   <command>

一个rc文件,由5个部分组成,Actions,Commands,,Services,Options,和 Imports。

阅读RC文件

接下来我们将讲解如何阅读一个rc文件,首先在/system/core/rootdir下面,可以看到多个rc文件:

打开init.zygote64.rc,我们可以看到以下的文件内容:

perl 复制代码
service zygote /system/bin/app_process64 -Xzygote /system/bin --zygote --start-system-server --socket-name=zygote
    class main
    priority -20
    user root
    group root readproc reserved_disk
    socket zygote stream 660 root system
    socket usap_pool_primary stream 660 root system
    onrestart exec_background - system system -- /system/bin/vdc volume abort_fuse
    onrestart write /sys/power/state on
    # NOTE: If the wakelock name here is changed, then also
    # update it in SystemSuspend.cpp
    onrestart write /sys/power/wake_lock zygote_kwl
    onrestart restart audioserver
    onrestart restart cameraserver
    onrestart restart media
    onrestart restart media.tuner
    onrestart restart netd
    onrestart restart wificond
    task_profiles ProcessCapacityHigh MaxPerformance
    critical window=${zygote.critical_window.minute:-off} target=zygote-fatal

这个时候我们可以打开Android Init Language 的Readme文件,来一项项查找这个文件的每条指令代表什么。

service zygote /system/bin/app_process64 -Xzygote /system/bin --zygote --start-system-server --socket-name=zygote

从文档中我们可以看出,这代表着注册一个名字为zygote的service,并且指定此服务的执行文件路径,以及执行此文件时所带的参数:

class main

这是服务的类名,相当于这个服务的分组,默认为default,这些分组的服务可以整组的启动或停止:

priority -20

服务的优先级,取值范围为-20到19,默认为0:

user root

执行此服务的之前切换的用户,默认为root:

group root readproc reserved_disk

执行此服务前更改组,从第二个参数开始,都是此进程的补充组:

socket zygote stream 660 root system

创建一个domain socket,第一个参数是此socket的名字,第二个是类型dgram, stream 或者seqpacket其中一个,660为权限设置,后面的为用户以及组:

onrestart exec_background - system system -- /system/bin/vdc volume abort_fuse

服务重启时要执行的命令:

task_profiles ProcessCapacityHigh MaxPerformance

设置任务配置文件:

critical window=${zygote.critical_window.minute:-off} target=zygote-fatal

指定此服务为关键服务:

至此,我们就对照文档了解了整个zygote rc文件的指令,后续如果遇到其它的rc文件,也可以照此办法进行解读。

Android Init Language 源码

Andorid解析rc文件的源码,主要在/system/core/init下面:

比如如果你想了解Android是如何通过解析rc文件创建并启动service的,可以查阅service.cppservice_list.cppservice_parser.cppservice_utils.cpp,这些相关文件。

相关推荐
小陈phd29 分钟前
langGraph从入门到精通(六)——基于 LangGraph 实现结构化输出与智能 Router 路由代理
android·网络·数据库
游戏开发爱好者81 小时前
了解 Xcode 在 iOS 开发中的作用和功能有哪些
android·ios·小程序·https·uni-app·iphone·webview
_昨日重现2 小时前
Jetpack系列之Compose TopBar
android·android jetpack
林胖子的私生活2 小时前
绘制K线第五章:双指放大缩小
android
2501_937189232 小时前
IPTV 2026 优化版:解码适配 + 安全运维双升级,筑牢使用体验基石
android·源码·开源软件·源代码管理
朽木成才2 小时前
Android+Flutter混合开发实战
android·flutter
天燹3 小时前
Qt 6 嵌入 Android 原生应用完整教程
android·开发语言·qt
美狐美颜sdk3 小时前
企业级直播美颜SDK与动态贴纸SDK开发技术方案拆解与落地实践
android·人工智能·计算机视觉·第三方美颜sdk·人脸美型sdk
PwnGuo5 小时前
Android逆向:在 Unidbg 中解决 native 函数内调用 Java 方法的报错
android·java·python
Kratzdisteln5 小时前
【1902】优化后的三路径学习系统
android·学习