Android 初始化脚本语法解析

news/2024/7/10 4:16:03 标签: android, 脚本, service, command, class, path
class="baidu_pl">
class="article_content clearfix">
class="htmledit_views">

Android初始化class="tags" href="/tags/JiaoBen.html" title=脚本>脚本语言包含四种类型的语句:

  • 动作(Actions)
  • 指令(Commands)
  • 服务(Services)
  • 选项(Options)

该语言的语法包括下列约定:

  • 所有类型的语句都是基于行(line-oriented)的, 一个语句包含若干个tokens,token之间通过空格字符分隔. 如果一个token中需要包含空格字符,则需要通过C语言风格的反斜线('/')来转义,或者使用双引号把整个token引起来。反斜线还可以出现在一行 的末尾,表示下一行的内容仍然属于当前语句。
  • 以'#'开始的行是注释行。
  • 动作(Actions)和服务(Services)语句隐含表示一个新的段落(section)的开始。 所有的指令(class="tags" href="/tags/COMMAND.html" title=command>commands)和选项(options)归属于上方最近的一个段落。在第一个段落之前的指令(class="tags" href="/tags/COMMAND.html" title=command>commands)和选项 (options)是无效的。
  • 动作(Actions)和服务(Services)拥有唯一性的名字。如果出现重名,那么后出现的定义将被作为错误忽略掉。
动作(Actions)

    动作(Actions)是一个有名字的指令(class="tags" href="/tags/COMMAND.html" title=command>commands)序列。每个动作(Actions)都定义一个触发条件(trigger),用于指示 什么时候执行这个动作。当与动作的触发器匹配的事件发生时,该动作将被添加到一个即将被执行的队列的队尾(除非它已经在队列中)。队列中的 每一个动作被依次取出执行,动作中的每一个指令也将依次执行。初始化程序(Init)在执行一个动作的各项指令的期间,还需要处理其它操作(比如,设备创 建/销毁,属性设置,进程重启)。

一个动作定义的形式如下:

on <trigger>
  <class="tags" href="/tags/COMMAND.html" title=command>command>
  <class="tags" href="/tags/COMMAND.html" title=command>command>
  <class="tags" href="/tags/COMMAND.html" title=command>command>

服务 ( Services )

    服务是初始化程序需要启动的一些程序,初始化程序还有可能会在这些程序退出之后重启它们。Services take 一个服务定义的形式如下:
  class="tags" href="/tags/SERVICE.html" title=service>service <name> <pathname> [ <argument> ]*
  <option>
  <option>
  ...

选项(Options )

选项将影响控制初始化程序运行服务的时机和方法。可能的选项如下表。

选项说明
disabled This class="tags" href="/tags/SERVICE.html" title=service>service will not automatically start with its class. It must be explicitly started by name.
socket <name> <type>  <perm> [ <user> [ <group> ] ] Create a unix domain socket named /dev/socket/<name> and pass its fd to the launched process. Valid <type> values include dgram and stream . user and group default to 0.
user <username> Change to username before exec'ing this class="tags" href="/tags/SERVICE.html" title=service>service. Currently defaults to root.
group <groupname> [ <groupname> ]* Change to groupname before exec'ing this class="tags" href="/tags/SERVICE.html" title=service>service.  Additional  groupnames beyond the first, which is required, are used to set additional groups of the process (with setgroups() ). Currently defaults to root.
capability [ <capability> ]+ Set linux capability before exec'ing this class="tags" href="/tags/SERVICE.html" title=service>service
oneshot Do not restart the class="tags" href="/tags/SERVICE.html" title=service>service when it exits.
class <name> Specify a class name for the class="tags" href="/tags/SERVICE.html" title=service>service.  All class="tags" href="/tags/SERVICE.html" title=service>services in a named class must start and stop together. A class="tags" href="/tags/SERVICE.html" title=service>service is considered of class "default" if one is not specified via the class option.

 

 触发器(Triggers)

 触发器是一个字符串,用于匹配特定的事件,这些事件将触发触发器所属动作(Actions)的执行。

触发器说明
boot This is the first trigger that occurs when init starts (after /init.conf is loaded).
<name>=<value> Triggers of this form occur when the property <name> is set to the specific value <value> .
device-added-<path>
device-removed-<path>
Triggers of these forms occur when a device node is added or removed.
class="tags" href="/tags/SERVICE.html" title=service>service-exited-<name> Triggers of this form occur when the specified class="tags" href="/tags/SERVICE.html" title=service>service exits.


指令(Commands)

CommandDescription
exec <path> [ <argument> ]* Fork and execute a program (<path> ). This will block until the program completes execution. Try to avoid exec. Unlike the builtin class="tags" href="/tags/COMMAND.html" title=command>commands, it runs the risk of getting init "stuck".
export <name> <value> Set the environment variable <name> equal to <value> in the global environment (which will be inherited by all processes started after this class="tags" href="/tags/COMMAND.html" title=command>command is executed).
ifup <interface> Bring the network interface <interface> online.
import <filename> Parse an init config file, extending the current configuration.
hostname <name> Set the host name.
class_start <class="tags" href="/tags/SERVICE.html" title=service>serviceclass> Start all class="tags" href="/tags/SERVICE.html" title=service>services of the specified class if they are not already running.
class_stop <class="tags" href="/tags/SERVICE.html" title=service>serviceclass> Stop all class="tags" href="/tags/SERVICE.html" title=service>services of the specified class if they are currently running.
domainname <name> Set the domain name.
insmod <path> Install the module at <path> .
mkdir <path> Make a directory at <path> .
mount <type> <device> <dir> [ <mountoption> ]* Attempt to mount the named device at the directory <dir> <device> . This may be of the form mtd@name to specify a mtd block device by name.
setkey - currenlty undefined -
setprop <name> <value> Set system property <name> to <value> .
setrlimit <resource> <cur> <max> Set the rlimit for a resource.
start <class="tags" href="/tags/SERVICE.html" title=service>service> Start a class="tags" href="/tags/SERVICE.html" title=service>service running if it is not already running.
stop <class="tags" href="/tags/SERVICE.html" title=service>service> Stop a class="tags" href="/tags/SERVICE.html" title=service>service from running if it is currently running.
symlink <target> <path> Create a symbolic link at <path> with the value <target> .
write <path> <string> [ <string> ]* Open the file at <path> and write one or more strings to it with write(2).

 

