本發(fā)明涉及信息處理技術領域,尤其涉及一種應用程序安裝包的生成方法、加載方法及裝置。
背景技術:
應用程序安裝包是一類用于在操作系統(tǒng)中安裝應用程序的文件,用戶通過應用程序安裝包能夠實現(xiàn)對應用程序的安裝。在安卓(Android)系統(tǒng)的開發(fā)過程中,隨著應用程序的功能和展現(xiàn)方式越來越豐富,應用程序安裝包所占用的存儲空間也越來越大,因此,如何降低應用程序安裝包所占用的存儲空間成為亟需解決的問題。
技術實現(xiàn)要素:
鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的應用程序安裝包的生成方法、加載方法及裝置。
本發(fā)明實施例提供一種應用程序安裝包的生成方法,所述方法包括:
獲取應用程序的安裝資源;
從所述安裝資源中解析出用于加載應用程序的主界面的第一資源;
根據(jù)所述第一資源生成應用程序安裝包。
優(yōu)選的,在所述從所述安裝資源中解析出用于加載應用程序的主界面的第一資源之后,所述方法還包括:
將所述安裝資源中除所述第一資源以外的第二資源暫存到資產(chǎn)目錄中。
優(yōu)選的,在所述從所述安裝資源中解析出用于加載應用程序的主界面的第一資源之后,所述方法還包括:
根據(jù)所述安裝資源中除所述第一資源以外的第二資源生成資源安裝包。
優(yōu)選的,在所述根據(jù)所述安裝資源中除所述第一資源以外的第二資源生成資源安裝包之后,所述方法包括:
將第一密鑰對中的第一公鑰保存到所述應用程序安裝包中,同時利用第一密鑰對中的第一私鑰對所述資源安裝包進行第一次加密;
將第二密鑰對中的第二私鑰保存到所述應用程序安裝包中,同時利用第二密鑰對中的第二公鑰對所述資源安裝包進行第二次加密。
優(yōu)選的,在所述根據(jù)所述安裝資源中除所述第一資源以外的第二資源生成資源安裝包之后,所述方法還包括:
將所述資源安裝包發(fā)送至服務器。
基于同一發(fā)明構思,本發(fā)明實施例還提供一種應用程序安裝包的加載方法,所述方法包括:
獲取根據(jù)第一資源生成的應用程序安裝包,其中,所述第一資源為用于加載應用程序的主界面的資源;
根據(jù)所述應用程序安裝包,對所述應用程序進行安裝,以使用戶在打開所述應用程序時所述主界面能夠進行加載。
優(yōu)選的,在所述對與所述應用程序安裝包對應的應用程序進行安裝之后,所述方法還包括;
在所述應用程序的當前顯示界面為所述主界面時,判斷是否存在用于打開所述主界面的次級界面的打開操作;
當存在所述打開操作時,獲取存儲于服務器中的資源安裝包,并對所述資源安裝包進行加載。
優(yōu)選的,在所述獲取存儲于服務器中的資源安裝包之后,所述方法還包括:
利用存放在所述應用程序安裝包中的第二密鑰對中的第二私鑰,對由所述第二密鑰對中的第二公鑰加密過的所述資源安裝包進行第一次解密;
利用存放在所述應用程序安裝包中的第一密鑰對中的第一公鑰對,由所述第一密鑰對中的第一私鑰加密過的所述資源安裝包進行第二次解密。
基于同一發(fā)明構思,本發(fā)明實施例還提供一種應用程序安裝包的生成裝置,所述裝置包括:
第一獲取模塊,用于獲取應用程序的安裝資源;
加載模塊,用于從所述安裝資源中解析出用于加載應用程序的主界面的第一資源;
生成模塊,用于根據(jù)所述第一資源生成應用程序安裝包。
基于同一發(fā)明構思,本發(fā)明實施例還提供一種應用程序安裝包的加載裝置,所述裝置包括:
第二獲取模塊,用于獲取根據(jù)第一資源生成的應用程序安裝包,其中,所述第一資源為用于加載應用程序的主界面的資源;
安裝模塊,用于根據(jù)所述應用程序安裝包,對所述應用程序進行安裝,以使用戶在打開所述應用程序時所述主界面能夠進行加載。
本發(fā)明實施例中的一個或多個技術方案,至少具有如下技術效果或優(yōu)點:
本發(fā)明通過從應用程序的安裝資源中解析出用于加載應用程序的主界面的第一資源,并根據(jù)第一資源生成應用程序安裝包,利用該應用程序安裝包能夠實現(xiàn)對應用程序的安裝,使用戶在打開安裝好的應用程序后主界面能夠進行加載,由于除用于加載主界面以外的資源不再打包到應用程序安裝包內(nèi),降低了應用程序安裝包對存儲空間的占用。
附圖說明
通過閱讀下文優(yōu)選實施方式的詳細描述,各種其他的優(yōu)點和益處對于本領域普通技術人員將變得清楚明了。附圖僅用于示出優(yōu)選實施方式的目的,而并不認為是對本發(fā)明的限制。而且在整個附圖中,用相同的參考圖形表示相同的部件。在附圖中:
圖1示出了本發(fā)明實施例的一種應用程序安裝包的生成方法的流程圖;
圖2示出了本發(fā)明實施例的一種應用程序安裝包的加載方法的流程圖;
圖3示出了本發(fā)明實施例的一種應用程序安裝包的生成裝置的結構圖;
圖4示出了本發(fā)明實施例的一種應用程序安裝包的加載裝置的結構圖。
具體實施方式
下面將參照附圖更詳細地描述本公開的示例性實施例。雖然附圖中顯示了本公開的示例性實施例,然而應當理解,可以以各種形式實現(xiàn)本公開而不應被這里闡述的實施例所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,并且能夠將本公開的范圍完整的傳達給本領域的技術人員。
本發(fā)明實施例提供一種應用程序安裝包的生成方法,應用于Android系統(tǒng)中,所述應用程序安裝包的生成方法的執(zhí)行主體可以為應用程序開發(fā)側客戶端,如圖1所示,所述方法包括:
步驟101:獲取應用程序的安裝資源。
步驟102:從所述安裝資源中解析出用于加載應用程序的主界面的第一資源。
具體來講,在應用程序開發(fā)完成后,根據(jù)開發(fā)好的應用程序能夠得到應用程序的安裝資源,應用程序的安裝資源中包含應用程序直接運行需要的資源和應用程序直接運行不需要的資源,其中,應用程序直接運行需要的資源至少包括用于加載應用程序的主界面的資源,從而,在步驟102中,可以從安裝資源中解析出用于加載應用程序的主界面的資源為第一資源。在一種特殊情況下,應用程序直接運行時具有啟動頁面,則,在步驟102中,可以從安裝資源中解析出用于加載應用程序的啟動頁面和主界面的資源為第一資源。
步驟103:根據(jù)所述第一資源生成應用程序安裝包。
具體來講,應用程序安裝包的文件格式為APK(AndroidPackage)。在根據(jù)第一資源生成應用程序安裝包之后,根據(jù)該應用程序安裝包能夠實現(xiàn)對應用程序的安裝,在對安裝完成的應用程序進行打開操作后,應用程序將會加載主界面,當應用程序存在啟動頁面時,應用程序將會依次加載啟動頁面和主界面。
進一步,在從所述安裝資源中解析出用于加載應用程序的主界面的第一資源之后,所述方法還包括:將所述安裝資源中除所述第一資源以外的第二資源暫存到資產(chǎn)目錄中。
具體來講,應用程序的安裝資源中除應用程序直接運行需要的資源以為的資源則為應用程序直接運行不需要的資源,其中,應用程序直接運行不需要的資源包括用于加載應用程序的次級界面的資源。在本申請中,在解析出第一資源之后,將安裝資源中除第一資源以外的第二資源暫存到資產(chǎn)目錄(Assets目錄)中,從而能夠避免將第二資源保存到資源文件目錄(Res目錄)所帶來的資源沖突的問題。
具體來講,Assets目錄下的文件是通過文件名來訪問的,即,先獲取Resources對象,接著根據(jù)Resources對象調(diào)用其getAssets方法來獲取Assets目錄,再調(diào)用open方法讀取指定的文件。
進一步,在從所述安裝資源中解析出用于加載應用程序的主界面的第一資源之后,所述方法還包括:根據(jù)所述安裝資源中除所述第一資源以外的第二資源生成資源安裝包。
具體來講,在本申請中,在從安裝資源中解析出用于加載應用程序的主界面的第一資源之后,可以直接將安裝資源中除第一資源以外的第二資源打包成資源安裝包,也可以在將第二資源暫存到Assets目錄之后再將第二資源打包成資源安裝包。其中,資源安裝包的文件格式同樣為APK。在生成資源安裝包之后,將資源安裝包發(fā)送至服務器。
進一步,為了提高資源安裝包的安全性,防止在傳輸過程中被竊取或修改,在本申請中,可以對應用程序安裝包和資源安裝包進行文件簽名,使應用程序安裝包的文件簽名和資源安裝包的文件簽名一致,以保證只有當資源安裝包的文件簽名與應用程序安裝包的文件簽名一致時,資源安裝包才會對應用程序安裝包有效。另外,也可以應用程序安裝包和資源安裝包進行加密,還可以將文件簽名的過程和加密的過程相結合以確保資源安裝包的安全性。
進一步,本申請在對應用程序安裝包和資源安裝包加密時,執(zhí)行兩次加密過程。其中,可以利用應用程序開發(fā)側的客戶端對應用程序安裝包和資源安裝包進行加密,也可以利用服務器對應用程序安裝包和資源安裝包進行加密。在本申請中利用密鑰對對安裝包進行加密,一個密鑰對包含一個公鑰和一個私鑰。用于加密的第一密鑰對和第二密鑰對可以在應用程序開發(fā)側的客戶端中生成,也可以在服務器中生成,且,第一密鑰對和第二密鑰對可以在應用程序開發(fā)側的客戶端和服務器之間相互傳輸。
通常情況下,非對稱加密算法是利用公鑰加密利用私鑰進行解密,但是在傳輸過程中可能存在中間人偽造服務器的情況,偽造的服務器向客戶端提供偽造的資源安裝包,偽造的資源安裝包中包含有惡意廣告,因此,在本申請中對加密進行了反向操作,即,利用私鑰進行加密利用公鑰進行解密,具體地:
當利用應用程序開發(fā)側的客戶端進行加密時,首先,應用程序開發(fā)側的客戶端將第一密鑰對中的第一公鑰保存到應用程序安裝包中,同時利用第一密鑰對中的第一私鑰對資源安裝包進行第一次加密,接著,應用程序開發(fā)側的客戶端將第二密鑰對中的第二私鑰保存到應用程序安裝包中,同時利用第二密鑰對中的第二公鑰對資源安裝包進行第二次加密。在完成兩次加密之后,應用程序開發(fā)側的客戶端可以將資源安裝包發(fā)送至服務器。
當利用應服務器進行加密時,在生成資源安裝包之后,將資源安裝包發(fā)送至服務器,接著,服務器端先利用第一密鑰對中的第一私鑰對資源安裝包進行加密,同時第一密鑰對中的第一公鑰保存在應用程序安裝包中,從而,可以保證只要能通過應用程序安裝包中的第一公鑰進行解密的資源安裝包均是通過服務器傳輸過來的,因為與第一公鑰對應的第一私鑰只有服務器持有,中間人無法偽造,避免了中間人偽造資源安裝包,但是無法保證第三方竊取資源安裝包,因為第一公鑰是公開的,進而,對資源安裝包進行第二次加密,具體地,服務器利用第二密鑰對中的第二公鑰對資源安裝包進行加密,同時第二密鑰對中的第二私鑰保存在應用程序安裝包中,從而保證了只有持有第二私鑰的應用程序安裝包才能對資源安裝包進行解密,第三方就算持有第二公鑰也只能加密無法解密。
基于同一發(fā)明構思,本發(fā)明實施例還提供一種應用程序安裝包的加載方法,應用于Android系統(tǒng)中,所述應用程序安裝包的加載方法的執(zhí)行主體可以為應用程序使用側客戶端,如圖2所示,所述方法包括:
步驟201:獲取根據(jù)第一資源生成的應用程序安裝包,其中,所述第一資源為用于加載應用程序的主界面的資源。
具體來講,應用程序安裝包的獲取途經(jīng)可以為應用程序開發(fā)側客戶端,也可以為任一軟件下載網(wǎng)站,本申請對獲取應用程序安裝包的途經(jīng)不做限定。
步驟202:根據(jù)所述應用程序安裝包,對所述應用程序進行安裝,以使用戶在打開所述應用程序時所述主界面能夠進行加載。
在本申請中,利用根據(jù)第一資源生成的應用程序安裝包對應用程序進行安裝后,用戶在打開安裝好的應用程序后,應用程序使用側客戶端對主界面進行加載,將應用程序的主界面展現(xiàn)給用戶。
進一步,在應用程序的當前顯示界面為主界面時,判斷是否存在用于打開所述主界面中的次級界面的打開操作,當存在所述打開操作時,獲取存儲于服務器中的資源安裝包,并對所述資源安裝包進行加載。具體地,應用程序使用側客戶端發(fā)送資源獲取請求給服務器,服務器在接收到資源獲取請求之后將資源安裝包發(fā)送給應用程序使用側客戶端,并將資源安裝包保存到該應用程序的文件目錄下。
進一步,在獲取到存儲于服務器中的資源安裝包之后,所述方法還包括:
利用存放在所述應用程序安裝包中的第二密鑰對中的第二私鑰,對由所述第二密鑰對中的第二公鑰加密過的所述資源安裝包進行第一次解密;
利用存放在所述應用程序安裝包中的第一密鑰對中的第一公鑰對,由所述第一密鑰對中的第一私鑰加密過的所述資源安裝包進行第二次解密。
具體來講,在獲取到資源安裝包之后,與前述加密過程相對應地,首先,利用第二密鑰對的第二私鑰對資源安裝包進行第一次解密,在成功解密后,資源安裝包變成一個被第一密鑰對加密的文件,接著,利用第一密鑰對的第一公鑰對資源安裝包進行第二次解密,最終得到?jīng)]有密碼的資源安裝包。
另外,在利用第一密鑰對的第一公鑰對資源安裝包進行第二次解密之后,還可以包括:判斷資源安裝包的文件簽名是否與應用程序安裝包的文件簽名一致,若資源安裝包的文件簽名是否與應用程序安裝包的文件簽名一致,則對資源安裝包進行加載,否則,刪除該資源安裝包。
進一步,在獲取文件簽名時,可以通過context的PackageManager方法先獲取android的包管理服務對象,然后通過該對象的getPackageInfo方法獲取應用的Packageinfo對象,通過該對象的signatures字段就能獲取安裝包的簽名信息,當存在打開次級界面的打開操作時,直接通過先獲取一個自定義的Resources對象,然后調(diào)用其getAssets方法得到Assets目錄的管理對象,最后調(diào)用open方法來獲取指定資源文件,open方法的參數(shù)就是資源文件名,最后在應用程序中進行資源設置。
進一步,在android系統(tǒng)中直接操作資源的類是Resources,而直接通過Resources類無法加載安裝包之外的資源,因為Resources中做了驗證,當安裝包不是已經(jīng)安裝的安裝包就不讀取其資源,Resources類最終是通過AssetManager類的addAssetPath來加載指定路徑安裝包的資源的,其中,AssetManager類是android資源管理器類,android中所有的資源都是通過其來實現(xiàn)的,這里要讀取未安裝的資源包就只能創(chuàng)建自己的Resources對象,但是創(chuàng)建Resources類的構造方法需要傳入一個AssetManager對象,而AssetManager對象的構造函數(shù)被系統(tǒng)設置成隱藏的,所以需要先通過反射構造一個AssetManager對象。
反射創(chuàng)建AssetManager對象的過程如下:首先通過Class類的forName方法得到AssetManager類的類型對象clazz,Class類是java中表示所有類的類,其提供了很多對java類反射的功能,其接受一個類的字符串描述,AssetManager類包名全稱“android.content.res.AssetManager”,然后調(diào)用clazz的getConstructor方法獲得AssetManager類的構造方法,最后調(diào)用其newInstance()方法創(chuàng)建一個AssetManager對象,AssetManager對象創(chuàng)建后需要調(diào)用其addAssetPath方法來指定加載資源的路徑,而addAssetPath也是一個隱藏方法名同樣需要通過反射來調(diào)用,首先調(diào)用clazz的getDeclaredMethod方法來獲取addAssetPath方法的對象,getDeclaredMethod第一個參數(shù)接受需要反射的方法字符串描述,即addAssetPath,第二個參數(shù)是需要反射方法的參數(shù)類型,addAssetPath方法的參數(shù)是路徑全稱,類型是String,所以第二個參數(shù)傳String.class,最后調(diào)用addAssetPath方法對象的invoke方法來執(zhí)行addAssetPath方法就行。其中,invoke是反射中的方法調(diào)用步驟,當反射一個方法時,getDeclaredMethod只是得到該方法對象,因此還需要調(diào)用invoke方法來真正執(zhí)行待反射的方法。
進一步,創(chuàng)建自定義的Resources對象的過程如下:Resources類構造需要三個參數(shù),第一個就是AssetManager對象,同時通過調(diào)用其addAssetPath方法設定安裝包文件的路徑為資源的路徑,第二個參數(shù)是DisplayMetrics類的對象,DisplayMetrics類可以獲取手機屏幕大小等信息,因此直接創(chuàng)建一個DisplayMetrics對象,第三個參數(shù)是Configuration對象,其控制一些例如手機橫豎屏等一系列信息,直接通過安裝包中自身context對象獲取傳入,即,調(diào)用其getConfiguration()方法,context是表示anroid應用程序的上下文環(huán)境,通過context可以訪問android程序運行的各種環(huán)境,當自定義Resources實現(xiàn)之后供加載解密后操作來調(diào)用讀取資源安裝包中的資源。
基于同一發(fā)明構思,本發(fā)明實施例還提供一種應用程序安裝包的生成裝置,如圖3所示,所述裝置包括:
第一獲取模塊301,用于獲取應用程序的安裝資源;
加載模塊302,用于從所述安裝資源中解析出用于加載應用程序的主界面的第一資源;
生成模塊303,用于根據(jù)所述第一資源生成應用程序安裝包。
基于同一發(fā)明構思,本發(fā)明實施例還提供一種應用程序安裝包的加載裝置,如圖4所示,所述裝置包括:
第二獲取模塊401,用于獲取根據(jù)第一資源生成的應用程序安裝包,其中,所述第一資源為用于加載應用程序的主界面的資源;
安裝模塊402,用于根據(jù)所述應用程序安裝包,對所述應用程序進行安裝,以使用戶在打開所述應用程序時所述主界面能夠進行加載。
本發(fā)明實施例中的一個或多個技術方案,至少具有如下技術效果或優(yōu)點:
本發(fā)明通過從應用程序的安裝資源中解析出用于加載應用程序的主界面的第一資源,并根據(jù)第一資源生成應用程序安裝包,利用該應用程序安裝包能夠實現(xiàn)對應用程序的安裝,使用戶在打開安裝好的應用程序后主界面能夠進行加載,由于除用于加載主界面以外的資源不再打包到應用程序安裝包內(nèi),降低了應用程序安裝包對存儲空間的占用。
同時,由于將安裝資源中除用于加載應用程序的主界面的第一資源以外的其他資源打包為資源安裝包,并將資源安裝包放置于服務器中,在需要時再進行獲取和加載,從而有效地實現(xiàn)了資源的分流。
在此提供的算法和顯示不與任何特定計算機、虛擬系統(tǒng)或者其它設備固有相關。各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構造這類系統(tǒng)所要求的結構是顯而易見的。此外,本發(fā)明也不針對任何特定編程語言。應當明白,可以利用各種編程語言實現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對特定語言所做的描述是為了披露本發(fā)明的最佳實施方式。
在此處所提供的說明書中,說明了大量具體細節(jié)。然而,能夠理解,本發(fā)明的實施例可以在沒有這些具體細節(jié)的情況下實踐。在一些實例中,并未詳細示出公知的方法、結構和技術,以便不模糊對本說明書的理解。
類似地,應當理解,為了精簡本公開并幫助理解各個發(fā)明方面中的一個或多個,在上面對本發(fā)明的示例性實施例的描述中,本發(fā)明的各個特征有時被一起分組到單個實施例、圖、或者對其的描述中。然而,并不應將該公開的方法解釋成反映如下意圖:即所要求保護的本發(fā)明要求比在每個權利要求中所明確記載的特征更多的特征。更確切地說,如下面的權利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個實施例的所有特征。因此,遵循具體實施方式的權利要求書由此明確地并入該具體實施方式,其中每個權利要求本身都作為本發(fā)明的單獨實施例。
本領域那些技術人員可以理解,可以對實施例中的設備中的模塊進行自適應性地改變并且把它們設置在與該實施例不同的一個或多個設備中。可以把實施例中的模塊或單元或組件組合成一個模塊或單元或組件,以及此外可以把它們分成多個子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對本說明書(包括伴隨的權利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設備的所有過程或單元進行組合。除非另外明確陳述,本說明書(包括伴隨的權利要求、摘要和附圖)中公開的每個特征可以由提供相同、等同或相似目的的替代特征來代替。
此外,本領域的技術人員能夠理解,盡管在此所述的一些實施例包括其它實施例中所包括的某些特征而不是其它特征,但是不同實施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實施例。例如,在下面的權利要求書中,所要求保護的實施例的任意之一都可以以任意的組合方式來使用。
本發(fā)明的各個部件實施例可以以硬件實現(xiàn),或者以在一個或者多個處理器上運行的軟件模塊實現(xiàn),或者以它們的組合實現(xiàn)。本領域的技術人員應當理解,可以在實踐中使用微處理器或者數(shù)字信號處理器(DSP)來實現(xiàn)根據(jù)本發(fā)明實施例的應用程序安裝包的生成裝置和應用程序安裝包的加載裝置中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設備或者裝置程序(例如,計算機程序和計算機程序產(chǎn)品)。這樣的實現(xiàn)本發(fā)明的程序可以存儲在計算機可讀介質上,或者可以具有一個或者多個信號的形式。這樣的信號可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號上提供,或者以任何其他形式提供。
應該注意的是上述實施例對本發(fā)明進行說明而不是對本發(fā)明進行限制,并且本領域技術人員在不脫離所附權利要求的范圍的情況下可設計出替換實施例。在權利要求中,不應將位于括號之間的任何參考符號構造成對權利要求的限制。單詞“包含”不排除存在未列在權利要求中的元件或步驟。位于元件之前的單詞“一”或“一個”不排除存在多個這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當編程的計算機來實現(xiàn)。在列舉了若干裝置的單元權利要求中,這些裝置中的若干個可以是通過同一個硬件項來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱。