【移動(dòng)應(yīng)用開發(fā)技術(shù)】創(chuàng)建Android守護(hù)進(jìn)程實(shí)例(底層服務(wù))_第1頁
【移動(dòng)應(yīng)用開發(fā)技術(shù)】創(chuàng)建Android守護(hù)進(jìn)程實(shí)例(底層服務(wù))_第2頁
【移動(dòng)應(yīng)用開發(fā)技術(shù)】創(chuàng)建Android守護(hù)進(jìn)程實(shí)例(底層服務(wù))_第3頁
【移動(dòng)應(yīng)用開發(fā)技術(shù)】創(chuàng)建Android守護(hù)進(jìn)程實(shí)例(底層服務(wù))_第4頁
免費(fèi)預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

【移動(dòng)應(yīng)用開發(fā)技術(shù)】創(chuàng)建Android守護(hù)進(jìn)程實(shí)例(底層服務(wù))

前言Android底層服務(wù),即運(yùn)行在linux下的進(jìn)程,是Android系統(tǒng)運(yùn)行的基礎(chǔ),完成Android或者說計(jì)算機(jī)最基本的功能。比如連接服務(wù)(包括WIFI,BT等等);比如Android的adb功能;比如存儲(chǔ)監(jiān)控等等。沒有這些底層服務(wù),上層也就沒有了對(duì)應(yīng)的功能。Android底層服務(wù)往往是常駐內(nèi)存,時(shí)刻運(yùn)行完成任務(wù)。底層服務(wù)進(jìn)程,往往具有更多的權(quán)限,可能和驅(qū)動(dòng)通信,可能和linux內(nèi)核通信,可能需要操作系統(tǒng)核心運(yùn)行文件以及節(jié)點(diǎn)等等。所以,底層服務(wù),可以幫你完成更多計(jì)算機(jī)基本功能。本文所使用的AOSP是基于Android8.1。閱讀文本需要對(duì)Android的架構(gòu)、編譯系統(tǒng)、AOSP工程和SeAndroid有基本認(rèn)識(shí)。創(chuàng)建守護(hù)進(jìn)程創(chuàng)建目錄編寫代碼創(chuàng)建目錄我們?cè)贏ndroid系統(tǒng)通用守護(hù)進(jìn)程目錄下創(chuàng)建我們的守護(hù)進(jìn)程,當(dāng)然你也可以在其它目錄下放置你的守護(hù)進(jìn)程。

/system/core/

/system/core/在上面的目錄下,創(chuàng)建守護(hù)進(jìn)程的文件夾nativeservice,那么,我們的守護(hù)進(jìn)程就存在如下目錄,下文中稱簡(jiǎn)稱目錄代表如下目錄。

/system/core/nativeservice/

/system/core/nativeservice/編寫代碼在目錄中創(chuàng)建主代碼文件native_main.cpp。另外,我們需要編譯,那么就需要mk文件,創(chuàng)建一個(gè)Android.mk文件。這時(shí),目錄架構(gòu)就是如下這個(gè)樣子編寫Android.mk我在代碼中盡可能的注釋清楚重要語句的作用,讀者如果對(duì)AndroidAOSP編譯不了解的,可以查閱更多mk語法的資料學(xué)習(xí)。編寫native_main.cpp在Linux中,一個(gè)開機(jī)啟動(dòng)的服務(wù),執(zhí)行完后會(huì)自動(dòng)退出,而我們是守護(hù)進(jìn)程,那么就需要一直運(yùn)行。讓程序一直運(yùn)行有很多種方法。在native_main.cpp中貼出了三種方式,它們分別是epoll,有名管道(FIFO)和循環(huán)。epoll的方式是Android系統(tǒng)比較常見的方式,系統(tǒng)的電池狀態(tài)變化、USB接口狀態(tài)變化等守護(hù)進(jìn)程便是通過epoll的方式,實(shí)時(shí)鑒定并讀取新狀態(tài)。有名管道,在IPC通信中比較簡(jiǎn)單、便捷,適合輕量級(jí)任務(wù)。循環(huán),這個(gè)是最老套的方式。三種方式在native_main.cpp都貼出來了,本文側(cè)重使用有名管道(FIFO)的方式,鑒于篇幅過長,其它方式就一筆帶過了,如果讀者對(duì)epoll等較為興趣的,可以自行查閱更多資料學(xué)習(xí)。下面是native_main.cpp的代碼,請(qǐng)認(rèn)真看注釋哦。

