一種應用啟動方法及裝置的制造方法
【專利摘要】本發明實施例提供一種應用啟動方法及裝置,其中的應用啟動方法可包括:獲取第一壓縮文件,所述第一壓縮文件包含目標應用的啟動信息以及所述目標應用的代碼包dex壓縮內容;從所述第一壓縮文件中提取所述dex壓縮內容;將所述dex壓縮內容生成第二壓縮文件;加載所述第二壓縮文件中的所述dex壓縮內容,并根據所述第一壓縮文件中的所述啟動信息啟動所述目標應用。采用本發明實施例可節省解壓和再壓縮時間,減少目標應用啟動時間,提高用戶體驗。
【專利說明】
_種應用啟動方法及裝置
技術領域
[0001]本發明涉及通信技術領域,具體涉及一種應用啟動方法及裝置。【背景技術】
[0002]Android系統限制每個dex(代碼包)只能包含最多65535個方法數,在開發期間,編譯工具就按照這一限制,將程序代碼編譯為若干個方法數不超過65535的dex包。在安裝應用后首次啟動該應用時,將順序加載所有dex。
[0003]現有技術在首次啟動該應用時,具體加載dex的方法按照圖1所示流程:用戶點擊圖標,應用進行dex裝載,從安卓系統安裝包(Android Package,APK)文件中找到dex壓縮內容,然后將該dex壓縮內容解壓到臨時目錄,再重新壓縮為zip文件,以zip形式加載所有dex 方法,進入應用主界面。
[0004]從上述可知,在首次啟動安裝的應用時,需要占用較多時間來執行解壓以及重新壓縮的操作,dex數量越多,耗時越長,設備越低端,耗時越長。此操作發生在啟動界面和主界面顯示之前,用戶可明顯感知到點擊應用圖標到看到界面變化之間有長時間等待,用戶體驗差。
【發明內容】
[0005]本發明實施例提供一種應用啟動方法及裝置,可節省解壓和再壓縮時間,減少目標應用啟動時間,提尚用戶體驗。
[0006]本發明第一方面提供一種應用啟動方法,包括:
[0007]獲取第一壓縮文件,所述第一壓縮文件包含目標應用的啟動信息以及所述目標應用的代碼包dex壓縮內容;
[0008]從所述第一壓縮文件中提取所述dex壓縮內容;
[0009]將所述dex壓縮內容生成第二壓縮文件;
[0010]加載所述第二壓縮文件中的所述dex壓縮內容,并根據所述第一壓縮文件中的所述啟動信息啟動所述目標應用。
[0011]本發明第二方面提供一種應用啟動裝置,包括:
[0012]獲取模塊,用于獲取第一壓縮文件,所述第一壓縮文件包含目標應用的啟動信息以及所述目標應用的代碼包dex壓縮內容;
[0013]提取模塊,用于從所述第一壓縮文件中提取所述dex壓縮內容;[〇〇14]生成模塊,用于將所述dex壓縮內容生成第二壓縮文件;
[0015]啟動模塊,用于加載所述第二壓縮文件中的所述dex壓縮內容,并根據所述第一壓縮文件中的所述啟動信息啟動所述目標應用。
[0016]實施本發明實施例,具有如下有益效果:
[0017]本發明實施例,獲取第一壓縮文件,該第一壓縮文件包含目標應用的啟動信息以及目標應用的dex壓縮內容,從該第一壓縮文件中提取該dex壓縮內容,將該dex壓縮內容生成第二壓縮文件,加載第二壓縮文件中的dex壓縮內容,并根據第一壓縮文件中的啟動信息啟動目標應用。這種方式可節省解壓和再壓縮dex包的時間,減少目標應用啟動時間,提高用戶體驗。【附圖說明】
[0018]為了更清楚地說明本發明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明的一些實施例,對于本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。
[0019]圖1為本發明實施例提供的現有技術中應用啟動流程圖;
[0020]圖2為本發明實施例提供的一種應用啟動方法的流程圖;
[0021]圖3為本發明實施例提供的另一種應用啟動方法的流程圖;[〇〇22]圖4為本發明實施例提供的一種優化dex解壓速度的流程圖;[〇〇23]圖5為本發明實施例提供的一種后臺加載的流程圖;
[0024]圖6為本發明實施例提供的一種產品界面示意圖;
[0025]圖7為本發明實施例提供的一種優化比較示意圖;
[0026]圖8為本發明實施例提供的一種應用啟動框圖;
[0027]圖9為本發明實施例提供的一種應用啟動裝置的結構示意圖;
[0028]圖10為本發明實施例提供的一種生成模塊的結構示意圖;
[0029]圖11為本發明實施例提供的一種啟動模塊的結構示意圖。【具體實施方式】
[0030]下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發明一部分實施例,而不是全部的實施例。基于本發明中的實施例,本領域普通技術人員在沒有作出創造性勞動前提下所獲得的所有其他實施例,都屬于本發明保護的范圍。
[0031]本發明實施例中,所述目標應用為安裝在終端上的任何應用,包括但不限于瀏覽器、電子郵件、即時消息服務、文字處理、鍵盤虛擬、窗口小部件(Widget)、加密、數字版權管理、語音識別、語音復制、定位導航(例如由全球定位系統提供的功能)、音樂播放、視頻播放等等。
[0032]下面將結合附圖2-附圖8,對本發明實施例提供的應用啟動方法進行詳細介紹。
[0033]請參照圖2,為本發明實施例提供的一種應用啟動方法的流程圖;該方法可包括以下步驟S200-步驟S203。[〇〇34] S200,獲取第一壓縮文件,所述第一壓縮文件包含目標應用的啟動信息以及所述目標應用的代碼包dex壓縮內容;
[0035]本發明實施例中,當把目標應用安裝完成后,首次啟動該目標應用時,要對dex進行dexopt操作,將dex從APK文件中提取出來進行加載。具體可選的,獲取第一壓縮文件,該第一壓縮文件可以為APK文件,APK文件中包含目標應用的代碼包dex壓縮內容,啟動該目標應用時,均需要加載dex,通常加載dex是以zip形式進行加載。
[0036]進一步可選的,該第一壓縮文件中還包含目標應用的啟動信息,目標應用的啟動信息包括但不限于啟動該目標應用的數據以及啟動該目標應用的入口程序代碼。[〇〇37]S201,從所述第一壓縮文件中提取所述dex壓縮內容;
[0038]本發明實施例中,從第一壓縮文件中提取出dex壓縮內容,具體的提取過程可以是根據dex壓縮內容的文件名進行查找,可選的,dex壓縮內容在APK文件中文件名為 classes2.dex的entry中,通過遍歷所有entry找到該dex壓縮內容,如下所示:[〇〇39](1)先在APK文件中查找目錄結束標示結構(標識符是:0x06054b50),然后從該位置往下偏移16個字節處,找到核心目錄第一個entry的偏移處(標識符是:0x02014b50)。 [0〇4〇](2)然后用for循環開始記錄各個entry的信息(可以記錄下每個entry在APK文件中的偏移,這樣便于在寫信息(即是生成第二壓縮文件)的時候定位到該entry的開始處), 從entry頭往下偏移42字節處,去找該entry的文件頭信息,文件頭信息包括文件頭+文件源數據(壓縮后的數據)+ (hasDD,不一定有)。在APK文件中,dex壓縮內容在文件名為 classes2.dex中的entry中。找到dex壓縮內容之后,S卩可以開始手動zip壓縮文件的寫入過程。[〇〇411S202,將所述dex壓縮內容生成第二壓縮文件;[〇〇42]本發明實施例中,根據所提取的dex壓縮內容,生成第二壓縮文件,第二壓縮文件的壓縮格式可以是zip格式,在這里就不需要將dex壓縮內容先進行解壓到臨時目錄,再重新壓縮,節省了目標應用啟動的時間。
[0043]可選的,將dex壓縮內容生成第二壓縮文件可以包括以下兩個步驟:
[0044]步驟一、根據所述第一壓縮文件中所述dex壓縮內容的文件頭信息,生成第二壓縮文件的頭信息,所述第二壓縮文件的頭信息包含所述dex壓縮內容;
[0045]步驟二、根據所述第一壓縮文件中所述dex壓縮內容的核心目錄信息,生成所述第二壓縮文件的核心目錄信息。
[0046]本發明實施例中,第二壓縮文件包括頭信息、核心目錄信息以及目錄結束標示結構信息等,在生成第二壓縮文件時,根據第一壓縮文件中該dex壓縮內容對應的文件頭信息,生成第二壓縮文件的頭信息,該第二壓縮文件的頭信息也包括文件頭+文件源數據(壓縮后的dex數據) + (hasDD,不一定有)。[〇〇47]進一步,生成第二壓縮文件中核心目錄信息時,也是根據第一壓縮文件中該dex壓縮內容的核心目錄信息生成,具體的第二壓縮文件生成過程如下,這里繼續以步驟S201中 (1)和(2)進行說明:[〇〇48](3)先寫第二壓縮文件的文件頭信息,需要改文件名字為classes.dex,重算文件名長度,其他信息可以把APK文件classes2.dex的entry中的文件頭信息拷貝過來。[〇〇49](4)再寫第二壓縮文件的entry核心目錄信息[〇〇5〇]因為只有一個entry,將里面的文件名,文件名長度,文件頭位移做相應修改,其他信息從原來APK文件classes2.dex的entry中的信息拷貝過來即可。在上述(2)中,讀APK文件的時候記錄了 entry在APK文件中的偏移位置,在找尋cl asses 2.dex的過程中,可以用 buffer流,因為entry中每個字段的信息字節數都是確定的,所以可以用一個變量來定位和記錄各個位置的偏移情況。
[0051](5)寫第二壓縮文件的目錄結束標示結構信息。
[0052]S203,加載所述第二壓縮文件中的所述dex壓縮內容,并根據所述第一壓縮文件中的所述啟動信息啟動所述目標應用。[〇〇53]本發明實施例中,當根據dex壓縮內容生成第二壓縮文件之后,即可加載第二壓縮文件中的dex壓縮內容,并根據第一壓縮文件中的啟動信息啟動目標應用,需要說明的是, 第一壓縮文件中的啟動信息可以是處于解壓狀態,例如可以是在目標應用安裝過程中,進行編譯時即進行了解壓。[〇〇54] 上述步驟S200-S203主要闡述了優化dex解壓速度,可以等效于圖4的流程圖,首次安裝目標應用啟動時要對dex進行dexopt操作,需要將dex從APK文件中提取出來,本方案直接讀取APK文件,從APK文件中找到壓縮狀態的dex壓縮內容,復制對應內容,加上zip文件頭,直接輸出為新zip文件,并以zip形式加載dex的所有方法,最后進入應用程序 (Applicati〇n,APP)主界面。相比現有方案節省了一次解壓和一次壓縮操作,若使用雙核 1GHz的手機對目標應用進行啟動,則可以將這部分文件操作時間從秒級降到毫秒級。[〇〇55]可選的,所述dex壓縮內容為所述第一壓縮文件中的分dex程序包,所述分dex程序包包含非啟動入口程序,所述啟動信息包括所述第一壓縮文件中的主dex程序包,所述主 dex程序包包含至少一個解壓狀態的啟動入口程序;
[0056]所述加載所述第二壓縮文件中的所述dex壓縮內容,并根據所述第一壓縮文件中的所述啟動信息啟動所述目標應用,包括以下步驟S20?S22:[〇〇57]S20,啟動所述主dex程序包,并顯示啟動界面;[〇〇58]S21,加載所述第二壓縮文件中的所述dex壓縮內容;[〇〇59]S22,當檢測到加載完所述dex壓縮內容,執行所述主dex程序包中的所述至少一個啟動入口程序,并顯示所述目標應用的主界面。
[0060]本發明實施例中,當首次安裝啟動目標應用時,用戶點擊應用圖標啟動目標應用, 舊版本會先加載dex,再調用該目標應用的啟動入口程序啟動目標應用從而出現閃屏,這樣啟動目標應用,在加載dex過程中用戶看不到閃屏,呈卡死狀態,體驗較差。
[0061]本發明實施例對上述啟動過程進行改進,實現先出現閃屏,再加載dex。而要實現上述啟動過程就需要保證所有可能的啟動入口程序的所有直接依賴集和間接依賴集在安裝編譯時都分在主dex程序包里,這樣啟動主dex程序包時可以調動顯示啟動界面,即出現閃屏,如圖6所示,當用戶點擊應用圖標時,即出現第二個啟動界面,在啟動界面顯示過程中異步加載dex。[〇〇62]需要說明的是,主dex程序包中的依賴集很大,系統的自動分包方案不能保證所有啟動入口程序的依賴集都在主dex程序包中。因此開發人員分析出啟動入口程序的所有直接依賴集和間接依賴集,然后確保依賴集都在主dex程序包里面,這樣啟動入口就能夠保證啟動成功。開發人員首先對分dex程序包的腳本做修改,加入預設分類規則,當在目標應用安裝編譯過程中,即根據該預設分類規則將所有程序分在主dex程序包和分dex程序包。 [〇〇63]在主dex程序包中需要確保keep最小依賴集,保證主dex程序包能夠有我們所有的依賴類集合,主要包含如下幾個部分:service、content provider、broadcast、 MusicApplicat1n、LifeCycleManager、BaseActivity、OuterShellBaseActivity、 DexActivity〇
[0064]優選的,給主dex程序包增加外殼activity(OuterShellBaseActivity,DexActivity),OuterShellBaseActivity是個基類,和Activity類似,首次啟動目標應用時,分dex程序包中的dex壓縮內容沒載入的情況下要經過這個外殼,從而調用顯示啟動界面。流程如圖8所示:[0〇65] A、正常入口去啟動對應的activity,會先到基本組件Acitivity或者外殼組件 OuterShellBaseActivity里面判斷是否已經加載過dex;[〇〇66]若是_>正常啟動,執行步驟B;[0〇67] 若否->保留當前intent信息,并存入下一個intent中,然后去啟動DexActiivty, 在DexAcitivty中載入dex之后,根據得到的intent啟動原來activity,在dex異步加載過程中一直處于閃屏狀態,當dex加載完畢,調用應用啟動組件啟動應用,出現應用主界面,該啟動方式為首次啟動邏輯;[0〇68] B、在onattachbasecontext里面加載dex,然后調用應用啟動組件啟動應用,出現閃屏,該啟動方式為非首次啟動邏輯;
[0069]進一步如圖8所示,啟動方式還可以是覆蓋安裝啟動方式,具體請參照圖3的實施例所述,在此不再贅述。
[0070]如圖7表格所示,采用不同方案目標應用的啟動耗時完全不同,比如,使用雙核 1GHz的android 4.4.2的P1手機對目標應用進行啟動,采用現有方案(即【背景技術】所述方案)啟動時,耗時3100ms,采用本發明優化后,耗時170ms,使用雙核1GHz的android 4.4.4的 P2手機對目標應用進行啟動,采用現有方案(即【背景技術】所述方案)啟動時,耗時1400ms,采用本發明優化后,耗時170ms,從上述比較可知,采用本發明實施例的應用啟動方法可以大大減小目標應用的首次啟動時長。
[0071]本發明實施例,獲取第一壓縮文件,該第一壓縮文件包含目標應用的啟動信息以及目標應用的dex壓縮內容,從該第一壓縮文件中提取該dex壓縮內容,將該dex壓縮內容生成第二壓縮文件,加載第二壓縮文件中的dex壓縮內容,并根據第一壓縮文件中的啟動信息啟動目標應用。這種方式可節省解壓和再壓縮dex包的時間,減少目標應用啟動時間,提高用戶體驗。
[0072]請參照圖3,為本發明實施例提供的另一種應用啟動方法的流程圖,該方法可包括以下步驟S300-S304;[〇〇73] S300,當檢測到系統廣播的用于通知目標應用安裝完成的廣播包時,獲取第一壓縮文件;
[0074]本發明實施例中,覆蓋安裝目標應用后,系統會廣播用于通知目標應用安裝完成的廣播包PACKAGE_REPLACED,目標應用接收PACKAGE_REPLACED廣播,并啟動獨立進程進行 dex預解壓,即是自動獲取第一壓縮文件,并提取該第一壓縮文件中的dex壓縮內容,將該 dex壓縮內容重新生成第二壓縮文件,并加載第二壓縮文件中的dex。[〇〇75] 如圖5所示,APP被安裝到設備,系統發出PACKAGE_REPLACED廣播,APP啟動lite線程,lite線程調用本發明實施例一中的應用啟動方法進行dex加載,加載完畢后,lite線程退出,之后用戶使用APP直接按照非首次啟動流程,縮短首次啟動時間。[〇〇76] S301,從所述第一壓縮文件中提取所述dex壓縮內容;[〇〇77] S302,將所述dex壓縮內容生成第二壓縮文件;[〇〇78] S303,加載所述第二壓縮文件中的所述dex壓縮內容;
[0079]本發明實施例步驟S301-S303請參照圖2的實施例步驟S201?S203,在此不再贅述。
[0080]S304,當檢測到啟動所述目標應用的啟動指令時,根據所述第一壓縮文件中的所述啟動信息啟動所述目標應用。
[0081]本發明實施例中,當檢測到啟動目標應用的啟動指令(比如用戶點擊應用圖標) 時,根據第一壓縮文件中的啟動信息啟動目標應用,而不需要再去加載dex,因為dex已經在目標應用安裝后即進行了加載。
[0082]本發明實施例,獲取第一壓縮文件,該第一壓縮文件包含目標應用的啟動信息以及目標應用的dex壓縮內容,從該第一壓縮文件中提取該dex壓縮內容,將該dex壓縮內容生成第二壓縮文件,加載第二壓縮文件中的dex壓縮內容,并根據第一壓縮文件中的啟動信息啟動目標應用。這種方式可節省解壓和再壓縮dex包的時間,減少目標應用啟動時間,提高用戶體驗。[〇〇83]下面將結合附圖9-附圖11,對本發明實施例提供的一種應用啟動裝置進行詳細介紹。
[0084]請參照圖9,為本發明實施例提供的一種應用啟動裝置的結構示意圖,如圖所示, 該應用啟動裝置包括獲取模塊100、提取模塊101、生成模塊102以及啟動模塊103;
[0085]獲取模塊100,用于獲取第一壓縮文件,所述第一壓縮文件包含目標應用的啟動信息以及所述目標應用的代碼包dex壓縮內容;
[0086]本發明實施例中,當把目標應用安裝完成后,首次啟動該目標應用時,要對dex進行dexopt操作,將dex從APK文件中提取出來進行加載。具體可選的,獲取模塊100獲取第一壓縮文件,該第一壓縮文件可以為APK文件,APK文件中包含目標應用的代碼包dex壓縮內容,啟動該目標應用時,均需要加載dex,通常加載dex是以zip形式進行加載。
[0087]進一步可選的,該第一壓縮文件中還包含目標應用的啟動信息,目標應用的啟動信息包括但不限于啟動該目標應用的數據以及啟動該目標應用的入口程序代碼。[〇〇88]提取模塊101,用于從所述第一壓縮文件中提取所述dex壓縮內容;
[0089]本發明實施例中,提取模塊101從第一壓縮文件中提取出dex壓縮內容,具體的提取過程可以是根據dex壓縮內容的文件名進行查找,可選的,dex壓縮內容在APK文件中文件名為classes2.dex的entry中,通過遍歷所有entry找到該dex壓縮內容,如下所示:
[0090](1)先在APK文件中查找目錄結束標示結構(標識符是:0x06054b50),然后從該位置往下偏移16個字節處,找到核心目錄第一個entry的偏移處(標識符是:0x02014b50)。 [0〇91 ](2)然后用for循環開始記錄各個entry的信息(可以記錄下每個entry在APK文件中的偏移,這樣便于在寫信息(即是生成第二壓縮文件)的時候定位到該entry的開始處), 從entry頭往下偏移42字節處,去找該entry的文件頭信息,文件頭信息包括文件頭+文件源數據(壓縮后的數據)+ (hasDD,不一定有)。在APK文件中,dex壓縮內容在文件名為 classes2.dex中的entry中。找到dex壓縮內容之后,S卩可以開始手動zip壓縮文件的寫入過程。[〇〇92]生成模塊102,用于將所述dex壓縮內容生成第二壓縮文件;[〇〇93]本發明實施例中,生成模塊102根據所提取的dex壓縮內容,生成第二壓縮文件,第二壓縮文件的壓縮格式可以是zip格式,在這里就不需要將dex壓縮內容先進行解壓到臨時目錄,再重新壓縮,節省了目標應用啟動的時間。
[0094] 可選的,如圖10所示,生成模塊102可以包括第一生成單元1020和第二生成單元 1021;[〇〇95]第一生成單元1020,用于根據所述第一壓縮文件中所述dex壓縮內容的文件頭信息,生成第二壓縮文件的頭信息,所述第二壓縮文件的頭信息包含所述dex壓縮內容;[〇〇96]第二生成單元1021,用于根據所述第一壓縮文件中所述dex壓縮內容的核心目錄信息,生成所述第二壓縮文件的核心目錄信息。
[0097]本發明實施例中,第二壓縮文件包括頭信息、核心目錄信息以及目錄結束標示結構信息等,在生成第二壓縮文件時,根據第一壓縮文件中該dex壓縮內容對應的文件頭信息,生成第二壓縮文件的頭信息,該第二壓縮文件的頭信息也包括文件頭+文件源數據(壓縮后的dex數據) + (hasDD,不一定有)。[〇〇98]進一步,生成第二壓縮文件中核心目錄信息時,也是根據第一壓縮文件中該dex壓縮內容的核心目錄信息生成,具體的第二壓縮文件生成過程如下,這里繼續基于上述(1)和 (2)進行說明:[〇〇99](3)先寫第二壓縮文件的文件頭信息,需要改文件名字為classes.dex,重算文件名長度,其他信息可以把APK文件classes2.dex的entry中的文件頭信息拷貝過來。
[0100](4)再寫第二壓縮文件的entry核心目錄信息[0101 ]因為只有一個entry,將里面的文件名,文件名長度,文件頭位移做相應修改,其他信息從原來APK文件classes2.dex的entry中的信息拷貝過來即可。在上述(2)中,讀APK文件的時候記錄了 entry在APK文件中的偏移位置,在找尋cl asses 2.dex的過程中,可以用 buffer流,因為entry中每個字段的信息字節數都是確定的,所以可以用一個變量來定位和記錄各個位置的偏移情況。[〇1〇2](5)寫第二壓縮文件的目錄結束標示結構信息。
[0103]啟動模塊103,用于加載所述第二壓縮文件中的所述dex壓縮內容,并根據所述第一壓縮文件中的所述啟動信息啟動所述目標應用。
[0104]本發明實施例中,當根據dex壓縮內容生成第二壓縮文件之后,啟動模塊103即可加載第二壓縮文件中的dex壓縮內容,并根據第一壓縮文件中的啟動信息啟動目標應用,需要說明的是,第一壓縮文件中的啟動信息可以是處于解壓狀態,例如可以是在目標應用安裝過程中,進行編譯時即進行了解壓。
[0105]上述主要闡述了優化dex解壓速度,可以等效于圖4的流程圖,首次安裝目標應用啟動時要對dex進行dexopt操作,需要將dex從APK文件中提取出來,本方案直接讀取APK文件,從APK文件中找到壓縮狀態的dex壓縮內容,復制對應內容,加上zip文件頭,直接輸出為新zip文件,并以zip形式加載dex的所有方法,最后進入應用程序(Applicat1n,APP)主界面。相比現有方案節省了一次解壓和一次壓縮操作,若使用雙核1GHz的手機對目標應用進行啟動,則可以將這部分文件操作時間從秒級降到毫秒級。[〇1〇6]可選的,所述dex壓縮內容為所述第一壓縮文件中的分dex程序包,所述分dex程序包包含非啟動入口程序,所述啟動信息包括所述第一壓縮文件中的主dex程序包,所述主 dex程序包包含至少一個解壓狀態的啟動入口程序;
[0107] 如圖11所示,啟動模塊103可以包括第一顯示單元1030、加載單元1031以及第二顯示單元1032;[〇1〇8] 第一顯示單元1030,用于啟動所述主dex程序包,并顯示啟動界面;[〇1〇9]加載單元1031,用于加載所述第二壓縮文件中的所述dex壓縮內容;[〇11〇]第二顯示單元1032,用于當檢測到加載完所述dex壓縮內容,執行所述主dex程序包中的所述至少一個啟動入口程序,并顯示所述目標應用的主界面。
[0111]本發明實施例中,當首次安裝啟動目標應用時,用戶點擊應用圖標啟動目標應用, 舊版本會先加載dex,再調用該目標應用的啟動入口程序啟動目標應用從而出現閃屏,這樣啟動目標應用,在加載dex過程中用戶看不到閃屏,呈卡死狀態,體驗較差。
[0112]本發明實施例對上述啟動過程進行改進,實現先出現閃屏,再加載dex。而要實現上述啟動過程就需要保證所有可能的啟動入口程序的所有直接依賴集和間接依賴集在安裝編譯時都分在主dex程序包里,這樣啟動主dex程序包時可以調動顯示啟動界面,即出現閃屏,如圖6所示,當用戶點擊應用圖標時,即出現第二個啟動界面,在啟動界面顯示過程中異步加載dex。[〇113]需要說明的是,主dex程序包中的依賴集很大,系統的自動分包方案不能保證所有啟動入口程序的依賴集都在主dex程序包中。因此開發人員分析出啟動入口程序的所有直接依賴集和間接依賴集,然后確保依賴集都在主dex程序包里面,這樣啟動入口就能夠保證啟動成功。開發人員首先對分dex程序包的腳本做修改,加入預設分類規則,當在目標應用安裝編譯過程中,即根據該預設分類規則將所有程序分在主dex程序包和分dex程序包。
[0114]在主dex程序包中需要確保keep最小依賴集,保證主dex程序包能夠有我們所有的依賴類集合,主要包含如下幾個部分:service、content provider、broadcast、 MusicApplicat1n、LifeCycleManager、BaseActivity、OuterShellBaseActivity、 DexActivity〇
[0115]優選的,給主dex程序包增加外殼activity(OuterShellBaseActivity, DexActivity),OuterShellBaseActivity是個基類,和Activity類似,首次啟動目標應用時,分dex程序包中的dex壓縮內容沒載入的情況下要經過這個外殼,從而調用顯示啟動界面。流程如圖8所示:
[0116]A、正常入口去啟動對應的activity,會先到基本組件Acitivity或者外殼組件 OuterShellBaseActivity里面判斷是否已經加載過dex;[〇117]若是_>正常啟動,執行步驟B;[〇118] 若否->保留當前intent信息,并存入下一個intent中,然后去啟動DexActiivty, 在DexAcitivty中載入dex之后,根據得到的intent啟動原來activity,在dex異步加載過程中一直處于閃屏狀態,當dex加載完畢,調用應用啟動組件啟動應用,出現應用主界面,該啟動方式為首次啟動邏輯;[〇119] B、在onattachbasecontext里面加載dex,然后調用應用啟動組件啟動應用,出現閃屏,該啟動方式為非首次啟動邏輯;
[0120]進一步如圖8所示,啟動方式還可以是覆蓋安裝啟動方式,具體請參照圖3的實施例所述,在此不再贅述。[〇121 ]如圖7表格所示,采用不同方案目標應用的啟動耗時完全不同,比如,使用雙核 1GHz的android 4.4.2的P1手機對目標應用進行啟動,采用現有方案(即【背景技術】所述方案)啟動時,耗時3100ms,采用本發明優化后,耗時170ms,使用雙核1GHz的android 4.4.4的 P2手機對目標應用進行啟動,采用現有方案(即【背景技術】所述方案)啟動時,耗時1400ms,采用本發明優化后,耗時170ms,從上述比較可知,采用本發明實施例的應用啟動方法可以大大減小目標應用的首次啟動時長。
[0122]優選的,所述獲取模塊100具體用于當檢測到系統廣播的用于通知目標應用安裝完成的廣播包時,獲取第一壓縮文件;
[0123]本發明實施例中,覆蓋安裝目標應用后,系統會廣播用于通知目標應用安裝完成的廣播包PACKAGE_REPLACED,目標應用獲取模塊100接收PACKAGE_REPLACED廣播,并啟動獨立進程進行dex預解壓,即是自動獲取第一壓縮文件,并提取該第一壓縮文件中的dex壓縮內容,將該dex壓縮內容重新生成第二壓縮文件,并加載第二壓縮文件中的dex。
[0124]如圖5所示,APP被安裝到設備,系統發出PACKAGE_REPLACED廣播,APP啟動lite線程,lite線程調用本發明實施例一中的應用啟動方法進行dex加載,加載完畢后,lite線程退出,之后用戶使用APP直接按照非首次啟動流程,縮短首次啟動時間。
[0125]所述啟動模塊103根據所述第一壓縮文件中的所述啟動信息啟動所述目標應用具體包括:
[0126]當檢測到啟動所述目標應用的啟動指令時,根據所述第一壓縮文件中的所述啟動信息啟動所述目標應用。
[0127]本發明實施例中,當檢測到啟動目標應用的啟動指令(比如用戶點擊應用圖標) 時,啟動模塊103根據第一壓縮文件中的啟動信息啟動目標應用,而不需要再去加載dex,因為dex已經在目標應用安裝后即進行了加載。
[0128]本發明實施例,獲取第一壓縮文件,該第一壓縮文件包含目標應用的啟動信息以及目標應用的dex壓縮內容,從該第一壓縮文件中提取該dex壓縮內容,將該dex壓縮內容生成第二壓縮文件,加載第二壓縮文件中的dex壓縮內容,并根據第一壓縮文件中的啟動信息啟動目標應用。這種方式可節省解壓和再壓縮dex包的時間,減少目標應用啟動時間,提高用戶體驗。
[0129]本領域普通技術人員可以理解實現上述實施例方法中的全部或部分流程,是可以通過計算機程序來指令相關的硬件來完成,所述的程序可存儲于一計算機可讀取存儲介質中,附圖9-附圖11所示應用啟動裝置對應的程序可存儲在應用啟動裝置的可讀存儲介質內,并被該應用啟動裝置中的至少一個處理器執行,以實現上述應用啟動方法,該方法包括圖2-附圖3中方法實施例所述的流程。其中,所述的存儲介質可為磁碟、光盤、只讀存儲記憶體(Read-Only Memory,R0M)或隨機存儲記憶體(Random Access Memory,RAM)等。
[0130]以上所揭露的僅為本發明較佳實施例而已,當然不能以此來限定本發明之權利范圍,因此依本發明權利要求所作的等同變化,仍屬本發明所涵蓋的范圍。
【主權項】
1.一種應用啟動方法,其特征在于,包括:獲取第一壓縮文件,所述第一壓縮文件包含目標應用的啟動信息以及所述目標應用的 代碼包dex壓縮內容;從所述第一壓縮文件中提取所述dex壓縮內容;將所述dex壓縮內容生成第二壓縮文件;加載所述第二壓縮文件中的所述dex壓縮內容,并根據所述第一壓縮文件中的所述啟 動信息啟動所述目標應用。2.如權利要求1所述的方法,其特征在于,所述第一壓縮文件為安卓系統安裝包APK文 件,所述第二壓縮文件為z ip壓縮文件。3.如權利要求1所述的方法,其特征在于,所述將所述dex壓縮內容生成第二壓縮文件, 包括:根據所述第一壓縮文件中所述dex壓縮內容的文件頭信息,生成第二壓縮文件的頭信 息,所述第二壓縮文件的頭信息包含所述dex壓縮內容;根據所述第一壓縮文件中所述dex壓縮內容的核心目錄信息,生成所述第二壓縮文件 的核心目錄信息。4.如權利要求如權利要求1-3任意一項所述的方法,其特征在于,所述dex壓縮內容為 所述第一壓縮文件中的分dex程序包,所述分dex程序包包含非啟動入口程序,所述啟動信 息包括所述第一壓縮文件中的主dex程序包,所述主dex程序包包含至少一個解壓狀態的啟 動入口程序;所述加載所述第二壓縮文件中的所述dex壓縮內容,并根據所述第一壓縮文件中的所 述啟動信息啟動所述目標應用,包括:啟動所述主dex程序包,并顯示啟動界面;加載所述第二壓縮文件中的所述dex壓縮內容;當檢測到加載完所述dex壓縮內容,執行所述主dex程序包中的所述至少一個啟動入口 程序,并顯示所述目標應用的主界面。5.如權利要求4所述的方法,其特征在于,所述第一壓縮文件中的分dex程序包中的非 啟動入口程序以及所述第一壓縮文件中的主dex程序包中的啟動入口程序為安裝所述目標 應用時根據預設分類規則編譯獲得。6.如權利要求如權利要求1-3任意一項所述的方法,其特征在于,所述獲取第一壓縮文 件,包括:當檢測到系統廣播的用于通知目標應用安裝完成的廣播包時,獲取第一壓縮文件;所述根據所述第一壓縮文件中的所述啟動信息啟動所述目標應用,包括:當檢測到啟動所述目標應用的啟動指令時,根據所述第一壓縮文件中的所述啟動信息 啟動所述目標應用。7.—種應用啟動裝置,其特征在于,包括:獲取模塊,用于獲取第一壓縮文件,所述第一壓縮文件包含目標應用的啟動信息以及 所述目標應用的代碼包dex壓縮內容;提取模塊,用于從所述第一壓縮文件中提取所述dex壓縮內容;生成模塊,用于將所述dex壓縮內容生成第二壓縮文件;啟動模塊,用于加載所述第二壓縮文件中的所述dex壓縮內容,并根據所述第一壓縮文 件中的所述啟動信息啟動所述目標應用。8.如權利要求7所述的裝置,其特征在于,所述第一壓縮文件為安卓系統安裝包APK文 件,所述第二壓縮文件為z ip壓縮文件。9.如權利要求7所述的裝置,其特征在于,所述生成模塊包括:第一生成單元,用于根據所述第一壓縮文件中所述dex壓縮內容的文件頭信息,生成第 二壓縮文件的頭信息,所述第二壓縮文件的頭信息包含所述dex壓縮內容;第二生成單元,用于根據所述第一壓縮文件中所述dex壓縮內容的核心目錄信息,生成 所述第二壓縮文件的核心目錄信息。10.如權利要求7-9任意一項所述的裝置,其特征在于,所述dex壓縮內容為所述第一壓 縮文件中的分dex程序包,所述分dex程序包包含非啟動入口程序,所述啟動信息包括所述 第一壓縮文件中的主dex程序包,所述主dex程序包包含至少一個解壓狀態的啟動入口程 序;所述啟動模塊包括:第一顯示單元,用于啟動所述主dex程序包,并顯示啟動界面;加載單元,用于加載所述第二壓縮文件中的所述dex壓縮內容;第二顯示單元,用于當檢測到加載完所述dex壓縮內容,執行所述主dex程序包中的所 述至少一個啟動入口程序,并顯示所述目標應用的主界面。11.如權利要求10所述的裝置,其特征在于,所述第一壓縮文件中的分dex程序包中的 非啟動入口程序以及所述第一壓縮文件中的主dex程序包中的啟動入口程序為安裝所述目 標應用時根據預設分類規則編譯獲得。12.如權利要求7-9任意一項所述的裝置,其特征在于,所述獲取模塊具體用于當檢測 到系統廣播的用于通知目標應用安裝完成的廣播包時,獲取第一壓縮文件;所述啟動模塊根據所述第一壓縮文件中的所述啟動信息啟動所述目標應用具體包括:當檢測到啟動所述目標應用的啟動指令時,根據所述第一壓縮文件中的所述啟動信息 啟動所述目標應用。
【文檔編號】G06F9/445GK105975311SQ201610300439
【公開日】2016年9月28日
【申請日】2016年5月9日
【發明人】鄧淋元
【申請人】騰訊科技(深圳)有限公司