目前在研究framework框架,AIL是Android初始化语言,以下是根据官方文档进行的翻译有助于研究Android启动过程:

Android初始化语言包含了四种类型的声明:Actions(行动)、Commands(命令)、Services(服务)和Options(选项)。

所有这些都是以行为单位的,各种记号由空格来隔开。C语言风格的反斜杠号可用于在记号间插入空格。双引号也可用于防止字符串被空格分割成多个记号。行末的反斜杠用于折行。

注释行以井号(#)开头(允许以空格开头)。

Actions和Services声明一个新的分组。所有的命令或选项都属于最近申明的分组。位于第一个分组之前的命令或选项将会被忽略。

Actions和Services有唯一的名字。如果有重名的情况,第二个申明的将会被作为错误忽略。(???我们是否应该以覆盖来代替忽略)

Actions(行动)

Actions其实就是一序列的Commands(命令)。Actions都有一个trigger(触发器),它被用于决定action的执行时间。当一个符合action触发条件的事件发生时,action会被加入到执行队列的末尾,除非它已经在队列里了。

队列中的每一个action都被依次提取出,而这个action中的每个command(命令)都将被依次执行。Init在这些命令的执行期间还控制着其他的活动(设备节点的创建和注销、属性的设置、进程的重启)。

Actions的形式如下:

on

Services(服务)

Services(服务)是一个程序,他在初始化时启动,并在退出时重启(可选)。Services(服务)的形式如下:

service [ ]*

Options(选项)

Options(选项)是一个Services(服务)的修正者。他们影响Services(服务)在何时,并以何种方式运行。

critical(关键)

说明这是一个对于设备关键的服务。如果他四分钟内退出大于四次,系统将会重启并进入recovery(恢复)模式。

disabled(失效)

说明这个服务不会同与他同trigger(触发器)下的服务自动启动。他必须被明确的按名启动。

setenv (设置环境变量)

在进程启动时将环境变量设置为。

socket [ [ ] ]

创建一个Uinx域的名为/dev/socket/ 的套接字,并传递它的文件描述符给已启动的进程。 必须是 "dgram"或"stream"。User 和 group默认为0。

user

在启动这个服务前改变该服务的用户名。此时默认为root。(???有可能的话应该默认为nobody)。当前,如果你的进程要求Linux capabilities(能力),你无法使用这个命令。即使你是root,你也必须在程序中请求capabilities(能力)。然后降到你想要的uid。

group [ ]*

在启动这个服务前改变该服务的组名。除了(必需的)第一个组名,附加的组名通常被用于设置进程的补充组(通过setgroups())。此时默认为root。(???有可能的话应该默认为nobody)。

oneshot

服务退出时不重启。

class

指定一个服务类。所有同一类的服务可以同时启动和停止。如果不通过class选项指定一个类,则默认为"default"类服务。

onrestart

当服务重启,执行一个命令(下详)。

Triggers(触发器)

Triggers(触发器)是一个用于匹配特定事件类型的字符串,用于使Actions(行动)发生。

boot

这是init执行后的第一个被触发的Triggers(触发器)。(在 /init.conf (启动配置文件)被装载之后)

=

这种形式的Triggers(触发器)会在属性被设置为指定的时被触发。

device-added-

device-removed-

这种形式的Triggers(触发器)会在一个设备节点文件被增删时触发。

service-exited-

这种形式的Triggers(触发器)会在一个特定的服务退出时触发。

Commands(命令)

exec [ ]*

创建和执行一个程序()。在程序完全执行前,init将会阻塞。由于它不是内置命令,应尽量避免使用exec,它可能会引起init卡死。(??? 是否需要一个超时设置?)

export

在全局环境变量中设在环境变量 为。(这将会被所有在这命令之后运行的进程所继承)

ifup

启动网络接口

import

解析一个init配置文件,扩展当前配置。

hostname

设置主机名。

chmod

更改文件访问权限。

chown

更改文件的所有者和组。

class_start

启动所有指定服务类下的未运行服务。

class_stop

停止指定服务类下的所有已运行的服务。

domainname

设置域名。

insmod

加载中的模块。

mkdir [mode] [owner] [group]

创建一个目录,可以选择性地指定mode、owner以及group。如果没有指定,默认的权限为755,并属于root用户和root组。

mount

[ ]*

试图在目录挂载指定的设备。 可以是以 mtd@name 的形式指定一个mtd块设备。包括 "ro"、"rw"、"remount"、"noatime"、 ...

setkey

待完成......(暂时不可用)

setprop

设置系统属性 为 值.

setrlimit

设置的rlimit(资源限制)。

start

启动指定服务(如果此服务还未运行)。

stop

停止指定服务(如果此服务在运行中)。

symlink

创建一个指向的软连接。

sysclktz

设置系统时钟基准(0代表时钟滴答以格林威治平均时(GMT)为准)

trigger

触发一个事件。用于将一个action与另一个 action排列。(?????)

write [ ]*

打开路径为的一个文件,并写入一个或多个字符串。

Properties(属性)

Init更新一些系统属性以提供对正在发生的事件的监控能力:

init.action

此属性值为正在被执行的action的名字,如果没有则为""。

init.command

此属性值为正在被执行的command的名字,如果没有则为""。

init.svc.

名为的service的状态("stopped"(停止), "running"(运行), "restarting"(重启))

init.conf实例

# not complete -- just providing some examples of usage

#

on boot

export PATH /sbin:/system/sbin:/system/bin

export LD_LIBRARY_PATH /system/lib

mkdir /dev

mkdir /proc

mkdir /sys

mount tmpfs tmpfs /dev

mkdir /dev/pts

mkdir /dev/socket

mount devpts devpts /dev/pts

mount proc proc /proc

mount sysfs sysfs /sys

write /proc/cpu/alignment 4

ifup lo

hostname localhost

domainname localhost

mount yaffs2 [mtd@system](http://blog.163.com/kissinger_1984/blog/static/168992520099121305590/mtd@system) /system

mount yaffs2 [mtd@userdata](http://blog.163.com/kissinger_1984/blog/static/168992520099121305590/mtd@userdata) /data

import /system/etc/init.conf

class_start default

service adbd /sbin/adbd

user adb

group adb

service usbd /system/bin/usbd -r

user usbd

group usbd

socket usbd 666

service zygote /system/bin/app_process -Xzygote /system/bin --zygote

socket zygote 666

service runtime /system/bin/runtime

user system

group system

on device-added-/dev/compass

start akmd

on device-removed-/dev/compass

stop akmd

service akmd /sbin/akmd

disabled

user akmd

group akmd

调试记录

在默认情况下,程序在被init执行时会将标准输出和标准错误都重定向到/dev/null(丢弃)。若你想要获得调试信息,你可以通过Andoird系统中的logwrapper程序执行你的程序。它会将标准输出/标准错误都重定向到Android日志系统(通过logcat访问)。

例如:

service akmd /system/bin/logwrapper /sbin/akmd

android 初始化语言,25.Android init language (安卓初始化语言)相关推荐

  1. android 初始化语言,Android Init Language(安卓初始化语言)

    android源码学习目录 了解Android init进程的都知道,启动 init进程之前会解析init.rc文件,init.rc是Android的配置文件脚本,它由一种被称为"Andro ...

  2. android圆角布局阴影,Android 布局阴影实现

    最近项目要求,ui有很多有关于阴影的设计要求,网上找了些实现方式,但都不是很理想.现在闲下来了,就寻思着自己写个阴影布局耍耍,以备后用.先说道说道我找到的几种阴影实现方式: 系统阴影 Andorid ...

  3. android 边距 百分比,Android百分比布局:PercentRelativeLayout

     Android百分比布局:PercentRelativeLayout 在最新的Android support包中,增加了开发者期待的百分比布局PercentRelativeLayout和Perc ...

  4. android计算器工程布局,Android 计算器布局测试

    1 <?xml version="1.0" encoding="utf-8"?> 2 3 android:layout_width="ma ...

  5. android 初始化 脚本,Android init language与init.rc初始化脚本

    微信公众号:杨源鑫 如果你觉得文章对你有帮助,欢迎在评论区交流讨论 参考: android源码目录里的system/core/init/readme.txt. Android系统里以*.rc为扩展名为 ...

  6. Android Init Language(RC文件)介绍

    Android Init Language介绍 基本概念 什么是rc文件? Android Init进程用rc做了什么? 相关内容 Android RC文件应用 Android rc文件语法解析 Li ...

  7. Android Init Language

    目录 Android Init Language Init .rc Files Actions Services Options Triggers Commands Imports Propertie ...

  8. Android Init Language : init.rc

    Android Init Language system\core\init\README.md 1.相关配置目录 /system/etc/init/ 用于核心系统项,例如SurfaceFlinger ...

  9. 安卓c语言assets,Android Studio神器之Vector Asset

    从Android 8.0(API 26)之后,Android开始引入矢量图,矢量图的常用格式是svg.在Android 8.0之前只使用位图(格式是png)作为Android的图片素材,但是因为And ...

最新文章

  1. 8086算术移位指令SAL和SAR
  2. my eclipse 类似dreamweaver编辑html,8款替代Dreamweaver的开源网页开发工具
  3. app canvas渲染后图片黑色_H5 基于 canvas 实现电子签名并生成PDF文档
  4. java明文发送_使用java MD5加密网络明文
  5. php socket 心跳机制,socket学习纪录2: workerman 心跳功能实现
  6. 简单登录页面html代码
  7. 世界银行贷款可持续发展农业项目商业计划书
  8. 网易博客日志:《数字滤波器》交流-6-LMS算法的训练及工作阶段
  9. 最新HTML微信聊天对话生成器网页源码+实测可用
  10. 【目录】博客目录 | 先点这里
  11. Foxmail提示错误421 too many connections【企业邮箱申请】
  12. Buxwiz注册详解
  13. 什么是Subversion?
  14. android apk 自动更新,Android自动更新APK
  15. gmail收件箱标签设置_如何在Gmail中自动分类的收件箱选项卡之间移动电子邮件...
  16. 四大最值得推荐的信息安全从业者认证
  17. 第2讲 C语言 赋值语句
  18. [Python3] Matplotlib.pyplot.plot图形符号、风格及颜色缩写速查表
  19. 为了写个网络互连技术课程设计搞了一个星期ensp
  20. C语言初级——变量、常量

热门文章

  1. 工业大数据分析综述:模型与算法
  2. 【Java】Maven报错 Dependency ‘aspectj:aspectjrt:1.5.4‘ not found 的解决方法
  3. 【数字逻辑设计】Logisim构建三种多路选择器
  4. Vigenère密码(洛谷P1079题题解,Java语言描述)
  5. 以太坊智能合约 solidity 的常用的数据结构介绍
  6. zookeeper伪集群部署
  7. laravel 错误与日志
  8. 痞子衡嵌入式:飞思卡尔i.MX RTyyyy系列MCU特性介绍(3)- 命名规则
  9. asp教程七:包含文件
  10. 高效 Java Web 开发框架 JessMA v3.2.1 正式发布