Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android初始化語言

Android初始化語言

編輯:關於Android編程

init.rc 文件並不是普通的配置文件,而是由一種被稱為“Android初始化語言”(Android Init Language,這裡簡稱為AIL)的腳本寫成的文件。

AIL由如下4部分組成:

1. 動作(Actions)

2. 命令(Commands)

3.服務(Services)

4. 選項(Options)

這4部分都是面向行的代碼,也就是說用回車換行符作為每一條語句的分隔符。而每一行的代碼由多個符號(Tokens)表示。可以使用反斜槓轉義符在 Token中插入空格。雙引號可以將多個由空格分隔的Tokens合成一個Tokens。如果一行寫不下,可以在行尾加上反斜槓,來連接下一行。也就是說,可以用反斜槓將多行代碼連接成一行代碼。

AIL的注釋與很多Shell腳本一行,以#開頭。

AIL在編寫時需要分成多個部分(Section),而每一部分的開頭需要指定Actions或Services。也就是說,每一個Actions或 Services確定一個Section。而所有的Commands和Options只能屬於最近定義的Section。如果Commands和 Options在第一個Section之前被定義,它們將被忽略。

Actions和Services的名稱必須唯一。如果有兩個或多個Action或Service擁有同樣的名稱,那麼init在執行它們時將拋出錯誤,並忽略這些Action和Service。

下面來看看Actions、Services、Commands和Options分別應如何設置。

Actions的語法格式如下:

on

 

也就是說Actions是以關鍵字on開頭的,然後跟一個觸發器,接下來是若干命令。例如,下面就是一個標准的Action。

on boot

ifup lo

hostname localhost

domainname localdomain

其中boot是觸發器,下面三行是command

那麼init.rc到底支持哪些觸發器呢?目前init.rc支持如下5類觸發器。

1. boot

這是init執行後第一個被觸發Trigger,也就是在/init.rc被裝載之後執行該Trigger

2. =

當屬性被設置成時被觸發。例如,

on property:vold.decrypt=trigger_reset_main

class_reset main

3. device-added-

當設備節點被添加時觸發

4. device-removed-

當設備節點被移除時添加

5. service-exited-

會在一個特定的服務退出時觸發

Actions後需要跟若干個命令,這些命令如下:

1. exec [ ]*

創建和執行一個程序()。在程序完全執行前,init將會阻塞。由於它不是內置命令,應盡量避免使用exec ,它可能會引起init執行超時。

2. export

在全局環境中將變量的值設為。(這將會被所有在這命令之後運行的進程所繼承)

3. ifup

啟動網絡接口

4. import

指定要解析的其他配置文件。常被用於當前配置文件的擴展

5. hostname

設置主機名

6. chdir

改變工作目錄

7. chmod

改變文件的訪問權限

8. chown

更改文件的所有者和組

9. chroot

改變處理根目錄

10. class_start

啟動所有指定服務類下的未運行服務。

11 class_stop

停止指定服務類下的所有已運行的服務。

12. domainname

設置域名

13. insmod

加載指定的驅動模塊

14. mkdir [mode][owner] [group]

創建一個目錄,可以選擇性地指定mode、owner以及group。如果沒有指定,默認的權限為755,並屬於root用戶和 root組。

15. mount

[ ]*

 

試圖在目錄

掛載指定的設備。可以是mtd@name的形式指定一個mtd塊設備。包括 ro、rw、re

 

16. setkey

保留,暫時未用

17. setprop

將系統屬性的值設為

18. setrlimit

設置的rlimit (資源限制)

19. start

啟動指定服務(如果此服務還未運行)。

20.stop

停止指定服務(如果此服務在運行中)。

21. symlink

創建一個指向的軟連接

22. sysclktz

設置系統時鐘基准(0代表時鐘滴答以格林威治平均時(GMT)為准)

23. trigger

觸發一個事件。用於Action排隊

24. wait [ ]

等待一個文件是否存在,當文件存在時立即返回,或到指定的超時時間後返回,如果不指定,默認超時時間是5秒。

25. write [ ]*

指定的文件寫入一個或多個字符串。

Services (服務)是一個程序,他在初始化時啟動,並在退出時重啟(可選)。Services (服務)的形式如下:

service [ ]*

 

 

例如,下面是一個標准的Service用法

service servicemanager/system/bin/servicemanager

class core

user system

group system

critical

onrestart restartzygote

onrestart restartmedia

onrestart restartsurfaceflinger

onrestart restartdrm

Services的選項是服務的修飾符,可以影響服務如何以及怎樣運行。服務支持的選項如下:

1. critical

表明這是一個非常重要的服務。如果該服務4分鐘內退出大於4次,系統將會重啟並進入 Recovery (恢復)模式。

2. disabled

表明這個服務不會同與他同trigger(觸發器)下的服務自動啟動。該服務必須被明確的按名啟動。

3. setenv

在進程啟動時將環境變量設置為

4. socket [ [ ] ]

Create a unix domainsocketnamed /dev/socket/ and pass

its fd to thelaunchedprocess. must bedgram,stream or seqpacket.

User and group default to0.

創建一個unix域的名為/dev/socket/的套接字,並傳遞它的文件描述符給已啟動的進程。 必須是 dgram,stream 或seqpacket。用戶和組默認是0。

5. user

在啟動這個服務前改變該服務的用戶名。此時默認為 root。

6. group [ ]*

在啟動這個服務前改變該服務的組名。除了(必需的)第一個組名,附加的組名通常被用於設置進程的補充組(通過setgroups函數),檔案默認是root。

7. oneshot

服務退出時不重啟。

8. class

指定一個服務類。所有同一類的服務可以同時啟動和停止。如果不通過class選項指定一個類,則默認為default類服務。

9. onrestart

當服務重啟,執行一個命
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved