日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

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

發布時間:2025/3/15 Android 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 初始化语言,25.Android init language (安卓初始化语言) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目前在研究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 (安卓初始化语言)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。