【移動應用開發(fā)技術】創(chuàng)建Android守護進程實例(底層服務)_第1頁
【移動應用開發(fā)技術】創(chuàng)建Android守護進程實例(底層服務)_第2頁
【移動應用開發(fā)技術】創(chuàng)建Android守護進程實例(底層服務)_第3頁
【移動應用開發(fā)技術】創(chuàng)建Android守護進程實例(底層服務)_第4頁
免費預覽已結(jié)束,剩余1頁可下載查看

下載本文檔

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

文檔簡介

【移動應用開發(fā)技術】創(chuàng)建Android守護進程實例(底層服務)

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

/system/core/

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

/system/core/nativeservice/

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

推進編譯系統(tǒng)編寫好Android.mk和native_main.cpp后,可以通過單邊命令“mmmsystem/core/nativeservice”編譯我們的守護進程了。但是此時用make編譯整個AOSP時,卻不會編譯我們的nativeservice。因此,需要告訴編譯系統(tǒng),編譯工程時,同時編譯nativeservice。修改如下在/build/make/target/product/core.mk文件添加nativeservice,當然不限制添加在這個文件,很多廠商的工程,也會增加自己的PRODUCT_PACKAGES配置mk文件。配置開機啟動至此,編譯整個工程,守護進程也可以被編譯了,這個時候,刷到手機是否就可以運行了呢?不會的,我們還需要讓守護進程在手機開機的時候運行起來,且運行中進程死掉的話,也需要重新啟動守護進程。方法如下在system/core/rootdir/init.rc文件中添加如下代碼讀者可以查看AOSP中system/core/init/README.md文件了解init.rc的語法和配置方法。對于classcore等不同類別的區(qū)別,讀者可以閱讀《Android加密之全盤加密》相關的闡述。配置SeAndroid至此,編譯整個工程,守護進程也可以被編譯了,也配置了開機自啟動。這個時候,刷到手機是否就可以運行守護進程了呢?不可以,我們知道Android繼用了SeLinux安全機制,同時發(fā)展出SeAndroid機制,所有文件和進程都需要配置SeAndroid才能有權(quán)限。因此,如果沒有給守護進程以及守護進程需要操作的目錄和文件賦予權(quán)限,都會被SeAndroid過濾或禁止。由于QCOM和Mediatek的不同,在相關文件的放置路徑會不同,但是方法都是一樣的,不同的平臺,找到對應的路徑下的文件就可以了。本文以MTK平臺的為例。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)容如下刷機驗證至此,需要編譯整個AOSP工程,當然,如果有編譯過,只需要增量編譯即可,很快就可以編譯完成。1、刷機后在手機的/system/bin/nativeservie目錄下能看到守護進程;2、看一下SeAndroid的SContext3、看一下FIFO管道文件4、prwx前面的p代表是一個管道文件5、管道文件SeAndroid的tcontext6、守護進程啟動,啟動后打開管道,等待管道數(shù)據(jù)寫入。由于守護進程比抓log的工具啟動還早,因此,開機時前面的log無法抓取,如下log是手動kill掉守護進程打印的lo

溫馨提示

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

評論

0/150

提交評論