属性(Properties)

初始化程序(Init)可以根据需要修改一些系统的属性。

属性说明
init.action Equal to the name of the action currently being executed or "" if none.
init.class="tags" href="/tags/COMMAND.html" title=command>command Equal to the class="tags" href="/tags/COMMAND.html" title=command>command being executed or "" if none.
init.svc.<name> State of a named class="tags" href="/tags/SERVICE.html" title=service>service ("stopped", "running", or "restarting").

init.rc文件示例

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 /system
mount yaffs2 mtd@userdata /data
import /system/etc/init.conf

class_start default
class="tags" href="/tags/SERVICE.html" title=service>service adbd /sbin/adbd
user adb
group adb
class="tags" href="/tags/SERVICE.html" title=service>service usbd /system/bin/usbd -r
user usbd
group usbd
socket usbd 666
class="tags" href="/tags/SERVICE.html" title=service>service zygote /system/bin/app_process -Xzygote /system/bin --zygote
socket zygote 666
class="tags" href="/tags/SERVICE.html" title=service>service runtime /system/bin/runtime
user system
group system
on device-added-/dev/compass
start akmd
on device-removed-/dev/compass
stop akmd
class="tags" href="/tags/SERVICE.html" title=service>service akmd /sbin/akmd
disabled
user akmd
group akmd

http://blogold.chinaunix.net/u3/103613/showart_2237012.html

http://www.niftyadmin.cn/n/1720231.html

相关文章

em rem vh vw

em 在做手机端的时候经常会用到的做字体的尺寸单位em就相当于“倍”&#xff0c;相对于父级比较rem 这里的r就是root的意思&#xff0c;意思是相对于根节点来进行缩放当有嵌套关系的时候&#xff0c;嵌套关系的元素的字体大小始终按照根节点的字体大小进行缩放。vh 当前屏幕可见…

Android(1.5) 开机图片/文字/动画 修改

作者&#xff1a;徐建祥(netpirategmail.com) 日期&#xff1a;2010/03/06 网址&#xff1a;http://www.anymobile.org Android 开机会出现3个画面&#xff1a; a. Linux 系统启动&#xff0c;出现Linux小企鹅画面(reboot)&#xff1b; b. Android平台启动初始化&#xff0c;出…

当你面试的时候,被问到关于Fragment的种种,android入门基础

public int getBreadCrumbTitleRes(); StringRes public int getBreadCrumbShortTitleRes(); public CharSequence getBreadCrumbTitle(); public CharSequence getBreadCrumbShortTitle(); } 可以看到 BackStackEntry 的接口比较简单&#xff0c;关键信息就是 ID 和 Name。 …

Android 调试.so库文件

作者&#xff1a;徐建祥(netpirategmail.com) 日期&#xff1a;2010/03/06 网址&#xff1a;http://www.anymobile.org 调试步骤如下&#xff1a; 1/ 将异常的地址信息存到文本文件&#xff0c;并存放在项目根目录&#xff1b; 2/ 使用panic.py解析该文件&#xff1b; 3/ 根据返…

Java代码调用服务器上的Shell脚本

Java代码调用服务器上的Shell脚本 这里主要是因为我们报表平台有用到用户手工录入的数据作为结果数据且需要纳入saiku去展示 如我们所知&#xff0c;saiku不会自动刷新&#xff0c;所以需要在数据更新接口中调用服务器上的shell脚本 话不多说&#xff0c;上代码&#xff1a; &a…

python类属性实例属性.类方法实例方法静态方法的区别(详细全面)tcy

本人最近做一个项目&#xff0c;对于类有些迷惑&#xff0c;搜索整理比较全面&#xff0c;推荐大家观看以下视频&#xff0c;你会理解python类的真髓。 项目类属性实例属性实例方法类方法静态方法用途:1.类似全局变量1.类实例的变量1.访问类实例属性1.访问类属性1.类似一个独立…

函数不能传递动态内存

https://blog.csdn.net/zjwson/article/details/64123320 1、问题&#xff1a;主要是避免在函数体中为传入的指针直接申请内存&#xff0c;因为传入的实参会发生复制&#xff0c;而函数体是对复制的形参进行操作&#xff0c;并没有直接对实参进行操作&#xff1b; 解决方案&…

Android权限不够问题

很多应用程序在调用Runtime.exec的时候或者创建服务的时候都会遇到权限不够的情况。可采用以下解决方案&#xff1a; AndroidManifest.xml&#xff1a; <manifest xmlns:android"http://schemas.android.com/apk/res/android" package"com.mokoid.LedTest&…