android 官方說明

10余年的滴道網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營銷型網(wǎng)站建設(shè)的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整滴道建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“滴道網(wǎng)站設(shè)計(jì)”,“滴道網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
Android Init 語言由四大類語句組成,它們是 Actions、Commands、Services 和 Options。
所有這些都是面向行的,由空格分隔的標(biāo)記組成。 c 樣式的反斜杠轉(zhuǎn)義可用于將空格插入到標(biāo)記中。 雙引號(hào)也可用于防止空格將文本分成多個(gè)標(biāo)記。 反斜杠,當(dāng)它是一行的最后一個(gè)字符時(shí),可以用于換行。
以 # 開頭的行(允許前導(dǎo)空格)是注釋。
Actions 和 Services 隱式聲明了一個(gè)新部分。 所有Commands或Options都屬于最近聲明的部分。 第一部分之前的Commands或Options將被忽略。
Actions 和Services 具有唯一的名稱。 如果第二個(gè) Action 或 Service 被聲明為與現(xiàn)有的同名,則將其作為錯(cuò)誤忽略。 (???我們應(yīng)該覆蓋而不是)
Actions 是命名的命令序列。 Actions 有一個(gè)觸發(fā)器,用于確定動(dòng)作何時(shí)發(fā)生。 當(dāng)發(fā)生與Actions 的觸發(fā)器匹配的事件時(shí),該Actions 將添加到待執(zhí)行隊(duì)列的尾部(除非它已經(jīng)在隊(duì)列中)。
隊(duì)列中的每個(gè) action 都按順序出隊(duì),并且該動(dòng)作中的每個(gè)命令都按順序執(zhí)行。 Init 在活動(dòng)中的命令執(zhí)行“之間”處理其他活動(dòng)(設(shè)備創(chuàng)建/銷毀、屬性設(shè)置、進(jìn)程重 啟)。
命令采取以下形式:
服務(wù)是在它們退出時(shí)啟動(dòng)并(可選)重新啟動(dòng)的程序。
服務(wù)采取以下形式:
選項(xiàng)是服務(wù)的調(diào)節(jié)器。他們影響init進(jìn)程如何并且何時(shí)運(yùn)行這個(gè)服務(wù)。
觸發(fā)器是可用于匹配某些類型的字符串
事件并用于導(dǎo)致動(dòng)作發(fā)生。
boot
這是 init 啟動(dòng)時(shí)將發(fā)生的第一個(gè)觸發(fā)器
(在 /init.conf 加載后)
name=value
設(shè)置屬性 name 時(shí)會(huì)發(fā)生這種形式的觸發(fā)器
到特定值 value。
device-added-path
device-removed-path/pre
添加設(shè)備節(jié)點(diǎn)時(shí)會(huì)發(fā)生這些形式的觸發(fā)器
或刪除。
service-exited-name
這種形式的觸發(fā)器在指定的服務(wù)退出時(shí)發(fā)生。
init : 單詞翻譯過來是 初始化的意思, 并不是一個(gè)官方提供的api函數(shù),一般來說,程序員習(xí)慣自己寫一個(gè) init( ) 函數(shù) 來作為 自己寫的 類/activity/surfaceview 的 首次執(zhí)行初始化的操作,比如加載資源,比如給一些變量初始賦值,
并不是都需要放在init中, 控件 只要求在使用其之前 實(shí)例化就好,你要用了再來實(shí)例化取出也不晚, 只是 習(xí)慣上 把 要用的控件 都在 oncreate中 統(tǒng)一實(shí)例化,方便,易看, 但是把代碼放在oncreate中很難看的感覺, 所以再創(chuàng)一個(gè)函數(shù) init……之類的,把初始化代碼都放里面,方便整改
第一篇: Android系統(tǒng)啟動(dòng)之bootloader
第二篇: Android系統(tǒng)啟動(dòng)之Init流程(上)
第三篇: Android系統(tǒng)啟動(dòng)之Init流程(下)
第四篇: Android系統(tǒng)啟動(dòng)之init.rc文件解析過程
第五篇: Android系統(tǒng)啟動(dòng)之zyogte進(jìn)程
第六篇: Android系統(tǒng)啟動(dòng)之zyogte進(jìn)程java(上)
第七篇: Android系統(tǒng)啟動(dòng)之zyogte進(jìn)程java(下)
第八篇: Android系統(tǒng)啟動(dòng)之SystemServer
Android init.rc文件由系統(tǒng)第一個(gè)啟動(dòng)的init程序解析。是啟動(dòng)系統(tǒng)服務(wù)使用的文件。
主要包含了四種類型的語句:
Action和services顯式聲明了一個(gè)語句塊,而commands和options屬于最近聲明的語句塊。
在第一個(gè)語句塊之前 的commands和options會(huì)被忽略.
基本規(guī)則如下:
動(dòng)作表示了一組命令(commands)組成.動(dòng)作包括一個(gè)觸發(fā)器,決定了何時(shí)運(yùn)行這個(gè)動(dòng)作。
注意: 當(dāng)觸發(fā)器的條件滿足時(shí),這個(gè)動(dòng)作會(huì)被增加到已被運(yùn)行的隊(duì)列尾。假設(shè)此動(dòng)作在隊(duì)列中已經(jīng)存在,那么它將不會(huì)運(yùn)行.
一個(gè)動(dòng)作所包括的命令將被依次運(yùn)行。
在"動(dòng)作"(action)里面的,on后面跟著的字符串是觸發(fā)器(trigger),trigger是一個(gè)用于匹配某種事件類型的字符串,它將對(duì)應(yīng)的Action的執(zhí)行。
觸發(fā)器(trigger)有幾種格式:
常見的格式:
command是action的命令列表中的命令,或者是service中的選項(xiàng) onrestart 的參數(shù)命令.
命令將在所屬事件發(fā)生時(shí)被一個(gè)個(gè)地執(zhí)行.
常見命令:
服務(wù)是指那些須要在系統(tǒng)初始化時(shí)就啟動(dòng)或退出時(shí)自己主動(dòng)重新啟動(dòng)的程序.
解釋一下各個(gè)參數(shù):
options是Service的修訂項(xiàng)。它們決定一個(gè)服務(wù)何時(shí)以及如何運(yùn)行.
使用例子:
源碼路徑 system/core/init/init.cpp 中:
開始解析rc文件.
ParseConfig函數(shù)在文件 core/init/init_parser.cpp 140行:
ParseConfigFile函數(shù):
Android init.rc文件淺析
安卓系統(tǒng)啟動(dòng)--3init.rc解析
init.rc深入學(xué)習(xí)
1.Root設(shè)備
Root權(quán)限下才能快樂調(diào)試。
使用市面上的各種Root師傅工具。
2.連接設(shè)備
將設(shè)備打開調(diào)試模式在開發(fā)者選項(xiàng)里。
將IDA安裝目錄中dbgsrv文件夾下的android_server推送到設(shè)備系統(tǒng)目錄并賦可執(zhí)行權(quán)限。在高于IDA6.6版本才能調(diào)試高版本android,此時(shí)調(diào)試低版本Android SO時(shí),需要使用的是android_nonpipe。
在PC端輸入命令:
adb shell su
adb shell android_server的路徑/android_server
保持上面窗口,在命令行窗口進(jìn)行端口轉(zhuǎn)發(fā):
adb forward tcp:23946 tcp:23946
為什么是23946呢,IDA和push進(jìn)設(shè)備的android_server默認(rèn)用都用23946端口進(jìn)行通訊。當(dāng)然可以修改。
3.打開IDA
附加或者啟動(dòng)進(jìn)程的過程不再多言。
4.定位INIT函數(shù)
比較便捷的方法是找一份與設(shè)備同系統(tǒng)版本號(hào)的android源碼。解析執(zhí)行SO文件的地方在linker.c(cpp)中。
因?yàn)椴煌姹居胁町悾揖筒簧蠄D了。
高版本時(shí)在do_dlopen()下的CallConstructors()里面,但是編譯系統(tǒng)時(shí)往往將其和find_library融合在其父函數(shù)中,查找時(shí)需注意。一個(gè)簡便方法是源碼中搜索“INIT”四個(gè)字.
先將設(shè)備中的linker pull出來用IDA分析來確定調(diào)用INIT的具體位置。
因?yàn)閘inker在Android進(jìn)程中加載非常早,所以它在IDA中的地址可以不用修正直接拿來用。
5.下斷在INIT
下斷點(diǎn)后,執(zhí)行Apk中觸發(fā)加載該SO的功能。
正常情況下就能停在該SO的INIT前了。
網(wǎng)站欄目:androidinit,android initrc添加服務(wù)
文章出自:http://chinadenli.net/article32/dsejgsc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司、網(wǎng)站維護(hù)、軟件開發(fā)、靜態(tài)網(wǎng)站、品牌網(wǎng)站設(shè)計(jì)、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)