目前在研究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. 互联网公司java面试题(一)
  2. php手机定位导航,js实现网页定位导航功能
  3. java同时输入输出buf_java输入输出流小细节
  4. 网络协议命令行处理c语言程序解析,网络协议工程SPIN实验报告剖析.doc
  5. sap和OA之间数值传递2(工程创建)
  6. MySQL笔记1:考察内链接、左连接、右连接。
  7. mysql 临时表增加主键_MySQL之重建表
  8. 开源云操作系统:填补技术空白 加速商业化进程
  9. javamelody监控java项目_使用javamelody监控javaEE
  10. 趋势:“无人化”的未来,这些事情你需要知道!
  11. C# MVC Controller依赖注入的办法
  12. 【正在直播】:CSDN直播间专属福利!1399买Airpods Pro
  13. 【转】灵活运用 SQL SERVER FOR XML PATH
  14. 联想android刷机教程,联想YOGA Tablet 2线刷刷机教程 Android版可救砖
  15. 防护ddos无从下手?了解ddos原理轻松应对危机
  16. Android Xposed模块动态隐藏桌面图标
  17. UIWebView 使用
  18. mysql笔试题18道
  19. poj1008 -- 玛雅历
  20. 【转载】微服务架构论文-马丁福勒

热门文章

  1. bat脚本交互输入_Shell脚本的应用(一)
  2. 适用于特殊类型自然语言分类的自适应特征谱神经网络
  3. MYSQL——《数据库》实验壹——熟悉数据库管理工具、数据库和表的基本操作
  4. 洛谷入门题P1046、P1047、P1427、P1428、P2141、P1567题解(Java语言描述)
  5. 图形学之空间坐标变化之三维图形观察及变换
  6. git项目根据不同需求进行独立开发
  7. 基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - ActiveXForm运行容器...
  8. Spring笔记——使用Spring进行面向切面(AOP)编程
  9. HP-JavaUtil: xls 操作类
  10. UNIX网络编程——进程间通信概述