推進(jìn)編譯系統(tǒng)編寫好Android.mk和native_main.cpp后,可以通過單邊命令“mmmsystem/core/nativeservice”編譯我們的守護(hù)進(jìn)程了。但是此時(shí)用make編譯整個(gè)AOSP時(shí),卻不會(huì)編譯我們的nativeservice。因此,需要告訴編譯系統(tǒng),編譯工程時(shí),同時(shí)編譯nativeservice。修改如下在/build/make/target/product/core.mk文件添加nativeservice,當(dāng)然不限制添加在這個(gè)文件,很多廠商的工程,也會(huì)增加自己的PRODUCT_PACKAGES配置mk文件。配置開機(jī)啟動(dòng)至此,編譯整個(gè)工程,守護(hù)進(jìn)程也可以被編譯了,這個(gè)時(shí)候,刷到手機(jī)是否就可以運(yùn)行了呢?不會(huì)的,我們還需要讓守護(hù)進(jìn)程在手機(jī)開機(jī)的時(shí)候運(yùn)行起來,且運(yùn)行中進(jìn)程死掉的話,也需要重新啟動(dòng)守護(hù)進(jìn)程。方法如下在system/core/rootdir/init.rc文件中添加如下代碼讀者可以查看AOSP中system/core/init/README.md文件了解init.rc的語法和配置方法。對(duì)于classcore等不同類別的區(qū)別,讀者可以閱讀《Android加密之全盤加密》相關(guān)的闡述。配置SeAndroid至此,編譯整個(gè)工程,守護(hù)進(jìn)程也可以被編譯了,也配置了開機(jī)自啟動(dòng)。這個(gè)時(shí)候,刷到手機(jī)是否就可以運(yùn)行守護(hù)進(jìn)程了呢?不可以,我們知道Android繼用了SeLinux安全機(jī)制,同時(shí)發(fā)展出SeAndroid機(jī)制,所有文件和進(jìn)程都需要配置SeAndroid才能有權(quán)限。因此,如果沒有給守護(hù)進(jìn)程以及守護(hù)進(jìn)程需要操作的目錄和文件賦予權(quán)限,都會(huì)被SeAndroid過濾或禁止。由于QCOM和Mediatek的不同,在相關(guān)文件的放置路徑會(huì)不同,但是方法都是一樣的,不同的平臺(tái),找到對(duì)應(yīng)的路徑下的文件就可以了。本文以MTK平臺(tái)的為例。1、在device/mediatek/sepolicy/basic/non_plat/file_contexts中添加如下代碼

/system/bin/nativeserviceu:object_r:nativeservice_exec:s0

/system/bin/nativeserviceu:object_r:nativeservice_exec:s02、在device/mediatek/sepolicy/basic/non_plat/中添加nativeservice.te文件,文件內(nèi)容如下刷機(jī)驗(yàn)證至此,需要編譯整個(gè)AOSP工程,當(dāng)然,如果有編譯過,只需要增量編譯即可,很快就可以編譯完成。1、刷機(jī)后在手機(jī)的/system/bin/nativeservie目錄下能看到守護(hù)進(jìn)程;2、看一下SeAndroid的SContext3、看一下FIFO管道文件4、prwx前面的p代表是一個(gè)管道文件5、管道文件SeAndroid的tcontext6、守護(hù)進(jìn)程啟動(dòng),啟動(dòng)后打開管道,等待管道數(shù)據(jù)寫入。由于守護(hù)進(jìn)程比抓log的工具啟動(dòng)還早,因此,開機(jī)時(shí)前面的log無法抓取,如下log是手動(dòng)kill掉守護(hù)進(jìn)程打印的lo

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論