一種將安卓系統(tǒng)服務插件化的實現(xiàn)方法
【技術(shù)領域】
[0001]本發(fā)明涉及到嵌入式設備上搭建安卓系統(tǒng)的技術(shù)領域,更具體的說,是提供了一種可方便地針對不同產(chǎn)品需求定制系統(tǒng)服務的方法,可在節(jié)省硬件資源的同時提升系統(tǒng)性會K。
【背景技術(shù)】
[0002]自從安卓發(fā)布第一個版本以來,系統(tǒng)的碎片化和兼容性一直是谷歌的工程師致力解決的問題,經(jīng)歷數(shù)個版本的更替,當前的版本無論是在兼容性還是穩(wěn)定性上都有了極大的提升。已經(jīng)兼容了手機、平板的不同規(guī)格的產(chǎn)品,針對不同分類設備的兼容工作也已經(jīng)在最新的版本中得到體現(xiàn)。但隨之而來的問題是龐大的服務框架使系統(tǒng)顯得過于臃腫,占用了寶貴的硬盤空間、拖慢了系統(tǒng)的運行速度、消耗更多的電池電量。而這些也正是廣大安卓用戶一直垢病的地方。
[0003]如圖1是安卓原生的服務結(jié)構(gòu)圖,上層服務的主要通過服務管理程序(ServiceManager)相互通訊,底層通訊的實現(xiàn)則是基于內(nèi)核的Binder驅(qū)動完成。系統(tǒng)服務主要有兩部分組成,一部分上層應用、服務管理的服務集中在系統(tǒng)服務(SystemServer)這個系統(tǒng)核心進程中,另外一部分功能相對獨立的服務則分散在其它的本地(Native)進程中。原生系統(tǒng)提供了全面的功能來兼容不同平臺的需求,僅SystemServer—項就啟動了接近50個服務,但實際上很大一部分服務在特定硬件平臺上并沒有存在的必要。
[0004]圖2為原生安卓啟動后各個進程占用內(nèi)存比例圖,所采用的系統(tǒng)為版本為Android-4.4.2,主要用于說明純凈的安卓平臺啟動后各個進程所消耗的內(nèi)存資源,該數(shù)據(jù)的分析結(jié)果是本發(fā)明進行性能優(yōu)化工作的前提。
[0005]圖3為安卓系統(tǒng)服務插件化流程分析,其實現(xiàn)方式大致可以分為三個過程分析。分別為系統(tǒng)服務插件化分析、系統(tǒng)插件化服務框架啟動、系統(tǒng)服務調(diào)用流程。以下是調(diào)用步驟。
[0006]步驟S301、系統(tǒng)服務插件化分析開始。這一部分是實現(xiàn)安卓服務插件化的前提條件。安卓的系統(tǒng)服務框架博大精深,要實現(xiàn)插件化的服務框架必須對整個系統(tǒng)服務有深入的了解和分析。
[0007]步驟S302、系統(tǒng)服務必要性分析。安卓原生服務雜揉在一起,服務之間的依賴關(guān)系錯綜復雜,必須先對解除系統(tǒng)服務間的相互依賴關(guān)系才能實現(xiàn)系統(tǒng)服務的插件化管理。這一部分正是解除系統(tǒng)服務間的相互依賴關(guān)系,同時分離出系統(tǒng)的核心服務。圖4給出了可以參與插件化的系統(tǒng)服務集成的分析結(jié)果。
[0008]步驟S303、系統(tǒng)服務占用資源分析。除了依據(jù)圖2總結(jié)的系統(tǒng)進程占用內(nèi)存資源分析結(jié)果以外,還需要梳理SystemServer進程中每個服務占用的系統(tǒng)資源,從而歸納出每個服務占用系統(tǒng)資源的貢獻值。
[0009]步驟S304、系統(tǒng)服務配置化實現(xiàn)。該步驟是本發(fā)明的關(guān)鍵所在,依據(jù)上面兩步歸納的結(jié)果為指導思想,歸納出可以參與配置化的系統(tǒng)服務、進程,根據(jù)硬件平臺特性定義出服務對應的配置選項。編寫插件化服務運行時解析框架,編寫插件化服務框架。
[0010]步驟S305、系統(tǒng)服務配置文件編寫。該步驟主要是編寫配置文件編譯時解析框架,以提供系統(tǒng)運行時插件框架讀取服務配置。
[0011]步驟S306、系統(tǒng)服務配置化結(jié)束。至此整個系統(tǒng)插件化的靜態(tài)實現(xiàn)基本完成。開發(fā)者可以根據(jù)特定的硬件平臺來定義系統(tǒng)服務的配置文件了。
[0012]步驟S311、系統(tǒng)啟動。該部分描述了系統(tǒng)運行時整個插件化服務框架的工作流程。
[0013]步驟S312、配置文件解析。配置文件的解析主要包括配置文件的加載、配置文件的合法性檢查、配置文件的客制化更新等。
[0014]步驟S313、配置服務依賴性分析。該部分主要根據(jù)S302分析出的系統(tǒng)服務依賴規(guī)則來檢查配置文件的合理性,同時給出兼容性措施。
[0015]步驟S314、啟動插件式服務框架。啟動S304編寫的插件式啟動框架。
[0016]步驟S315、啟動插件式服務。根據(jù)S312和S313分析的配置文件結(jié)果,來啟動對應的插件服務。
[0017]步驟S316、系統(tǒng)啟動完成。系統(tǒng)服務插件框架啟動成功,等待客戶端調(diào)用。
[0018]步驟S321、客戶端服務調(diào)用開始。該步驟描述了系統(tǒng)插件化服務框架下客戶端調(diào)用服務的基本流程。
[0019]步驟S322、本地服務代理。每一個插件化的服務都有一個本地代理服務與之對應,以屏蔽服務插件化的技術(shù)細節(jié)。
[0020]步驟S323、插件式服務檢查。檢查調(diào)用的服務是否已經(jīng)在插件化服務框架中啟動。
[0021]步驟S324、服務依賴檢查。檢查調(diào)用服務所依賴的其它服務是否已經(jīng)正常啟動。
[0022]步驟S325、系統(tǒng)服務調(diào)用權(quán)限檢查。檢查客戶端是否有調(diào)用服務相關(guān)接口的權(quán)限。
[0023]步驟S326、服務調(diào)用失敗。
[0024]步驟S326、服務調(diào)用成功。
[0025]考慮到不同客戶對系統(tǒng)的定制要求以及特定的硬件環(huán)境,在不影響系統(tǒng)基本功能的前提下,將系統(tǒng)的服務抽象成可配置化的框架,方案集成廠商可以根據(jù)其需求定制不同的服務或是添加私有服務,以到達減少系統(tǒng)的開銷、優(yōu)化用戶體驗的目的成為技術(shù)發(fā)展的一個方向。
【發(fā)明內(nèi)容】
[0026]本發(fā)明主要提供了一種通用的將安卓系統(tǒng)服務插件化的實現(xiàn)框架,將安卓本身龐大的服務架構(gòu)抽象成可配置的結(jié)構(gòu)?;诒景l(fā)明提供的方法,在定制不同產(chǎn)品的安卓系統(tǒng)時,可按照不同產(chǎn)品需求通過配置文件快速的增減系統(tǒng)服務,使得運行在不同硬件平臺上的系統(tǒng)均為最精簡的系統(tǒng),且達到提高系統(tǒng)運行速度與啟動速度、減少磁盤和內(nèi)存占用空間、延長電池使用壽命的目的。
[0027]本發(fā)明的具體技術(shù)方案如下:
一種將安卓系統(tǒng)服務插件化的實現(xiàn)方法,其實施流程的具體步驟是:
步驟S501、安卓服務插件化開始;
步驟S502、init.rc中支持進程啟動配置化。在init.rc中增加進程的啟動參數(shù)描述,以支持進程啟動的配置化。具體需要修改init.c中關(guān)于配置文件的解析部分。
[0028]步驟S503、AndroidManifest.xml中支持Activity啟動配置化。安卓中部分啟動服務是通過接收開機消息啟動的,因此需要修改PackageParser中關(guān)于應用程序包的解析邏輯,以支持服務或者組件啟動的配置化。
[0029]步驟S504、SystemServer中支持插件服務加載框架。SystemServer中含有大量的啟動服務,為了支持插件化的服務啟動,需要額外編寫插件化服務加載框架。具體需要修改SystemServer中的main函數(shù),添加插件化服務框架線程,添加服務的加載、卸載、更新、查詢、權(quán)限檢查邏輯。
[0030]步驟S505、pix)duCt目錄下支持服務、進程的配置文件和默認值。此項工作需要在編譯前進行,具體根據(jù)圖4中總結(jié)的可插件化的服務添加宏選項來控制對應的服務是否啟動。
[0031]步驟S506、定義各個服務之間的依賴規(guī)則。系統(tǒng)服務參與插件化的前提是不與依賴服務沖突,所以必須事先定義好服務之間的依賴規(guī)則,避免部分服務因為依賴服務未啟動而發(fā)生錯誤。
[0032]步驟S507、編寫系統(tǒng)運行時配置解析模塊。配置文件是編譯時生成的,該步驟實現(xiàn)了配置文件在運行期的解析和加載,具體需要修改系統(tǒng)的propertyservice服務,利用系統(tǒng)已有的屬性查詢系統(tǒng)來實現(xiàn)配置文件的轉(zhuǎn)化動作。
[0033]步驟S508、系統(tǒng)支持運行期調(diào)試的相關(guān)服務插件化?;谧罱K提供給用戶的系統(tǒng)實際是不需要任何調(diào)試模塊的。系統(tǒng)中典型的調(diào)試服務是在SystemServer中啟動的SamplingProfilerService服務,主要提供性能統(tǒng)計分析用。
[0034]步驟S509、電池相關(guān)模塊插件化。一些安卓衍生類產(chǎn)品上并沒有電池相關(guān)模塊,所以裁剪這一部分會節(jié)省系統(tǒng)不必要的系統(tǒng)開銷。具體的操作涉及到禁用SystemServer中的BatteryService和init.rc文件中啟動的healthd進程。
[0035]步驟S510、Drm相關(guān)模塊插件化。目前國內(nèi)大部分的影像產(chǎn)品是沒有采用采用版權(quán)加密的,所以在特定的應用環(huán)境下這一部分的相關(guān)服務也是可以裁剪的。具體的需要在init.rc中為啟動進程drmserver增加配置選項。
[0036]步驟S511、電話相關(guān)模塊插件化。目前安卓的眾多產(chǎn)品中,除了手機有射頻通訊模塊外,其它的產(chǎn)品如盒子、平板、導航儀等眾多設備基本是不需要電話相關(guān)模塊的,所以裁剪電話模塊對這些產(chǎn)品來說是很有意義的。具體需要裁剪SystemServer中的TelephonyRegistry,禁止 packages/services/ 下的 PhoneApp 啟動,禁止 packages/apps/Mms/下的Mms中關(guān)于B00T_C0MPLETED的啟動邏輯。如此整個電話系統(tǒng)在裁剪后的系統(tǒng)中不會占用任何系統(tǒng)資源。
[0037]步驟S512、藍牙相關(guān)模塊插件化。一些非移動設備上并沒有藍牙模塊,那么針對這些產(chǎn)品上裁剪安卓本身的藍牙相關(guān)支持會減少系統(tǒng)不必要的開銷。具體的操作是在為SystemServer進程中啟動的BluetoothManagerService增加配置選項。
[0038]步驟S513、狀態(tài)欄相關(guān)服務插件化。除了手機、平板等產(chǎn)品需要狀態(tài)欄相關(guān)服務外,其它的一些衍生類產(chǎn)品如盒子、導航儀等都不需要狀態(tài)欄服務,因此有必要增加統(tǒng)一的選項控制這項功能。具體的操作是為SystemServer中startSystemUi函數(shù)和StatusBarManagerService服務增加配置選項,同時禁止SystemU1.apk的開機啟動。
[0039]步驟S514、壁紙相關(guān)服務插件化。具體的操作一個是不啟動SystemServer進程中的WallpaperManagerService服務,另外一個是處理WindowManagerService的開機流程中等待WallPapaer部分的邏輯。
[0040]步驟S515、打印相關(guān)服務插件化。具體的操作是為SystemServer進程中啟動的PrintManagerService 增加配置選項。
[0041]步驟S516、鎖屏相關(guān)服務插件化。具體操作是在PhoneWindowManager中禁止KeyguardServiceDelegate 的啟動。同時禁止 Keyguard.apk 的啟動。
[0042]步驟S517、WAP相關(guān)服務插件化。隨著智能手機和網(wǎng)絡的快速發(fā)展,WAP及WAP瀏覽器似乎會成為歷史。具體操作是為WapPushOverSms接收開機啟動消息增加配置選項。
[0043]步驟S518、服務插件化實現(xiàn)結(jié)束。
優(yōu)點和積極效果
本發(fā)明提供的方法能滿足不同客戶對Android系統(tǒng)的定制化需求,插件化的服務可以方便地利用配置文件進行系統(tǒng)服務的深度定制;在滿足