,添加服務(wù)到系統(tǒng)服務(wù)列表并執(zhí)行第一軟件程序。
[0023]android系統(tǒng)服務(wù)一般由zygote進(jìn)程的子進(jìn)程system_server進(jìn)程啟動(dòng),且是串行啟動(dòng),啟動(dòng)后以線程形式運(yùn)行;android系統(tǒng)用戶空間進(jìn)程都是由init進(jìn)程啟動(dòng),init進(jìn)程會(huì)依據(jù)啟動(dòng)腳本init.rc啟動(dòng)用戶空間的各進(jìn)程;如zygote、servicemanager等;android系統(tǒng)由servicemanager進(jìn)程維護(hù)一個(gè)系統(tǒng)服務(wù)列表,基于該機(jī)制應(yīng)用程序和系統(tǒng)服務(wù)可以添加或獲取系統(tǒng)服務(wù)對(duì)象,進(jìn)一步使用系統(tǒng)服務(wù)的功能。
[0024]因此我們通過創(chuàng)建一個(gè)可以模擬system_server進(jìn)程的環(huán)境的第一軟件程序,也稱為軟件程序S,這個(gè)軟件可以構(gòu)建java對(duì)象并將其添加到系統(tǒng)服務(wù)列表中。在第一軟件程序創(chuàng)建定制服務(wù)對(duì)象和Android原生服務(wù)對(duì)象,添加服務(wù)到系統(tǒng)服務(wù)列表并執(zhí)行第一軟件程序。
[°°25] 步驟S200、將第一軟件程序添加到android_aosp源碼,構(gòu)建為一個(gè)系統(tǒng)jar包,添加到系統(tǒng)啟動(dòng)加載庫(kù)B00T_CLASSPATH中。
[0026]具體實(shí)施時(shí),將軟件程序添加的android aosp源碼,并添加其構(gòu)建部分功能,將其構(gòu)建為一個(gè)系統(tǒng)jar包,并添加到系統(tǒng)啟動(dòng)加載庫(kù)B00T_CLASSPATH中。
[0027]步驟S300、創(chuàng)建第一軟件程序的啟動(dòng)腳本,并在系統(tǒng)啟動(dòng)腳本中添加啟動(dòng)第一軟件程序的腳本內(nèi)容,第一軟件程序在在特定的啟動(dòng)時(shí)機(jī)啟動(dòng)。
[0028]具體實(shí)施時(shí),創(chuàng)建第一軟件程序的啟動(dòng)腳本,并在系統(tǒng)啟動(dòng)腳本中添加啟動(dòng)第一軟件程序的腳本內(nèi)容,第一軟件程序在在特定的啟動(dòng)時(shí)機(jī)啟動(dòng)。待定的啟動(dòng)時(shí)機(jī)可根據(jù)用戶需要進(jìn)行設(shè)定。而第一軟件程序是以32bit運(yùn)行,從而可支持32bit的定制系統(tǒng)服務(wù)。
[0029]步驟S400、Android系統(tǒng)開機(jī)時(shí),第一軟件程序和Android系統(tǒng)自帶的進(jìn)程system_server并行啟動(dòng)運(yùn)行。
[0030]具體實(shí)施時(shí),Android系統(tǒng)開機(jī)時(shí),android系統(tǒng)原生的啟動(dòng)流程不改變,init分別以64bit/32bit啟動(dòng)兩個(gè)zygote進(jìn)程分別為zygote64(64bit孵化器)和zygote(孵化器(默認(rèn)32bit)),若系統(tǒng)默認(rèn)64bit,故zygote64克隆出系統(tǒng)核心服務(wù)進(jìn)程system_server,zyogte進(jìn)程用于兼容32bit應(yīng)用程序運(yùn)行,32bit的第一軟件程序和64bit的system—server并行啟動(dòng)運(yùn)行。
[0031 ]進(jìn)一步的實(shí)施例中,所述步驟S100具體包括:
步驟3101、創(chuàng)建一個(gè)模擬878〖6111_861^61'進(jìn)程環(huán)境的第一軟件程序;
步驟S102、創(chuàng)建第一軟件程序的主循環(huán)體;
步驟S103、在第一軟件程序上的主程序上分別創(chuàng)建Android系統(tǒng)上下文對(duì)象、定制服務(wù)對(duì)象和Android原生服務(wù)對(duì)象;
步驟S104、檢測(cè)servicemanager進(jìn)程,判斷第一軟件程序是否可以添加第一軟件程序服務(wù)到系統(tǒng)服務(wù)列表,若可以添加,則添加第一軟件程序服務(wù)到系統(tǒng)服務(wù)列表;
步驟S105、執(zhí)行第一軟件程序主程序的主循環(huán)。
[0032]具體實(shí)施時(shí),開發(fā)一個(gè)第一軟件程序,其可以模擬systenuserver進(jìn)程的環(huán)境,可以構(gòu)建java對(duì)象并將其添加到系統(tǒng)服務(wù)列表,創(chuàng)建第一軟件程序主程序的主循環(huán)體,創(chuàng)先系統(tǒng)上下文對(duì)象,在第一軟件程序的主程序創(chuàng)建定制服務(wù)對(duì)象,在第一軟件程序的主程序創(chuàng)建Android原生服務(wù)(其依賴關(guān)系簡(jiǎn)單)對(duì)象,檢查等待service manager進(jìn)程是否可以添加服務(wù)到系統(tǒng)服務(wù)列表,添加服務(wù)到系統(tǒng)服務(wù)列表,執(zhí)行第一軟件程序主程序的主循環(huán)。
[0033]進(jìn)一步的實(shí)施例中,所述步驟S300中第一程序在啟動(dòng)時(shí)機(jī)有兩種情況,一種是開機(jī)是由init進(jìn)程啟動(dòng),還有一種是通過判斷Android系統(tǒng)的系統(tǒng)屬性sys.starts的值來進(jìn)行啟動(dòng)。
[0034]若啟動(dòng)時(shí)機(jī)是開機(jī)是由init進(jìn)程啟動(dòng),則步驟S300具體包括:。
[0035]步驟S301、創(chuàng)建第一軟件程序的啟動(dòng)腳本,使啟動(dòng)腳本的進(jìn)程以32bit運(yùn)行;
步驟S302、在Android系統(tǒng)啟動(dòng)腳本中添加啟動(dòng)第一軟件程序的腳本內(nèi)容,第一軟件程序在開機(jī)時(shí)由in it進(jìn)程啟動(dòng)。
[0036]具體實(shí)施時(shí),創(chuàng)建第一軟件程序的啟動(dòng)腳本,第一軟件程序記為軟件程序S,使其進(jìn)程以32bit運(yùn)行,例如:
service S /system/bin/app_process32/system/bin/ com.t.dem0.S在系統(tǒng)啟動(dòng)腳本中添加啟動(dòng)第一軟件程序的腳本內(nèi)容,使第一軟件程序在開機(jī)時(shí)由init進(jìn)程啟動(dòng)。
[0037]而當(dāng)?shù)谝怀绦騿?dòng)時(shí)機(jī)通過判斷Android系統(tǒng)的系統(tǒng)屬性sys.starts的值來進(jìn)行啟動(dòng),那么所述步驟S300具體包括:
步驟S311、創(chuàng)建第一軟件程序的啟動(dòng)腳本,啟動(dòng)腳本的進(jìn)程依賴Andro i d系統(tǒng)的系統(tǒng)屬性sys.starts的值,啟動(dòng)腳本的進(jìn)程以32bit運(yùn)行;
步驟S312、在Andro id系統(tǒng)中添加啟動(dòng)第一軟件程序的腳本內(nèi)容;
步驟S313、在檢測(cè)到Android系統(tǒng)的系統(tǒng)屬性sys.starts的值為I時(shí),啟動(dòng)第一軟件程序。
[0038]具體實(shí)施時(shí),創(chuàng)建第一軟件程序的啟動(dòng)腳本,第一軟件程序記為軟件程序S,使其進(jìn)程依賴系統(tǒng)屬性sys.starts的值,并且以32bit運(yùn)行,例如:
service S /system/bin/app_process32 /system/bin/ com.t.dem0.S
disabled
oneshot
在系統(tǒng)啟動(dòng)腳本中添加啟動(dòng)軟件程序S的腳本內(nèi)容,但是依賴于系統(tǒng)屬性sys.starts=1,例如:
on property:sys.StartS=Istart S
在系統(tǒng)某一啟動(dòng)節(jié)點(diǎn)設(shè)置屬性sys.starts = I,例如system_server開始執(zhí)行時(shí)。而第一軟件程序在sys.starts = I時(shí)開始執(zhí)行。
[0039]進(jìn)一步的實(shí)施例中,其中步驟S400具體包括:
步驟S401、Android系統(tǒng)開機(jī)時(shí),android系統(tǒng)原生的啟動(dòng)流程不改變,init進(jìn)程分別以64bit/32bit啟動(dòng)兩個(gè)zygote進(jìn)程分別為zygote64和zygote;
步驟S402、Android系統(tǒng)默認(rèn)64bit,zygote64模擬系統(tǒng)核心服務(wù)進(jìn)程system_server,zyogte進(jìn)程兼容32bit應(yīng)用程序運(yùn)行;
步驟S403、32bit的第一軟件程序和Android系統(tǒng)自帶的64bit的進(jìn)程system_server并行啟動(dòng)運(yùn)行。
[0040]具體實(shí)施時(shí),android系統(tǒng)原生的啟動(dòng)流程不改變,init分別以64bit/32bit啟動(dòng)兩個(gè)zygote進(jìn)程分別為zygote64和zygote,系統(tǒng)默認(rèn)64bit,故zygote64克隆出系統(tǒng)核心服務(wù)進(jìn)程system_server,zyogte進(jìn)程用于兼容32bit應(yīng)用程序運(yùn)行;32bit的第一軟件程序和64bit的system_server并行啟動(dòng)運(yùn)行,解決了系統(tǒng)服務(wù)64bit/32bit兼容問題,也同時(shí)縮短開機(jī)時(shí)間。
[0041]
由以上方法實(shí)施例可知,本發(fā)明提供了一種基于Android系統(tǒng)的系統(tǒng)服務(wù)啟動(dòng)方法,通過將系統(tǒng)服務(wù)轉(zhuǎn)移到單獨(dú)進(jìn)程運(yùn)行,并解決轉(zhuǎn)移后存在的啟動(dòng)時(shí)機(jī)和同步問題;將定制服務(wù)轉(zhuǎn)移到單獨(dú)的進(jìn)程中運(yùn)行;將android原生服務(wù)中依賴關(guān)系簡(jiǎn)單的服務(wù)轉(zhuǎn)移到單獨(dú)的進(jìn)程中運(yùn)行。本發(fā)明優(yōu)化系統(tǒng)啟動(dòng)速度,縮短開機(jī)時(shí)間;使得系統(tǒng)服務(wù)可以同時(shí)兼容64bit和32bit運(yùn)行單獨(dú)的系統(tǒng)服務(wù)進(jìn)程的啟動(dòng)方法。
[0042]在上述方法實(shí)施例的基礎(chǔ)上,本發(fā)明還提供了一種基于Android系統(tǒng)的系統(tǒng)服務(wù)啟動(dòng)系統(tǒng)的較佳實(shí)施例的功能原理框圖,如圖2所示,所述系統(tǒng)包括:
程序創(chuàng)建模塊100,用于創(chuàng)建一個(gè)模擬system_server進(jìn)程環(huán)境的第一軟件程序,在第一軟件程序創(chuàng)建定制服務(wù)對(duì)象和Android原生服務(wù)對(duì)象,添加服務(wù)到系統(tǒng)服務(wù)列表并執(zhí)行第一軟件程序;具體如上所述。
[0043]程序添加模塊200,用于將第一軟件程序添加到android_aosp源碼,構(gòu)建為一個(gè)系統(tǒng)jar包,添加到系統(tǒng)啟動(dòng)加載庫(kù)B00T_CLASSPATH中;具體如上所述。
[0044]啟動(dòng)腳本創(chuàng)建模塊300,用于創(chuàng)建第一軟件程序的啟動(dòng)腳本,并在系統(tǒng)啟動(dòng)腳本中添加啟動(dòng)第一軟件程序的腳本內(nèi)容,第一軟件程序在在特定的啟動(dòng)時(shí)機(jī)啟動(dòng);具體如上所述。
[0045]并行運(yùn)行模塊400,用于Android系統(tǒng)開機(jī)時(shí),第一軟件程序和Android系統(tǒng)自帶的進(jìn)程system_server并行啟動(dòng)運(yùn)行;具體如上所述。
[0046]所述的基于Androi d系統(tǒng)的系統(tǒng)服務(wù)啟動(dòng)系統(tǒng),其中,所述程序創(chuàng)建模塊具體包括:
軟件程序創(chuàng)建單元,用于創(chuàng)建一個(gè)模擬system_server進(jìn)程環(huán)境的第一軟件程序;具體如上所述。
[0047]主循環(huán)創(chuàng)建單元,用于創(chuàng)建第一軟件程序的主循環(huán)體;具體如上所述。
[0048]服務(wù)對(duì)象創(chuàng)建單元,用于在第一軟件程序上的主程序上分別創(chuàng)建Android系統(tǒng)上下文對(duì)象、定制服務(wù)對(duì)象和Android原生服務(wù)對(duì)象;具體如上所述。
[0049]檢測(cè)與判斷單元,用于檢測(cè)servicemanager進(jìn)程,判斷第一軟件程序是否可以添加第一軟件程序服務(wù)到系統(tǒng)服務(wù)列表,若可以添加,則添加第一軟件程序服務(wù)到系統(tǒng)服務(wù)列表;具體如上所述。