一種基于ARM平臺(tái)的Android啟動(dòng)加速方法
【專利摘要】本發(fā)明提供一種基于ARM平臺(tái)的Android啟動(dòng)加速方法,采用技術(shù),對(duì)Android啟動(dòng)過(guò)程進(jìn)行加速,通過(guò)采用BLCR技術(shù)對(duì)Android啟動(dòng)過(guò)程比較耗時(shí)的Zygote進(jìn)程預(yù)加載類和預(yù)加載資源過(guò)程進(jìn)程斷點(diǎn)設(shè)置,然后在進(jìn)程啟動(dòng)到執(zhí)行斷點(diǎn)時(shí)保存進(jìn)程的當(dāng)前狀態(tài)和信息到一個(gè)鏡像文件中,下次啟動(dòng)的時(shí)候直接從鏡像文件中啟動(dòng)該進(jìn)程,從而跳過(guò)了耗時(shí)的預(yù)加載類和預(yù)加載資源過(guò)程,達(dá)到開(kāi)機(jī)啟動(dòng)加速的目的。通過(guò)本發(fā)明的BLCR技術(shù)實(shí)現(xiàn)的Android加速,可以將Android的啟動(dòng)時(shí)間縮短至少13秒,對(duì)Android的啟動(dòng)速度提高了接近30%~40%,而且這種方式對(duì)Android的后續(xù)性能沒(méi)有影響。
【專利說(shuō)明】-種基于ARM平臺(tái)的Android啟動(dòng)加速方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明屬于計(jì)算機(jī)操作系統(tǒng)【技術(shù)領(lǐng)域】,特別是提供一種針對(duì)ARM平臺(tái)的Android 啟動(dòng)加速的方法。
【背景技術(shù)】
[0002] Android開(kāi)機(jī)啟動(dòng)加速,近年來(lái)越來(lái)越受人們關(guān)注了。主要是由于Android設(shè)備的 大量普及。而且相對(duì)于很少關(guān)機(jī)的手機(jī),其他智能設(shè)備如:平板電腦等越來(lái)越普及,而且這 些設(shè)備相對(duì)于手機(jī)來(lái)說(shuō)是需要經(jīng)常的開(kāi)關(guān)機(jī),所以其啟動(dòng)速度直接影響到用戶體驗(yàn),也是 判斷產(chǎn)品的優(yōu)劣一個(gè)重要標(biāo)準(zhǔn)。
[0003] Android的開(kāi)機(jī)啟動(dòng)優(yōu)化一直以來(lái)都是一個(gè)非常熱門(mén)的研究領(lǐng)域,而且現(xiàn)在業(yè)界 對(duì)Android開(kāi)機(jī)快速啟動(dòng)的需求越來(lái)越緊迫。目前國(guó)內(nèi)外有很多人對(duì)Android的開(kāi)機(jī)啟動(dòng) 過(guò)程進(jìn)行相關(guān)工作的研究。
[0004] 一種是采用電源管理的技術(shù),使用休眠或睡眠的方式對(duì)Android系統(tǒng)進(jìn)行非真正 意義上的關(guān)機(jī),當(dāng)用戶需要使用設(shè)備時(shí)再喚醒設(shè)備。這種"熱啟動(dòng)"的方式還是會(huì)有一定程 度的電源消耗,而且也不是真正意義上的關(guān)機(jī),很難滿足用戶的需求。
[0005] 還有一種方式是將Android啟動(dòng)過(guò)程的Zygote預(yù)加載類和資源進(jìn)行了裁剪,這種 方式對(duì)Android啟動(dòng)后的后續(xù)性能帶來(lái)不良的影響。因?yàn)榇蜷_(kāi)應(yīng)用程序的次數(shù)遠(yuǎn)遠(yuǎn)多于用 戶開(kāi)關(guān)機(jī)的次數(shù)。因?yàn)檫@些預(yù)加載類和資源都是Google工程師精心設(shè)計(jì)的,缺少了這些預(yù) 加載的類和資源,后續(xù)的應(yīng)用啟動(dòng)速度需要重新加載這些類和資源,從而導(dǎo)致應(yīng)用程序啟 動(dòng)速度變慢。
[0006] 還有的是通過(guò)特殊的硬件支持實(shí)現(xiàn)的,類似休眠技術(shù),不過(guò)這種加速方法可以實(shí) 現(xiàn)"冷啟動(dòng)",通過(guò)從FLASH非易失性存儲(chǔ)介質(zhì)中加載啟動(dòng)時(shí)需要的核心數(shù)據(jù),等啟動(dòng)完成 后再后續(xù)加載其他非核心數(shù)據(jù)完成啟動(dòng),雖然啟動(dòng)速度有很大的提升,但是需要特殊硬件 的支持,使用范圍受到了很大的限制。
[0007] 在Android系統(tǒng)中,從目前來(lái)看這些優(yōu)化方法有些存在方法使用范圍具有局限 性,有些方法會(huì)帶來(lái)一些Android啟動(dòng)后的后續(xù)性能問(wèn)題,有些方法需要特殊的硬件支持 等。這些是不能滿足Android啟動(dòng)加速需求的。
【發(fā)明內(nèi)容】
[0008] 本發(fā)明的目的在于克服現(xiàn)有技術(shù)的不足,提供一種基于ARM平臺(tái)的Android啟動(dòng) 加速方法。
[0009] 為了實(shí)現(xiàn)上述發(fā)明目標(biāo),采用的技術(shù)方案如下: 一種基于ARM平臺(tái)的Android啟動(dòng)加速方法,包括如下步驟: (1)修改Linux內(nèi)核編譯選項(xiàng),添加 Enable loadable module support以支持動(dòng)態(tài)模 塊加載。編譯基于ARM平臺(tái)的Linux內(nèi)核鏡像。修改Linux內(nèi)核配置為基于ARM平臺(tái),修改 BLCR(Berkeley Lab Checkpoint/Restart)內(nèi)核模塊文件以支持ARM平臺(tái)。然后交叉BLCR 編譯動(dòng)態(tài)內(nèi)核模塊。
[0010] (2)修改Android的bionic的線程庫(kù)文件,添加 BLCR動(dòng)態(tài)鏈接庫(kù)模塊所需的線程 庫(kù)API函數(shù)接口,修改Android的啟動(dòng)腳本Init. rc,實(shí)現(xiàn)將BLCR的動(dòng)態(tài)內(nèi)核模塊在系統(tǒng)進(jìn) 入用戶空間后添加進(jìn)去的功能,以供后續(xù)BLCR動(dòng)態(tài)鏈接庫(kù)調(diào)用。
[0011] (3)編寫(xiě)了 Android平臺(tái)下調(diào)用BLCR內(nèi)核模塊的動(dòng)態(tài)鏈接庫(kù)編譯的Android, mk 文件,并對(duì)BLCR動(dòng)態(tài)鏈接庫(kù)模塊進(jìn)行了修改以支持Android系統(tǒng)。將BLCR在X86平臺(tái)的 API庫(kù)移植到ARM平臺(tái)。
[0012] (4)編寫(xiě)了 Android平臺(tái)下的JNI接口函數(shù),調(diào)用BLCR底層動(dòng)態(tài)鏈接庫(kù)。編寫(xiě)了 在Zygotelnit. java文件中通過(guò)JNI調(diào)用BLCR模塊,在耗時(shí)的預(yù)加載類及預(yù)加載資源過(guò)程 之后設(shè)置斷點(diǎn),將Zygote進(jìn)程保存到鏡像文件中。下次啟動(dòng)時(shí)通過(guò)恢復(fù)進(jìn)程的鏡像文件, 從斷點(diǎn)處往下執(zhí)行程序,跳過(guò)了耗時(shí)的預(yù)加載類及預(yù)加載資源的過(guò)程,從而提高了 Android 的啟動(dòng)速度。
[0013] (5)編寫(xiě)Android啟動(dòng)的Init. rc調(diào)用的腳本,判斷鏡像文件是否存在,如果存在 則直接從鏡像文件啟動(dòng),如果不存在,則生成通過(guò)調(diào)用BLCR動(dòng)態(tài)內(nèi)核模塊生成Zygote進(jìn)程 的鏡像文件。
[0014] 如步驟(1)所述將BLCR技術(shù)移植到ARM平臺(tái),然后通過(guò)修改BLCR的內(nèi)核模塊源 碼,使其支持ARM平臺(tái),然后通過(guò)交叉編譯鏈將其編譯成基于ARM平臺(tái)的動(dòng)態(tài)加載模塊。
[0015] 步驟(2)中,由于Android為了具有更高的效率、低內(nèi)存占用、非??旌托〉木€程 實(shí)現(xiàn)、內(nèi)置了對(duì)Android特有服務(wù)的支持等特點(diǎn)。使用了優(yōu)化和裁剪的libc庫(kù)bionic, bionic使用的線程庫(kù)由于部分被裁剪了,Android系統(tǒng)的bionic并沒(méi)有實(shí)現(xiàn)所有的P0SIX 線程庫(kù)中的API。所以為了支持BLCR底層函數(shù)API使用了的線程庫(kù),需要添加 BLCR所需的 線程函數(shù)API。
[0016] 所述步驟(3)修改BLCR的動(dòng)態(tài)鏈接庫(kù)文件,使其可以在Android平臺(tái)下供上層 Java應(yīng)用程序通過(guò)JNI進(jìn)行調(diào)用,通過(guò)設(shè)置斷點(diǎn)來(lái)實(shí)現(xiàn)進(jìn)程鏡像文件的生成。需要編寫(xiě)相 應(yīng)平臺(tái)的Android, mk文件生成ARM平臺(tái)的動(dòng)態(tài)鏈接庫(kù)。
[0017] 步驟(4)通過(guò)對(duì)Zygotelnit. java文件的修改,對(duì)Android啟動(dòng)過(guò)程中比較耗時(shí) 的預(yù)加載類與預(yù)加載資源過(guò)程采用BLCR技術(shù)進(jìn)行優(yōu)化,優(yōu)化的方式是采用BLCR的斷點(diǎn)重 啟技術(shù),在斷點(diǎn)處將Zygote進(jìn)程保存到鏡像文件中,下次啟動(dòng)的時(shí)候直接從鏡像文件中啟 動(dòng),從而加快Android的啟動(dòng)速度。
[0018] 所述步驟(5)通過(guò)修改Android的啟動(dòng)腳本Init. rc添加判斷是否生成了 Zygote 進(jìn)程的鏡像文件的執(zhí)行腳本,如果存在,則從該鏡像文件啟動(dòng)Zygote進(jìn)程,如果不存在則 通過(guò)執(zhí)行正常的啟動(dòng)流程生成Zygote進(jìn)程的鏡像文件。
[0019] 步驟(5)實(shí)現(xiàn)Android系統(tǒng)的"冷啟動(dòng)",相比基于電源管理的休眠方式"熱啟動(dòng)" 技術(shù),可以更加有效的節(jié)約電能。而且,采用BLCR技術(shù)彌補(bǔ)了預(yù)加載類和預(yù)加載資源的裁 剪或定制影響Android系統(tǒng)后續(xù)性能的問(wèn)題。
[0020] 與現(xiàn)有技術(shù)相比,本發(fā)明具有如下優(yōu)點(diǎn)和技術(shù)效果: a、支持所有ARM平臺(tái)的Android系統(tǒng) 通過(guò)移植BLCR技術(shù),對(duì)Android系統(tǒng)的Zygote進(jìn)程的耗時(shí)的預(yù)加載類及預(yù)加載資 源進(jìn)行優(yōu)化,從而達(dá)到加快Android啟動(dòng)的目的,這種方式適用于所有的基于ARM平臺(tái)的 Android 系統(tǒng)。
[0021] b、采用"冷啟動(dòng)"方式實(shí)現(xiàn)的加速 本發(fā)明適用的加速方式是基于"冷啟動(dòng)的",相比其他基于電源管理技術(shù)的"熱啟動(dòng)"方 式,可以讓用戶真正意義上的關(guān)機(jī),這樣可以更好的節(jié)約能源。同時(shí)也滿足了用戶對(duì)快速啟 動(dòng)Android系統(tǒng)的需求。
[0022] c、采用BLCR斷點(diǎn)重啟技術(shù)實(shí)現(xiàn)的加速 采用BLCR技術(shù)實(shí)現(xiàn)的加速方法,彌補(bǔ)了傳統(tǒng)優(yōu)化方法(對(duì)Android系統(tǒng)預(yù)加載類及預(yù) 加載資源進(jìn)行定制和裁剪)對(duì)Android的后續(xù)性能產(chǎn)生不良影響的缺陷。本發(fā)明采用的方 法對(duì)Android啟動(dòng)后的后續(xù)性能沒(méi)有影響。
[0023] d、Android啟動(dòng)加速的高效性和可靠性 本發(fā)明的BLCR技術(shù)對(duì)Android的啟動(dòng)加速,可以將Android的啟動(dòng)時(shí)間縮短至少13 秒,對(duì)Android的啟動(dòng)速度提高了接近309Γ40%。而且該項(xiàng)技術(shù)對(duì)Android啟動(dòng)后的后續(xù)性 能沒(méi)有影響,是一項(xiàng)高效而且可靠的加速方法。
[0024] 本發(fā)明通過(guò)BLCR技術(shù)對(duì)基于ARM平臺(tái)的Android的啟動(dòng)過(guò)程進(jìn)行加速,通過(guò)移植 BLCR技術(shù)模塊到ARM平臺(tái),并通過(guò)bootchart工具對(duì)Android的啟動(dòng)瓶頸進(jìn)行度量,然后采 用BLCR技術(shù)對(duì)Android的啟動(dòng)過(guò)程的瓶頸進(jìn)行優(yōu)化,其中通過(guò)添加 Android的bionic庫(kù) 的線程庫(kù)API來(lái)支持BLCR技術(shù)的動(dòng)態(tài)鏈接庫(kù)模塊的底層內(nèi)核調(diào)用。然后在Zygote進(jìn)程預(yù) 加載類及預(yù)加載資源完成之后對(duì)Zygote進(jìn)程進(jìn)行斷點(diǎn)設(shè)置,保存Zygote進(jìn)程到一個(gè)鏡像 文件中,下次啟動(dòng)的時(shí)候,直接從鏡像文件中啟動(dòng)Zygote進(jìn)程,從而達(dá)到加速Android啟動(dòng) 過(guò)程的目的。這種方式對(duì)Android啟動(dòng)后的后續(xù)性能沒(méi)有影響,彌補(bǔ)了傳統(tǒng)加速方法(裁剪 模塊或定制Android服務(wù)的方式)對(duì)后續(xù)性能產(chǎn)生影響的缺陷。而且適用于所有基于ARM 平臺(tái)的Android系統(tǒng),采用"冷啟動(dòng)"的方式,節(jié)約了設(shè)備的能源,也滿足了 Android用戶對(duì) 真正意義上的關(guān)機(jī)服務(wù)的需求。
【專利附圖】
【附圖說(shuō)明】
[0025] 圖1為Android啟動(dòng)加速總體架構(gòu)邏輯示意圖; 圖2為BLCR設(shè)置斷點(diǎn)保存Zygote進(jìn)程流程示意圖; 圖3為BLCR設(shè)置斷點(diǎn)恢復(fù)Zygote進(jìn)程流程示意圖; 圖4為Android加速后的啟動(dòng)流程示意圖。
【具體實(shí)施方式】
[0026] 下面結(jié)合附圖,對(duì)本發(fā)明的具體實(shí)施做進(jìn)一步的詳細(xì)描述,但本發(fā)明的實(shí)施和保 護(hù)不限于此。
[0027] 圖1展示了 Android啟動(dòng)加速的總體架構(gòu),該圖主要包括: 1.實(shí)現(xiàn)Android啟動(dòng)加速對(duì)BLCR動(dòng)態(tài)可加載內(nèi)核模塊改動(dòng)。
[0028] 2.對(duì)BLCR基于Android平臺(tái)的動(dòng)態(tài)鏈接庫(kù)的改動(dòng)。
[0029] 3.支持BLCR技術(shù)的bionic線程庫(kù)函數(shù)接口的添加。
[0030] 4. Android啟動(dòng)執(zhí)行流程的改動(dòng)。
[0031] 具體如下: 圖中,BLCR技術(shù)可動(dòng)態(tài)加載內(nèi)核模塊,主要將BLCR技術(shù)的動(dòng)態(tài)加載內(nèi)核模塊移植到基 于ARM平臺(tái)下,BLCR動(dòng)態(tài)加載模塊,是BLCR內(nèi)核級(jí)單機(jī)檢查點(diǎn)技術(shù)的核心,主要通過(guò)進(jìn)入 內(nèi)核態(tài)完成對(duì)Zygote進(jìn)程上下文信息、進(jìn)程地址空間信息的保存。
[0032] BLCR用戶態(tài)的底層調(diào)用接口,主要對(duì)為支持Android平臺(tái)進(jìn)行相關(guān)的修改,BLCR 的動(dòng)態(tài)鏈接庫(kù)是鏈接Android啟動(dòng)加速框架層與Android內(nèi)核層的橋梁,動(dòng)態(tài)鏈接庫(kù)通過(guò) 調(diào)用內(nèi)核層的BLCR動(dòng)態(tài)內(nèi)核模塊實(shí)現(xiàn)進(jìn)程的動(dòng)態(tài)保存。
[0033] 支持BLCR斷點(diǎn)重啟技術(shù),對(duì)Zygote進(jìn)程執(zhí)行過(guò)程進(jìn)行了相應(yīng)的改動(dòng),主要是在比 較耗時(shí)的預(yù)加載類與預(yù)加載資源完成之后設(shè)置斷點(diǎn),在斷點(diǎn)處保存進(jìn)程的上下文信息、地 址空間信息、相關(guān)進(jìn)程的寄存器信息。
[0034] 支持BLCR斷點(diǎn)重啟技術(shù),對(duì)Init進(jìn)程的執(zhí)行流程進(jìn)行的修改,主要有動(dòng)態(tài)加載 BLCR技術(shù)的內(nèi)核模塊,根據(jù)鏡像文件是否存在來(lái)決定是從鏡像文件啟動(dòng)Zygote進(jìn)程,從鏡 像文件啟動(dòng)Zygote進(jìn)程可以跳過(guò)耗時(shí)的預(yù)加載類與預(yù)加載資源的過(guò)程,從而達(dá)到Android 啟動(dòng)加速的目的。
[0035] 附圖2展示了使用BLCR技術(shù)對(duì)Android進(jìn)行加速時(shí),對(duì)Zygote進(jìn)程設(shè)置斷點(diǎn),將 Zygote進(jìn)程保存到鏡像文件中的過(guò)程,進(jìn)程的鏡像文件是下次啟動(dòng)時(shí)直接從文件恢復(fù)進(jìn)程 后從斷點(diǎn)處往下執(zhí)行的基礎(chǔ)。其具體執(zhí)行過(guò)程如下: 步驟21、將Zygote進(jìn)程進(jìn)行阻塞,開(kāi)始執(zhí)行進(jìn)程狀態(tài)信息的保存; 步驟22、保存Zygote進(jìn)程地址空間信息,主要包括進(jìn)程的數(shù)據(jù)段、堆棧段信息,進(jìn)程的 代碼段不需要保存,可以通過(guò)保存進(jìn)程的可執(zhí)行二進(jìn)制文件路徑; 步驟23、保存Zygote進(jìn)程進(jìn)行上下文切換的CPU信息,主要包括PC程序計(jì)數(shù)器、PSW 寄存器的內(nèi)容等等; 步驟24、保存Zygote進(jìn)程的打開(kāi)文件描述符,以便下次從鏡像文件中啟動(dòng)后可以恢復(fù) 到保存時(shí)的狀態(tài)。
[0036] 步驟25、保存Zygote進(jìn)程的信號(hào)狀態(tài)和信號(hào)處理函數(shù),以便下次進(jìn)程可以正常捕 獲信號(hào)并進(jìn)行相應(yīng)的處理。
[0037] 步驟26、完成將進(jìn)程保存到鏡像文件后,啟動(dòng)Zygote進(jìn)程讓其繼續(xù)往下執(zhí)行,啟 動(dòng)Android系統(tǒng)。
[0038] 附圖3展示了使用BLCR技術(shù)對(duì)Android進(jìn)行加速時(shí),從Zygote進(jìn)程鏡像文件中 恢復(fù)Zygote進(jìn)程后,從保存的斷點(diǎn)處開(kāi)始繼續(xù)往下執(zhí)行的過(guò)程,這也是Android啟動(dòng)加速 的關(guān)鍵,跳過(guò)了耗時(shí)的Zygote預(yù)加載類和預(yù)加載資源的過(guò)程。具體如下: 步驟31、阻塞Zygote進(jìn)程的運(yùn)行,直接從鏡像文件中加載Zygote進(jìn)程,進(jìn)程的代碼段 通過(guò)保存的進(jìn)程可執(zhí)行文件路徑進(jìn)行恢復(fù); 步驟32、將鏡像文件中通過(guò)斷點(diǎn)保存的Zygote進(jìn)程地址空間信息進(jìn)行恢復(fù),主要包括 進(jìn)程的數(shù)據(jù)段和堆棧段; 步驟33、將鏡像文件中保存的Zygote進(jìn)程的上下文切換信息進(jìn)程恢復(fù),主要有PC程序 計(jì)數(shù)器、PSW狀態(tài)寄存器; 步驟34、根據(jù)鏡像文件恢復(fù)Zygote進(jìn)程的打開(kāi)文件描述符; 步驟35、根據(jù)鏡像文件恢復(fù)Zygote進(jìn)程的信號(hào)狀態(tài)和信號(hào)處理函數(shù); 步驟36、啟動(dòng)Zygote進(jìn)程,然后從斷點(diǎn)處繼續(xù)往下執(zhí)行,這樣便可以跳過(guò)耗時(shí)的預(yù)加 載類與預(yù)加載資源的過(guò)程,實(shí)現(xiàn)Android的啟動(dòng)加速; 附圖4展示了采用BLCR技術(shù)對(duì)Android啟動(dòng)加速的完整啟動(dòng)過(guò)程,下面將詳細(xì)描述 Android系統(tǒng)啟動(dòng)時(shí)使用該發(fā)明方法的啟動(dòng)過(guò)程,具體如下: 步驟41、Android啟動(dòng)開(kāi)機(jī),包括了 bootloader、Android底層linux內(nèi)核的啟動(dòng)。
[0039] 步驟42、Kernel啟動(dòng)完成之后,開(kāi)始啟動(dòng)Init進(jìn)程,Init進(jìn)程通過(guò)讀取Init. rc 完成進(jìn)入Android系統(tǒng)用戶空間的初始化工作,包括文件系統(tǒng)的創(chuàng)建、Android系統(tǒng)服務(wù)的 創(chuàng)建等等。
[0040] 步驟43、如果步驟42成功完成,接下來(lái)就是通過(guò)insmod的方式執(zhí)行BLCR動(dòng)態(tài)內(nèi) 核模塊的加載,為后續(xù)BLCR技術(shù)加速Android啟動(dòng)建立基礎(chǔ)。
[0041] 步驟44、判斷是否存在Zygote進(jìn)程的鏡像文件來(lái)決定是否啟動(dòng)執(zhí)行流程,如果存 在則從鏡像文件中創(chuàng)建Zygote進(jìn)程,從斷點(diǎn)處開(kāi)始往下執(zhí)行,如果不存在,則執(zhí)行正常的 Android啟動(dòng)流程。
[0042] 步驟45、如果Zygote進(jìn)程鏡像文件存在,從鏡像文件中啟動(dòng)Android系統(tǒng),跳過(guò)耗 時(shí)的預(yù)加載類和預(yù)加載資源的過(guò)程,從BLCR在Zygote進(jìn)程中設(shè)置的斷點(diǎn)處繼續(xù)往下執(zhí)行, 完成Android的啟動(dòng)流程。
[0043] 步驟46、如果鏡像文件不存在,則執(zhí)行Android的正常啟動(dòng)流程,執(zhí)行到Zygote進(jìn) 程的BLCR斷點(diǎn)處時(shí),將此時(shí)的Zygote進(jìn)程保存到鏡像文件中,主要包括進(jìn)程的地址空間信 息和進(jìn)程的上下文信息等等。
[0044] 步驟47、通過(guò)SystemServer進(jìn)程完成Android系統(tǒng)除在Init進(jìn)程啟動(dòng)的所有其 他服務(wù)的啟動(dòng)。
[0045] 步驟48、Android啟動(dòng)完成,進(jìn)入系統(tǒng)主界面。
[0046] 本發(fā)明對(duì)Android啟動(dòng)速度進(jìn)行深入的研究,采用BLCR (Berkeley Lab Checkpoint/Restart)技術(shù),對(duì)Android啟動(dòng)過(guò)程進(jìn)行加速,通過(guò)采用BLCR技術(shù)對(duì)Android 啟動(dòng)過(guò)程比較耗時(shí)的Zygote進(jìn)程預(yù)加載類和預(yù)加載資源過(guò)程進(jìn)程斷點(diǎn)設(shè)置,然后在進(jìn)程 啟動(dòng)到執(zhí)行斷點(diǎn)時(shí)保存進(jìn)程的當(dāng)前狀態(tài)和信息到一個(gè)鏡像文件中,下次啟動(dòng)的時(shí)候直接從 鏡像文件中啟動(dòng)該進(jìn)程,從而跳過(guò)了耗時(shí)的預(yù)加載類和預(yù)加載資源過(guò)程,達(dá)到開(kāi)機(jī)啟動(dòng)加 速的目的。通過(guò)本發(fā)明的BLCR技術(shù)實(shí)現(xiàn)的Android加速,可以將Android的啟動(dòng)時(shí)間縮短 至少13秒,對(duì)Android的啟動(dòng)速度提高了接近30%?40%,而且這種方式對(duì)Android的后續(xù)性 能沒(méi)有影響,是一種高效而且可靠的加速方法,滿足了對(duì)Android系統(tǒng)開(kāi)機(jī)快速啟動(dòng)的需 求。
【權(quán)利要求】
1. 一種基于ARM平臺(tái)的Android啟動(dòng)加速方法,其特征在于包括如下步驟: (1) 修改Linux內(nèi)核編譯選項(xiàng),添加 Enable loadable module support以支持動(dòng)態(tài)模 塊加載;編譯基于ARM平臺(tái)的Linux內(nèi)核鏡像;修改Linux內(nèi)核配置為基于ARM平臺(tái),修改 Berkeley Lab Checkpoint/Restart即BLCR內(nèi)核模塊文件以支持ARM平臺(tái);然后BLCR編 譯動(dòng)態(tài)內(nèi)核模塊; (2) 修改Android的bionic的線程庫(kù)文件,添加 BLCR動(dòng)態(tài)鏈接庫(kù)模塊所需的線程庫(kù) API函數(shù)接口,修改Android的啟動(dòng)腳本Init. rc,實(shí)現(xiàn)將BLCR的動(dòng)態(tài)內(nèi)核模塊在系統(tǒng)進(jìn)入 用戶空間后添加進(jìn)去的功能,以供后續(xù)BLCR動(dòng)態(tài)鏈接庫(kù)調(diào)用; (3) 編寫(xiě)Android平臺(tái)下調(diào)用BLCR內(nèi)核模塊的動(dòng)態(tài)鏈接庫(kù)編譯的Android, mk文件,并 對(duì)BLCR動(dòng)態(tài)鏈接庫(kù)模塊進(jìn)行修改以支持Android系統(tǒng);將BLCR在X86平臺(tái)的API庫(kù)移植 到ARM平臺(tái); (4) 通過(guò)使用BLCR技術(shù)實(shí)現(xiàn)Android系統(tǒng)的Zygote進(jìn)程的鏡像備份和從鏡像文件中 直接啟動(dòng)的方法,從而跳過(guò)了耗時(shí)的Zygote進(jìn)程預(yù)加載類與預(yù)加載資源的過(guò)程; (5) 編寫(xiě)Android啟動(dòng)的Init. rc調(diào)用的腳本,判斷鏡像文件是否存在,如果存在則直 接從鏡像文件啟動(dòng),如果不存在,則生成通過(guò)調(diào)用BLCR動(dòng)態(tài)內(nèi)核模塊生成Zygote進(jìn)程的鏡 像文件。
2. 根據(jù)權(quán)利要求1所述的基于ARM平臺(tái)的Android啟動(dòng)加速方法,其特征在于步驟(1) 然后通過(guò)修改BLCR的內(nèi)核模塊源碼,使其支持ARM平臺(tái),然后通過(guò)交叉編譯鏈將其編譯成 基于ARM平臺(tái)的動(dòng)態(tài)加載模塊。
3. 根據(jù)權(quán)利要求1或2所述的基于ARM平臺(tái)的Android啟動(dòng)加速方法,其特征在于在 步驟(2)中,添加了 Android平臺(tái)下BLCR動(dòng)態(tài)鏈接庫(kù)所需線程庫(kù)API函數(shù)接口以及修改了 Android啟動(dòng)過(guò)程的Init. rc腳本,動(dòng)態(tài)添加了 BLCR技術(shù)內(nèi)核模塊。
4. 根據(jù)權(quán)利要求3所述的基于ARM平臺(tái)的Android啟動(dòng)加速方法,其特征在于所述步 驟(3)通過(guò)修改BLCR支持Android系統(tǒng)的動(dòng)態(tài)庫(kù)源碼以支持ARM平臺(tái)的所有Android系 統(tǒng)。
5. 根據(jù)權(quán)利要求4所述的基于ARM平臺(tái)的Android啟動(dòng)加速方法,其特征在于步驟 (4)通過(guò)編寫(xiě)Android平臺(tái)下的JNI接口函數(shù),調(diào)用BLCR底層動(dòng)態(tài)鏈接庫(kù);在Zygotelnit. java文件中通過(guò)JNI調(diào)用BLCR模塊,在耗時(shí)的預(yù)加載類及預(yù)加載資源過(guò)程之后設(shè)置斷點(diǎn), 將Zygote進(jìn)程保存到鏡像文件中;下次啟動(dòng)時(shí)通過(guò)恢復(fù)進(jìn)程的鏡像文件,從斷點(diǎn)處往下執(zhí) 行程序,跳過(guò)耗時(shí)的預(yù)加載類及預(yù)加載資源的過(guò)程。
【文檔編號(hào)】G06F9/445GK104102506SQ201410170411
【公開(kāi)日】2014年10月15日 申請(qǐng)日期:2014年4月25日 優(yōu)先權(quán)日:2014年4月25日
【發(fā)明者】劉發(fā)貴, 繆漢威 申請(qǐng)人:華南理工大學(xué)