本發明涉及安卓安裝包壓縮領域,尤其涉及安卓安裝包壓縮方法和裝置。
背景技術:
APK是Android Package的縮寫,即安卓安裝包。通過將APK文件直接傳到安卓Android模擬器或Android手機中執行即可安裝應用程序。為了提高傳輸效率,節省存儲空間,一般都需要對APK文件中的一些文件進行壓縮,具體需要壓縮的文件可以由APK打包時Android開發包中的自動化打包工具(android assert packaging tool,aapt)來確定。
目前,一般采用ZLIB函數庫實現的Deflate壓縮算法來對APK進行壓縮,其中,ZLIB為Android默認使用的一款開源的壓縮算法函數庫,Deflate為一種高儲存密度的磁盤驅動器與磁盤(ZIP)壓縮算法名稱。
然而,在實際應用中,采用該ZLIB函數庫得到的APK安裝包還是需要占用較大的存儲空間,會造成傳輸過程中產生的流量較大,傳輸成本較高。
技術實現要素:
本發明實施例提供了安卓安裝包壓縮方法和裝置,用于減小APK安裝包的體積,減少傳輸過程中產生的流量,節省網絡傳輸流量資源,降低成本。
一種安卓安裝包壓縮方法,包括:
在安卓安裝包APK文件生成階段,確定需要添加到APK文件中的待壓縮文件;
采用基于7Z函數庫實現的Deflate壓縮算法,對所述待壓縮文件進行壓縮,得到壓縮完成的文件;
合成所述壓縮完成的文件以及需要添加到APK文件中的不需要壓縮的文件,生成APK文件。
一種安卓安裝包壓縮方法,包括:
確定APK文件中的已壓縮文件和未壓縮文件,所述已壓縮文件為被采用 基于ZLIB函數庫實現的Deflate壓縮算法壓縮過的文件,所述未壓縮文件為所述APK文件中沒有被壓縮的文件;
解壓所述已壓縮文件,并采用基于7Z函數庫實現的Deflate壓縮算法,對解壓后的文件重新壓縮,得到重壓縮完成的文件;
合成所述重壓縮完成的文件和所述APK文件中的未壓縮文件,生成重壓縮后的APK文件。
一種壓縮裝置,包括:
第一確定模塊,用于在APK文件生成階段,確定需要添加到APK文件中的待壓縮文件;
壓縮模塊,用于采用基于7Z函數庫實現的Deflate壓縮算法,對所述第一確定模塊確定的待壓縮文件進行壓縮,得到壓縮完成的文件;
第一生成模塊,用于將所述壓縮模塊壓縮完成的文件以及要添加到APK文件中的不需要壓縮的文件,添加到APK文件中,生成APK文件。
一種壓縮裝置,包括:
第二確定模塊,用于確定APK文件中的已壓縮文件和未壓縮文件,所述已壓縮文件為被采用基于ZLIB函數庫實現的Deflate壓縮算法壓縮過的文件,所述未壓縮文件為所述APK文件中沒有被壓縮的文件;
重壓縮模塊,用于解壓所述第二確定模塊確定的已壓縮文件,并采用基于7Z函數庫實現的Deflate壓縮算法,對解壓后的文件重新壓縮,得到重壓縮完成的文件;
第二生成模塊,用于合成所述重壓縮模塊重壓縮完成的文件和所述第二確定模塊確定的未壓縮文件,生成重壓縮后的APK文件。
從以上技術方案可以看出,本發明實施例具有以下優點:本發明實施例中,對APK文件中的待壓縮文件采用基于7Z函數庫實現的Deflate壓縮算法進行壓縮,從而得到壓縮率大于采用基于ZLIB函數庫實現的Deflate壓縮算法壓縮的APK文件,減小了APK安裝包的體積,減少了傳輸過程中產生的流量,節省了網絡傳輸流量資源,降低了成本。
附圖說明
圖1為本發明實施例中安卓安裝包壓縮方法一個流程示意圖;
圖2為本發明實施例中安卓安裝包壓縮方法另一個流程示意圖;
圖3為本發明實施例中壓縮裝置一個結構示意圖;
圖4為本發明實施例中壓縮裝置另一個結構示意圖。
具體實施方式
下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發明一部分實施例,而不是全部的實施例。基于本發明中的實施例,本領域技術人員在沒有做出創造性勞動前提下所獲得的所有其他實施例,都屬于本發明保護的范圍。
本發明實施例提供了安卓安裝包壓縮方法和裝置,用于減小APK安裝包的體積,減少傳輸過程中產生的流量,節省網絡傳輸流量資源,降低成本。
本發明中術語“7Z函數庫”為一款開源的壓縮算法函數庫,7Z函數庫為7Z壓縮時使用的函數庫,其中7Z為一種主流高效的可以使用多種壓縮算法進行數據壓縮的壓縮格式,由于7z已公開了結構編輯功能,所以它可以支持任何一種壓縮算法。
本發明中術語“Deflate壓縮算法”為一種ZIP壓縮算法名稱,Deflate是同時使用了LZ77算法與哈夫曼編碼(Huffman Coding)的一個無損數據壓縮算法。它最初是由Phil Katz為他的PKZIP歸檔工具第二版所定義的,后來定義在RFC 1951規范中,目前APK開發包生成過程中也一般默認使用Deflate壓縮算法。
本發明中術語“ZLIB函數庫”為一款Android默認使用的壓縮算法函數庫。
需要說明的是,由于Android底層是基于Linux系統,Linux系統廣泛采用ZLIB函數庫作為壓縮庫,因此,Android系統的打包工具也默認使用ZLIB函數庫來進行文件的壓縮。而本發明突破常規思維和技術壁壘,經過反復試驗,重新采用7Z函數庫來進行APK文件的壓縮,通過實際壓縮結果的對比,可以使得APK文件的壓縮比提高2%到10%。
在實際應用中,可以在APK文件的不同階段采用7Z函數庫來對APK文 件進行壓縮:一個是在APK文件的生成階段,直接采用7Z函數庫對APK文件進行壓縮,生成APK文件;另一個是在已經采用ZLIB函數庫作為壓縮庫得到APK文件后,再采用7Z函數庫重新對采用ZLIB函數庫得到的壓縮文件進行重壓縮,得到重壓縮完成的APK文件。下面分別在不同的實施例對這兩種情況進行描述:
一、在APK文件的生成階段:
請參閱圖1,本發明實施例中安卓安裝包壓縮方法一個實施例包括:
101、在APK文件生成階段,確定需要添加到APK文件中的待壓縮文件;
APK文件中包含多個文件,為了節省APK的存儲空間和網絡傳輸流量,要對加入APK文件中的部分文件進行壓縮,而哪些文件需要壓縮與Android系統讀取和運行APK機制有關,APK打包時決定某些文件不能壓縮,否則在安裝時無法讀取或者安裝后無法運行,而另一些文件則需要壓縮。
本步驟中,在APK文件生成階段,壓縮裝置確定需要添加到APK文件中的壓縮文件。
可選的,壓縮裝置可以采用安卓開發包中的自動化打包工具aapt確定需要添加到APK文件中的待壓縮文件;
可選的,壓縮裝置還可以讀取預置存儲的待壓縮文件列表來確定需要添加到APK文件中的待壓縮文件。
還可以有其他的確定待壓縮文件的方式,具體選擇何種方式可以根據實際情況確定,此處不作限定。
102、采用基于7Z函數庫實現的Deflate壓縮算法,對所述待壓縮文件進行壓縮,得到壓縮完成的文件;
壓縮裝置確定待壓縮文件后,采用基于7Z函數庫實現的Deflate壓縮算法,對該待壓縮文件進行壓縮,得到壓縮完成的文件。
可以理解的是,根據實際應用情況,可以對一個個文件分別壓縮,也可以同時壓縮多個文件,此處不作限定。
103、合成所述壓縮完成的文件以及需要添加到APK文件中的不需要壓縮的文件,生成APK文件。
壓縮裝置將待壓縮文件采用7Z函數庫實現的Deflate壓縮算法壓縮完成后,合成壓縮完成的文件以及需要添加到APK文件中的不需要壓縮的文件,,生成APK文件。
可以理解的是,為了盡可能的達到最大的壓縮率,對于任一個確定的APK,哪些文件需要添加到APK文件中,需要添加到APK文件中的文件哪些需要壓縮,哪些不需要壓縮,都是確定的。具體的,可以由aapt工具確定。
本發明實施例中,壓縮裝置對APK文件中的待壓縮文件采用基于7Z函數庫實現的Deflate壓縮算法進行壓縮,從而得到壓縮率大于采用基于ZLIB函數庫實現的Deflate壓縮算法壓縮的APK文件,減小了APK安裝包的體積,減少了傳輸過程中產生的流量,節省了網絡傳輸流量資源,降低了成本。
上面實施例中,采用基于7Z函數庫實現的Deflate壓縮算法,對所述待壓縮文件進行壓縮,在實際應用中,壓縮時還可以選擇多個壓縮參數的取值:
基于7Z函數庫實現的Deflate壓縮算法中,影響APK安裝包的壓縮比有以下參數:
1、壓縮級別:
壓縮級別有6種,為{0,1,3,5,7,9},其中0表示不壓縮,9表示極限壓縮,數字越大,壓縮級別越高。
2、NumFastBytes:
表示設置Deflate編碼器的單詞大小,數字范圍為3到258,為另一個影響壓縮比的參數,增大數字,壓縮比略有提高。
3、NumPasses:
表示設置Deflate編碼器的傳送大小,數字范圍為1到15,為另一個影響壓縮比的參數,增大數字,壓縮比略有提高;
作為本發明實施例中安卓安裝包壓縮方法另一個實施例,上面實施例中,采用基于7Z函數庫實現的Deflate壓縮算法,對所述待壓縮文件進行壓縮,具體可以為,選擇壓縮級別為9,NumFastBytes為128、195、256或258中任一個,NumPasses為15,對所述待壓縮文件進行壓縮。
可以理解的是,根據實際應用情況,壓縮時也可以將上述參數取其他值,此處不作限定。需要說明的是,只有在基于7Z函數庫實現的Deflate壓縮算 法中有NumFastBytes和NumPasses這兩個影響壓縮比的參數,在基于ZLIB函數庫實現的Deflate壓縮算法中是沒有的。
本發明實施例中,通過選取影響壓縮比的參數的取值,使得壓縮得到的APK文件體積更小,進一步的減少了傳輸過程中產生的流量,節省了網絡傳輸流量資源,降低了成本。
為便于理解,下面以一具體應用場景對本發明實施例中安卓安裝包壓縮方法進行具體描述:
在APK文件生成階段,壓縮裝置確定需要添加到APK文件中的10個文件中有4個文件不能壓縮,壓縮后就會導致生成的APK安裝后無法運行,則確定這4個文件為不需要壓縮的文件,另外6個文件為待壓縮文件;
壓縮裝置采用基于7Z函數庫實現的Deflate壓縮算法,選擇壓縮級別為9,NumFastBytes為258,NumPasses為15,依次分別壓縮這6個待壓縮文件,得到6個壓縮完成的文件;
將這6個壓縮完成的文件和4個不需要壓縮的文件打包,則生成了APK文件,該APK文件相對于采用基于ZLIB函數庫實現的Deflate壓縮算法進行壓縮的APK文件,壓縮比更小。
二、在APK文件的生成后:
請參閱圖2,本發明實施例中安卓安裝包壓縮方法另一個實施例包括:
201、確定APK文件中的已壓縮文件和未壓縮文件;
其中,所述已壓縮文件為被采用基于ZLIB函數庫實現的Deflate壓縮算法壓縮過的文件,所述未壓縮文件為沒有被壓縮的文件;
對于采用基于ZLIB函數庫實現的Deflate壓縮算法壓縮完成的APK文件,壓縮裝置確定該APK文件中的已壓縮文件和未壓縮文件。
可以理解的是,在實際應用中,壓縮裝置可以對于該APK文件中的每個文件,依次讀取確定是否為已壓縮文件,確定為已壓縮文件后將該文件自行后續步驟,直到讀取完APK文件中的全部文件;壓縮裝置也可以先確定該APK文件中的全部已壓縮文件,再執行后續步驟,此處不作限定。
202、解壓所述已壓縮文件,并采用基于7Z函數庫實現的Deflate壓縮算法,對解壓后的文件重新壓縮,得到重壓縮完成的文件;
壓縮裝置確定APK文件中的已壓縮文件后,解壓該已壓縮文件,并采用基于7Z函數庫實現的Deflate壓縮算法,對該解壓后的文件重新壓縮,得到重壓縮完成的文件。
可以理解的是,若解壓縮時,是一個個文件依次確定是否已壓縮,依次進行解壓縮,則重壓縮時,可以對解壓縮后的文件依次重壓縮;若解壓縮時,是先確定全部的已壓縮文件,再進行解壓縮,則重壓縮時,可以一個個依次壓縮,也可以多個文件一起壓縮,此處不作限定。
203、合成所述重壓縮完成的文件和所述未壓縮文件,生成重壓縮后的APK文件。
壓縮裝置合成重壓縮完成的文件和未壓縮文件,生成重壓縮后的APK文件。
本發明實施例中,壓縮裝置對已生成的APK文件采用基于7Z函數庫實現的Deflate壓縮算法進行重新壓縮,得到體積更小的APK文件,減小了APK安裝包的體積,減少了傳輸過程中產生的流量,節省了網絡傳輸流量資源,降低了成本。
上面實施例中,采用基于7Z函數庫實現的Deflate壓縮算法,對解壓后的文件重新壓縮,在實際應用中,壓縮時還可以選擇多個壓縮參數的取值:
可選的,作為本發明實施例中安卓安裝包壓縮方法另一個實施例,圖2所示實施例中:采用基于7Z函數庫實現的Deflate壓縮算法,對解壓后的文件重新壓縮,具體可以包括:采用基于7Z函數庫實現的Deflate壓縮算法,選擇壓縮級別為9,NumFastBytes為128、195、256或258中任一個,NumPasses為15,對解壓后的文件重新壓縮。
可以理解的是,根據實際應用情況,重壓縮時也可以將上述參數取其他值,此處不作限定。需要說明的是,只有在基于7Z函數庫實現的Deflate壓縮算法中有NumFastBytes和NumPasses這兩個影響壓縮比的參數,在基于ZLIB函數庫實現的Deflate壓縮算法中是沒有的。
本發明實施例中,通過選取影響壓縮比的參數的取值,使得重壓縮得到的APK文件體積更小,進一步的減少了傳輸過程中產生的流量,節省了網絡傳輸流量資源,降低了成本。
為便于理解,下面以另一具體應用場景對本發明實施例中安卓安裝包壓縮方法進行具體描述:
一個采用基于ZLIB函數庫實現的Deflate壓縮算法壓縮得到的APK文件中,存在7個已壓縮文件和3個未壓縮文件;
壓縮裝置按文件默認順序讀取其中的一個文件,判斷該文件是否為已壓縮文件,若不為已壓縮文件,按該默認順序讀取下一個;若為已壓縮文件,解壓該文件,并采用基于7Z函數庫實現的Deflate壓縮算法對解壓得到的文件進行重壓縮,將重壓縮后的文件添加到新的APK文件中;
如此循環,直到讀取完全部的10個文件,最終得到采用基于7Z函數庫實現的Deflate壓縮算法重壓縮的APK文件,該APK文件相對于采用基于ZLIB函數庫實現的Deflate壓縮算法進行壓縮的APK文件,壓縮比更小。
下面對本發明實施例中的壓縮裝置進行描述,請參閱圖3,本發明實施例中壓縮裝置一個實施例包括:
第一確定模塊301,用于在APK文件生成階段,確定需要添加到APK文件中的待壓縮文件;
壓縮模塊302,用于采用基于7Z函數庫實現的Deflate壓縮算法,對所述第一確定模塊301確定的待壓縮文件進行壓縮,得到壓縮完成的文件;
第一生成模塊303,用于合成所述壓縮模塊302壓縮完成的文件以及要添加到APK文件中的不需要壓縮的文件,生成APK文件。
本發明實施例中,壓縮模塊302對APK文件中的待壓縮文件采用基于7Z函數庫實現的Deflate壓縮算法進行壓縮,從而得到壓縮率大于采用基于ZLIB函數庫實現的Deflate壓縮算法壓縮的APK文件,減小了APK安裝包的體積,減少了傳輸過程中產生的流量,節省了網絡傳輸流量資源,降低了成本。
可選的,作為本發明實施例中壓縮裝置另一個實施例,上述第一確定模塊301具體用于,在APK文件生成階段,采用安卓開發包中的自動化打包工具aapt確定所述需要添加到APK文件中的待壓縮文件。
本發明實施例中,采用aapt工具確定待壓縮文件,使得確定的結果更加準確,確定的過程更加快速,提高了生產APK的速率。
可選的,作為本發明實施例中壓縮裝置另一個實施例,上述壓縮模塊302 具體用于,采用基于7Z函數庫實現的Deflate壓縮算法,選擇壓縮級別為9,NumFastBytes為128、195、256或258中任一個,NumPasses為15,對所述待壓縮文件進行壓縮,得到壓縮完成的文件。
本發明實施例中,壓縮模塊302通過選取影響壓縮比的參數的取值,使得壓縮得到的APK文件體積更小,進一步的減少了傳輸過程中產生的流量,節省了網絡傳輸流量資源,降低了成本。
請參閱圖4,本發明實施例中壓縮裝置另一個實施例包括:
第二確定模塊401,用于確定APK文件中的已壓縮文件和未壓縮文件,所述已壓縮文件為被采用基于ZLIB函數庫實現的Deflate壓縮算法壓縮過的文件,所述未壓縮文件為所述APK文件中沒有被壓縮的文件;
重壓縮模塊402,用于解壓所述第二確定模塊401確定的已壓縮文件,并采用基于7Z函數庫實現的Deflate壓縮算法,對解壓后的文件重新壓縮,得到重壓縮完成的文件;
第二生成模塊403,用于合成所述重壓縮模塊402重壓縮完成的文件和所述第二確定模塊401確定的未壓縮文件,生成重壓縮后的APK文件。
本發明實施例中,重壓縮模塊402對已生成的APK文件采用基于7Z函數庫實現的Deflate壓縮算法進行重新壓縮,得到體積更小的APK文件,減小了APK安裝包的體積,減少了傳輸過程中產生的流量,節省了網絡傳輸流量資源,降低了成本。
可選的,作為本發明實施例中壓縮裝置另一個實施例,上述重壓縮模塊402具體用于,解壓所述第二確定模塊401確定的已壓縮文件,并采用基于7Z函數庫實現的Deflate壓縮算法,選擇壓縮級別為9,NumFastBytes為128、195、256或258中任一個,NumPasses為15,對解壓后的文件重新壓縮,得到重壓縮完成的文件。
本發明實施例中,重壓縮模塊402通過選取影響壓縮比的參數的取值,使得重壓縮得到的APK文件體積更小,進一步的減少了傳輸過程中產生的流量,節省了網絡傳輸流量資源,降低了成本。
所屬領域的技術人員可以清楚地了解到,為描述的方便和簡潔,上述描述的系統,裝置和單元的具體工作過程,可以參考前述方法實施例中的對應 過程,在此不再贅述。
在本申請所提供的幾個實施例中,應該理解到,所揭露的系統,裝置和方法,可以通過其它的方式實現。例如,以上所描述的裝置實施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現時可以有另外的劃分方式,例如多個單元或組件可以結合或者可以集成到另一個系統,或一些特征可以忽略,或不執行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機械或其它的形式。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網絡單元上。可以根據實際的需要選擇其中的部分或者全部單元來實現本實施例方案的目的。
另外,在本發明各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以采用硬件的形式實現,也可以采用軟件功能單元的形式實現。
所述集成的單元如果以軟件功能單元的形式實現并作為獨立的產品銷售或使用時,可以存儲在一個計算機可讀取存儲介質中。基于這樣的理解,本發明的技術方案本質上或者說對現有技術做出貢獻的部分或者該技術方案的全部或部分可以以軟件產品的形式體現出來,該計算機軟件產品存儲在一個存儲介質中,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網絡設備等)執行本發明各個實施例所述方法的全部或部分步驟。而前述的存儲介質包括:U盤、移動硬盤、只讀存儲器(ROM,Read-Only Memory)、隨機存取存儲器(RAM,Random Access Memory)、磁碟或者光盤等各種可以存儲程序代碼的介質。
以上所述,以上實施例僅用以說明本發明的技術方案,而非對其限制;盡管參照前述實施例對本發明進行了詳細的說明,本領域的普通技術人員應當理解:其依然可以對前述各實施例所記載的技術方案進行修改,或者對其中部分技術特征進行等同替換;而這些修改或者替換,并不使相應技術方案 的本質脫離本發明各實施例技術方案的精神和范圍。