TWI754658B - 應用程序的壓縮方法和裝置 - Google Patents
應用程序的壓縮方法和裝置 Download PDFInfo
- Publication number
- TWI754658B TWI754658B TW106126272A TW106126272A TWI754658B TW I754658 B TWI754658 B TW I754658B TW 106126272 A TW106126272 A TW 106126272A TW 106126272 A TW106126272 A TW 106126272A TW I754658 B TWI754658 B TW I754658B
- Authority
- TW
- Taiwan
- Prior art keywords
- file
- compressed
- application
- main
- function
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44568—Immediately runnable code
- G06F9/44578—Preparing or optimising for loading
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/70—Type of the data to be coded, other than image and sound
- H03M7/702—Software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/174—Redundancy elimination performed by the file system
- G06F16/1744—Redundancy elimination performed by the file system using compression, e.g. sparse files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
- G06F16/258—Data format conversion from or to a database
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44568—Immediately runnable code
- G06F9/44584—Portable applications, i.e. making applications self-contained, e.g. U3 standard
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/3084—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
- H03M7/3088—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing the use of a dictionary, e.g. LZ78
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/3084—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
- H03M7/3086—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing a sliding window, e.g. LZ77
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/60—General implementation details not specific to a particular type of compression
- H03M7/6052—Synchronisation of encoder and decoder
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Stored Programmes (AREA)
Abstract
本案公開了一種推薦網路物件的方法和裝置,其中,所述方法包括:採用預設壓縮演算法對源應用程式中的被調檔進行壓縮,將主調檔對被調檔的調用修改為對所述預設壓縮演算法對應的解壓功能檔的調用,封裝修改後的主調檔、壓縮後的被調檔和解壓功能檔,得到壓縮應用程式,如果採用比原有壓縮演算法壓縮率更高的演算法,可以提高壓縮應用程式的壓縮率,得到更小體積的應用程式,從而使得該應用程式運行時可以調用能夠解壓預設壓縮演算法的演算法進行解壓,從而可以解決了原先對壓縮率高的演算法無法相容的問題,可以讓應用程式本身具備解壓壓縮率高的壓縮演算法的功能,保證採用更高壓縮率的應用程式的正常運行。
Description
本案係關於應用程式壓縮技術領域,具體關於一種應用程式的壓縮方法和裝置。
APK(Android application package,安卓應用程式)是Android作業系統使用的一種應用程式檔案格式,用於分發和安裝移動應用及中介軟體。一個Android應用程式的代碼想要在Android設備上運行,必須先進行編譯,然後被打包成為一個被Android系統所能識別的檔才可以被運行,而這種能被Android系統識別並運行的檔案格式便是“APK”。一個APK檔內包含被編譯的代碼檔,檔資源,證書,和清單檔。
APK體積的減少是商業化應用不斷優化的目標之一,減少APK應用的體積主要是透過本身應用功能,邏輯框架的修改來達到其目的。但如果當一個APK應用在本身業務邏輯上的取捨已經達到最優,還可以透過對已經產生的APK應用重新壓縮,或者修改其視頻,音訊,圖片資源的大小來進一步的減少體積。
在產生APK應用程式的時候,預設對其應用中的so檔 採用的壓縮演算法是deflate演算法。而當APK應用安裝到Android手機上以後,手機在運行這個APK應用的時候,當載入APK應用程式裡面的so檔的時候,需要首先對其進行解壓。Android系統中內置的解壓演算法也是透過deflate演算法,完成載入。
鑒於Android系統的限制,無法改變其原有默認的deflate演算法,也就沒有辦法直接使用更高壓縮率的演算法來進行壓縮,主要原因就是APK應用在安裝到Android系統以後,Android系統不支援更高壓縮率的其他演算法來解壓對應演算法壓縮過的APK應用中的so文件。
鑒於上述問題,提出了本案以便提供一種克服上述問題或者至少部分地解決上述問題的一種應用程式的壓縮方法和裝置。
依據本案的一個方面,提供了一種應用程式的壓縮方法,包括:採用預設壓縮演算法對源應用程式中的被調檔進行壓縮;將主調檔對被調檔的調用修改為對所述預設壓縮演算法對應的解壓功能檔的調用,所述解壓功能檔用於解壓和載入壓縮後的被調檔;封裝修改後的主調檔、壓縮後的被調檔和解壓功能檔,得到壓縮應用程式。
可選地,在所述採用預設壓縮演算法對源應用程式中的被調檔進行壓縮之前,所述方法還包括:查找所述源應用程式中可採用預設壓縮演算法進行壓縮的被調檔。
可選地,所述被調文件為動態連結程式庫檔,所述主調檔為調用所述動態連結程式庫檔的可執行檔;所述查找所述源應用程式中可採用預設壓縮演算法進行壓縮的被調檔包括:在所述源應用程式包括的多種類型的檔中查找動態連結程式庫檔。
可選地,所述方法還包括:在所述主調檔的初始化物件中增加解壓功能檔。
可選地,所述方法還包括:將所述解壓功能檔添加至歸屬於應用程式的主框架的主調檔。
可選地,所述在所述主調檔的初始化物件中增加解壓功能檔包括:在所述主調檔的程式入口位置查找運行的首個函數;在所述首個函數的調用物件中增加對應所述預設壓縮演算法的解壓功能檔。
可選地,在所述在所述主調檔的初始化物件中增加解壓功能檔之前,所述方法還包括:從所述源應用程式的應用全域設定檔中,提取所述源應用程式的程式入口位置的入口類名稱。
可選地,所述方法還包括:反編譯對應的主調檔。
可選地,所述方法還包括:確定所述被調檔之間的依賴關係,並產生記錄依賴關係的依賴檔。
可選地,所述封裝修改後的主調檔、壓縮後的被調檔和解壓功能檔,得到壓縮應用程式包括:封裝所述依賴檔、修改後的主調檔、壓縮後的被調檔和解壓功能檔,得到壓縮應用程式。
可選地,所述封裝修改後的主調檔、壓縮後的被調檔和解壓功能檔,得到壓縮應用程式包括:對修改後的主調檔進行壓縮,並替換至修改前的主調檔所處位置;對所述壓縮後的被調檔和解壓功能檔進行壓縮,並添加至所述源應用程式中,得到壓縮應用程式。
可選地,所述封裝修改後的主調檔、壓縮後的被調檔和解壓功能檔,得到壓縮應用程式還包括:提取歸屬於應用程式的主框架的主調檔並進行壓縮,得到壓縮後的主框架檔,所述主框架的主調檔中已添加所述解壓功能檔;採用壓縮後的主框架檔替換所述源應用程式原有的主框架檔。
可選地,在所述封裝修改後的主調檔、壓縮後的被調檔和解壓功能檔,得到壓縮應用程式之後,所述方法還包 括:對所述主調檔在應用程式中所屬的功能元件進行重新簽名。
可選地,在所述對所述主調檔在應用程式中所屬的功能元件進行重新簽名之前,所述方法還包括:判定所述主調檔在應用程式中所屬的功能元件具有原始簽名。
可選地,在所述採用預設壓縮演算法對源應用程式中的被調檔進行壓縮之前,所述方法還包括:解壓所述源應用程式,並查找主調檔和被調檔。
可選地,所述方法還包括:對所述壓縮應用程式進行簽名。
可選地,所述預設壓縮演算法為LZMA演算法。
依據本案的另一個方面,提供了一種應用程式的解壓方法,包括:解封裝壓縮應用程式得到主調檔、採用預設壓縮演算法壓縮的被調檔和所述預設壓縮演算法對應的解壓功能檔;所述主調檔定義為調用所述解壓功能檔;在所述主調檔調用所述被調檔時,調用解壓功能檔對壓縮的被調檔進行解壓和載入。
可選地,在所述調用解壓功能檔對壓縮的被調檔進行解壓和載入之前,所述方法還包括:調用主框架的主調檔初始化壓縮應用程式中解壓功能檔。
可選地,在所述調用解壓功能檔對壓縮的被調檔進行解壓和載入之前,所述方法包括:判定壓縮的被調檔中存在主調檔所需調用的被調文件。
可選地,所述方法還包括:若不存在主調檔所需調用的被調檔,則從當前作業系統查找被調檔或從網路下載所述被調檔。
可選地,在所述調用解壓功能檔對壓縮的被調檔進行解壓和載入之前,所述方法包括:判定主調檔所需調用的被調檔依賴於另一被調檔;調用解壓功能檔從壓縮的被調檔解壓所述另一被調檔;調用解壓功能檔從壓縮的被調檔解壓主調檔所需調用的被調檔。
根據本案的另一方面,提供了一種應用程式的壓縮裝置,包括:被調檔案壓縮模組,用於採用預設壓縮演算法對源應用程式中的被調檔進行壓縮;調用修改模組,用於將主調檔對被調檔的調用修改為對所述預設壓縮演算法對應的解壓功能檔的調用,所述解壓功能檔用於解壓和載入壓縮後的被調檔;應用程式封裝模組,用於封裝修改後的主調檔、壓縮後的被調檔和解壓功能檔,得到壓縮應用程式。
可選地,所述裝置還包括: 被調檔查找模組,用於在所述採用預設壓縮演算法對源應用程式中的被調檔進行壓縮之前,查找所述源應用程式中可採用預設壓縮演算法進行壓縮的被調檔。
可選地,所述被調檔為動態連結程式庫檔,所述主調檔為調用所述動態連結程式庫檔的可執行檔;所述被調檔查找模組,具體用於在所述源應用程式包括的多種類型的檔中查找動態連結程式庫檔。
可選地,所述裝置還包括:功能檔增加模組,用於在所述主調檔的初始化物件中增加解壓功能檔。
可選地,所述裝置還包括:功能檔添加模組,用於將所述解壓功能檔添加至歸屬於應用程式的主框架的主調檔。
可選地,所述功能檔增加模組包括:函數查找子模組,用於在所述主調檔的程式入口位置查找運行的首個函數;功能檔增加子模組,用於在所述首個函數的調用物件中增加對應所述預設壓縮演算法的解壓功能檔。
可選地,所述裝置還包括:入口類名稱提取子模組,用於在所述在所述主調檔的初始化物件中增加解壓功能檔之前,從所述源應用程式的應用全域設定檔中,提取所述源應用程式的程式入口位置的入口類名稱。
可選地,所述裝置還包括: 主調檔反編譯模組,用於反編譯對應的主調檔。
可選地,所述裝置還包括:依賴檔產生模組,用於確定所述被調檔之間的依賴關係,並產生記錄依賴關係的依賴檔。
可選地,所述應用程式封裝模組,具體用於封裝所述依賴檔、修改後的主調檔、壓縮後的被調檔和解壓功能檔,得到壓縮應用程式。
可選地,所述應用程式封裝模組包括:主調檔案壓縮子模組,用於對修改後的主調檔進行壓縮,並替換至修改前的主調檔所處位置;壓縮添加子模組,用於對所述壓縮後的被調檔和解壓功能檔進行壓縮,並添加至所述源應用程式中,得到壓縮應用程式。
可選地,所述應用程式封裝模組還包括:主框架檔案壓縮子模組,用於提取歸屬於應用程式的主框架的主調檔並進行壓縮,得到壓縮後的主框架檔,所述主框架的主調檔中已添加所述解壓功能檔;主框架檔替換子模組,用於採用壓縮後的主框架檔替換所述源應用程式原有的主框架檔。
可選地,所述裝置還包括:元件簽名模組,用於在所述封裝修改後的主調檔、壓縮後的被調檔和解壓功能檔,得到壓縮應用程式之前,對所述主調檔在應用程式中所屬的功能元件進行重新簽名。
可選地,所述裝置還包括: 原始簽名判定模組,用於在所述對所述主調檔在應用程式中所屬的功能元件進行重新簽名之前,判定所述主調檔在應用程式中所屬的功能元件具有原始簽名。
可選地,所述裝置還包括:源應用程式解壓模組,用於在所述採用預設壓縮演算法對源應用程式中的被調檔進行壓縮之前,解壓所述源應用程式,並查找主調檔和被調檔。
可選地,所述裝置還包括:應用程式簽名模組,用於對所述壓縮應用程式進行簽名。
可選地,所述預設壓縮演算法為LZMA演算法。
根據本案的另一方面,提供了一種應用程式的解壓裝置,包括:應用程式解封裝模組,用於解封裝壓縮應用程式得到主調檔、採用預設壓縮演算法壓縮的被調檔和所述預設壓縮演算法對應的解壓功能檔;所述主調檔定義為調用所述解壓功能檔;解壓和載入模組,用於在所述主調檔調用所述被調檔時,調用解壓功能檔對壓縮的被調檔進行解壓和載入。
可選地,所述裝置還包括:功能檔初始化模組,用於在所述調用解壓功能檔對壓縮的被調檔進行解壓和載入之前,調用主框架的主調檔初始化壓縮應用程式中解壓功能檔。
可選地,所述裝置包括: 被調檔存在判定模組,用於在所述調用解壓功能檔對壓縮的被調檔進行解壓和載入之前,判定壓縮的被調檔中存在主調檔所需調用的被調檔。
可選地,所述裝置還包括:查找下載模組,用於若不存在主調檔所需調用的被調檔,則從當前作業系統查找被調檔或從網路下載所述被調檔。
可選地,所述裝置包括:依賴判定模組,用於在所述調用解壓功能檔對壓縮的被調檔進行解壓和載入之前,判定主調檔所需調用的被調檔依賴於另一被調檔;依賴檔解壓模組,用於調用解壓功能檔從壓縮的被調檔解壓所述另一被調檔;檔解壓模組,用於調用解壓功能檔從壓縮的被調檔解壓主調檔所需調用的被調檔。
依據本案實施例,首先採用預設壓縮演算法對源應用程式中的被調檔進行壓縮,例如採用比原有壓縮演算法壓縮率更高的演算法,可以提高壓縮應用程式的壓縮率,得到更小體積的應用程式。進一步,將主調檔對被調檔的調用修改為對所述預設壓縮演算法對應的解壓功能檔的調用,封裝修改後的主調檔、壓縮後的被調檔和解壓功能檔,得到壓縮應用程式,從而使得該應用程式運行時可以調用能夠解壓預設壓縮演算法的演算法進行解壓,從而可以解決了原先對壓縮率高的演算法無法相容的問題,可以 讓應用程式本身具備解壓壓縮率高的壓縮演算法的功能,保證採用更高壓縮率的應用程式的正常運行。
上述說明僅是本案技術方案的概述,為了能夠更清楚瞭解本案的技術手段,而可依照說明書的內容予以實施,並且為了讓本案的上述和其它目的、特徵和優點能夠更明顯易懂,以下特舉本案的具體實施方式。
501‧‧‧被調檔壓縮模組
502‧‧‧調用修改模組
503‧‧‧應用程式封裝模組
601‧‧‧應用程式解封裝模組
602‧‧‧解壓和載入模組
透過閱讀下文優選實施方式的詳細描述,各種其他的優點和益處對於本領域普通技術人員將變得清楚明瞭。附圖僅用於示出優選實施方式的目的,而並不認為是對本案的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:圖1示出了根據本案實施例一的一種應用程式的壓縮方法實施例的流程圖;圖2示出了根據本案實施例二的一種應用程式的壓縮方法實施例的流程圖;圖3示出了根據本案實施例三的一種應用程式的解壓方法實施例的流程圖;圖4示出了根據本案實施例四的一種應用程式的解壓方法實施例的流程圖;圖5示出了本案實施例的一個示例中壓縮過程示意圖;圖6示出了本案實施例的另一個示例中解壓過程示意 圖;圖7示出了根據本案實施例五的一種應用程式的壓縮裝置的結構框圖;圖8示出了根據本案實施例六的一種應用程式的解壓裝置的結構框圖。
下面將參照附圖更詳細地描述本公開的示例性實施例。雖然附圖中顯示了本公開的示例性實施例,然而應當理解,可以以各種形式實現本公開而不應被這裡闡述的實施例所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,並且能夠將本公開的範圍完整的傳達給本領域的技術人員。
本案可以應用在應用程式的壓縮以及應用程式的解壓中,在開發應用程式的時候都需要對應用程式進行優化,從方方面面將應用程式的大小儘量優化。例如在Android作業系統下使用的APK應用程式,在產生APK應用程式的時候,可以對其應用中的so檔採用壓縮演算法進行壓縮,然後在將壓縮後的檔封裝成APK應用程式,這樣就可以實現對應用程式的壓縮,減少了應用的體積。
本案中,源應用程式為需要透過主調檔調用被調檔來完成某項或多項特定工作的電腦程式,例如Android作業系統下的APK應用程式就是源應用程式。主調檔為從源應用程式中提取出來的可執行代碼檔,執行主調檔的代碼可 以調用其中的函數來載入被調檔,例如APK應用程式中提取的dex檔就是主調檔。被調檔為從源應用程式中提取出來的在程式運行過程中需要透過主調檔載入的代碼檔,例如APK應用程式中提取的so檔就是被調檔。
本案中,預設壓縮演算法為一種資料壓縮演算法,具體可以為任意適用的壓縮演算法,為產生好的技術效果,優選為壓縮率較高的壓縮演算法,本案對此不做限制。
參照圖1,示出了根據本案實施例一的一種應用程式的壓縮方法實施例的流程圖,該方法具體可以包括以下步驟:
步驟101,採用預設壓縮演算法對源應用程式中的被調檔進行壓縮。
源應用程式中有至少一個被調檔,採用預設壓縮演算法對所有或部分被調檔進行壓縮,具體可以將被調檔案壓縮為一個或多個壓縮檔,本案對此可以不作限制。
例如,從APK應用程式中提取出所有的so檔,將所有的so檔使用LZMA(Lempel-Ziv-Markov chain-Algorithm的縮寫)演算法壓縮到一個壓縮檔,也就是壓縮後的被調檔。
步驟102,將主調檔對被調檔的調用修改為對所述預設壓縮演算法對應的解壓功能檔的調用。
解壓功能檔用於解壓和載入壓縮後的被調檔,是指標對預設壓縮演算法預先編寫的可以解壓壓縮後的被調檔,並載入被調檔的代碼的檔。解壓功能檔也是一種主調檔可 以調用的被調檔。
由於被調檔已經被預設壓縮演算法壓縮,主調檔中原有的對被調檔的調用就無法成功執行,所以要對主調檔原有的邏輯進行修改。將主調檔對被調檔的調用修改為對預設壓縮演算法對應的解壓功能檔的調用。如此修改後在執行主調檔的代碼時,就可以載入能夠解壓預設壓縮演算法壓縮的被調檔的解壓功能檔,繼而可以得到原有的被調檔。
例如,在APK應用程式的主dex檔中,將原有調用所有so檔修改為調用解壓並載入LZMA演算法壓縮的so文件。
步驟103,封裝修改後的主調檔、壓縮後的被調檔和解壓功能檔,得到壓縮應用程式。
壓縮應用程式為經預設壓縮演算法壓縮以及相應修改後的應用程式。將修改後的主調檔、壓縮後的被調檔和解壓功能檔重新封包,封裝為新的應用程式,得到壓縮應用程式。
例如,將修改後的dex文件、LZMA演算法壓縮的所有so檔、預先編譯好的能夠處理LZMA演算法的so檔重新封包進入APK應用程式,得到的APK應用程式就是壓縮應用程式。
依據本案實施例,首先採用預設壓縮演算法對源應用程式中的被調檔進行壓縮,例如採用比原有壓縮演算法壓縮率更高的演算法,可以提高壓縮應用程式的壓縮率,得 到更小體積的應用程式。進一步,將主調檔對被調檔的調用修改為對所述預設壓縮演算法對應的解壓功能檔的調用,封裝修改後的主調檔、壓縮後的被調檔和解壓功能檔,得到壓縮應用程式,從而使得該應用程式運行時可以調用能夠解壓預設壓縮演算法的演算法進行解壓,從而可以解決了原先對壓縮率高的演算法無法相容的問題,可以讓應用程式本身具備解壓壓縮率高的壓縮演算法的功能,保證採用更高壓縮率的應用程式的正常運行。
本案的一種優選實施例中,在所述步驟101中所述採用預設壓縮演算法對源應用程式中的被調檔進行壓縮之前,還可以包括:步驟104,查找所述源應用程式中可採用預設壓縮演算法進行壓縮的被調檔。
源應用程式中可以有多種檔,可採用預設壓縮演算法進行壓縮的被調檔為適用於預設壓縮演算法,且不會使程式無法正常運行的被調檔,從源應用程式的各種檔中查找到可採用預設壓縮演算法進行壓縮的被調檔。例如,可以從源應用程式中找到所有類型的檔,其中所有的so檔都是可以採用預設壓縮演算法進行壓縮的被調檔。
本案的一種優選實施例中,所述被調檔為動態連結程式庫檔,所述主調檔為調用所述動態連結程式庫檔的可執行檔;所述步驟104中所述查找所述源應用程式中可採用預設壓縮演算法進行壓縮的被調檔,具體可以包括:在所述源應用程式包括的多種類型的檔中查找動態連結程式庫檔。
動態連結程式庫檔,是一種不可執行的二進位程式檔,它允許程式共用執行特殊任務所必需的代碼和其他資源。可執行檔指的是可以由作業系統進行載入執行的檔。在不同的作業系統環境下,可執行檔的呈現方式不一樣。動態連結程式庫檔為一種可採用預設壓縮演算法進行壓縮的被調檔,從源應用程式包括的多種類型的檔中查找動態連結程式庫檔。
本案的一種優選實施例中,所述步驟103中所述封裝修改後的主調檔、壓縮後的被調檔和解壓功能檔,得到壓縮應用程式可以包括:子步驟S1,對修改後的主調檔進行壓縮,並替換至修改前的主調檔所處位置;子步驟S2,對所述壓縮後的被調檔和解壓功能檔進行壓縮,並添加至所述源應用程式中,得到壓縮應用程式。
對修改後的主調檔進行壓縮,具體可以使用任意適用的壓縮方式,本案對此不做限制。然後將壓縮後的主調檔替換到修改前的主調檔所處的檔位置,具體可以將修改前的主調檔刪除,再將壓縮後的主調檔放入修改前主調檔所處的檔位置。如果應用套裝程式含外掛程式,將修改後的主調檔案壓縮替換到其原有的外掛程式中。例如,將所有修改後dex檔案壓縮替換到其原有的外掛程式中。
對所述壓縮後的被調檔和解壓功能檔進行壓縮,壓縮至所述源應用程式中,得到壓縮應用程式。具體可以使用任意使用的壓縮方式,本案對此不作限制。
本案的一種優選實施例中,所述步驟103中所述封裝修改後的主調檔、壓縮後的被調檔和解壓功能檔,得到壓縮應用程式還可以包括:子步驟S3,提取歸屬於應用程式的主框架的主調檔並進行壓縮,得到壓縮後的主框架檔;子步驟S4,採用壓縮後的主框架檔替換所述源應用程式原有的主框架檔。
如果應用程式只有一個主調檔,那麼這個主調檔就是主框架的主調檔。如果應用程式是分為多個主調檔的,其中跟啟動相關的元件會被放入一個主調檔中,這個主調檔稱為主框架的主調檔,相應的其他主調檔可以被成為副主調檔,啟動時可以動態載入。
本案中,主框架的主調檔中已添加所述解壓功能檔。提取歸屬于應用程式的主框架的主調檔,進行壓縮,得到壓縮後的主框架檔。用壓縮後的主框架檔替換源應用程式原有的主框架檔,具體就是將壓縮後的主框架檔替換到應用套裝程式的根目錄中。
本案的一種優選實施例中,所述預設壓縮演算法為LZMA演算法。
LZMA(Lempel-Ziv-Markov chain-Algorithm的縮寫)是2001年以來得到發展的一個資料壓縮演算法,它用於7-Zip歸檔工具中的7z格式和Unix-like下的xz格式。它使用類似於LZ77的字典編碼機制,在一般的情況下壓縮率比bzip2為高,用於壓縮的字典檔大小可達4GB。
LZMA演算法是一種比Android系統預設的deflate演算法具有更高壓縮率的演算法,採用該種演算法可以為APK應用程式帶來更高的壓縮率。
參照圖2,示出了根據本案實施例二的一種應用程式的壓縮方法實施例的流程圖,該方法具體可以包括以下步驟:
步驟201,解壓所述源應用程式,並查找主調檔和被調檔。
源應用程式是一個被壓縮過的套裝程式,使用對應的解壓方式對源應用程式進行解壓,得到套裝程式中所有的檔,從中查找到所有的主調檔和被調檔。例如,解壓縮APK應用程式,找到所有的dex檔和so檔。
步驟202,確定所述被調檔之間的依賴關係,並產生記錄依賴關係的依賴檔。
根據查找到的被調檔,確定被調檔之間的依賴關係,記錄每個被調檔的依賴關係到依賴檔中。依賴檔為記錄所有被調檔依賴關係的檔。具體可以讀取每個被調檔執行的動態依賴表。動態依賴表為被調檔相互調用依賴關係的表。記錄每個被調檔的動態依賴表,產生所有被調檔載入的依賴表。
例如,將解析找到的APK應用程式的so檔,讀取每個so檔執行的動態依賴表,記錄每個so檔的動態依賴表,產生so載入的依賴表檔。
步驟203,採用預設壓縮演算法對源應用程式中的被 調檔進行壓縮。
在本案實施例中,具體實現方式與其他實施例描述一致,不做贅述。
步驟204,將所述解壓功能檔添加至歸屬於應用程式的主框架的主調檔。
將所述解壓功能檔添加至歸屬於應用程式的主框架的主調檔可以有多種方式,具體可以是添加外部調用代碼到主框架的主調檔中,使得主調檔可以外部調用解壓功能檔。還可以是將解壓功能檔的代碼添加到歸屬於應用程式的主框架的主調檔中,這樣在執行主調檔時就可以更快的執行解壓功能檔的解壓和載入壓縮後的被調檔的功能。
如果應用程式只有一個主調檔,那麼這個主調檔就是主框架的主調檔。如果應用程式是分為多個主調檔的,其中跟啟動相關的元件會被放入一個主調檔中,這個主調檔稱為主框架的主調檔。
例如,可以將初始化代碼、自訂對LZMA演算法壓縮的檔進行解壓的so檔,然後載入的代碼加入到APK應用程式的主dex檔中。
步驟205,在所述主調檔的初始化物件中增加解壓功能檔。
主調檔的初始化物件是指執行主調檔時初始要創建的實例,解壓功能檔增加到主調檔的初始化物件中。
本案的一種優選實施例中,所述步驟205中所述在所述主調檔的初始化物件中增加解壓功能檔可以包括: 子步驟S5,在所述主調檔的程式入口位置查找運行的首個函數;子步驟S6,在所述首個函數的調用物件中增加對應所述預設壓縮演算法的解壓功能檔。
從主調檔的程式入口查找運行的第一個函數,在首個函數的調用物件中,增加對應預設壓縮演算法的解壓功能檔。解壓功能檔為針對預設壓縮演算法預先編寫的可以解壓壓縮後的被調檔,並載入被調檔的代碼的檔。
本案的一種優選實施例中,在所述步驟205在所述在所述主調檔的初始化物件中增加解壓功能檔之前,還可以包括:
子步驟S7,從所述源應用程式的應用全域設定檔中,提取所述源應用程式的程式入口位置的入口類名稱。
應用全域設定檔是指整個應用程式的資訊描述檔,描述了應用程式中包含的元件、定義了應用程式運行的進程、聲明其他程式如果希望訪問本程式元件所需要的許可權、列出應用程式運行所需要連接的庫等。從應用全域設定檔中,提取源應用程式的程式入口位置的入口類名稱。例如,解析APK應用程式中的AndroidManifest.xml檔獲取程式入口點。
本案的一種優選實施例中,還可以包括:
子步驟S8,反編譯對應的主調檔。
在將所述解壓功能檔添加至歸屬於應用程式的主框架的主調檔時,需要先反編譯對應的主調檔,然後將解壓功 能檔添加到主調檔中。而且在將所有主調檔對被調檔的調用修改為對所述預設壓縮演算法對應的解壓功能檔的調用時,也需要先反編譯對應的主調檔,然後再修改調用。
例如,反編譯所有的dex檔,找到APK應用程式的dex檔中所有有關so檔載入的函數,將這些函數統一修改成加入的自訂在LZMA壓縮檔解壓so檔的載入代碼。
步驟206,將主調檔對被調檔的調用修改為對所述預設壓縮演算法對應的解壓功能檔的調用。
在本案實施例中,具體實現方式與其他實施例描述一致,不做贅述。
步驟207,對所述主調檔在應用程式中所屬的功能元件進行重新簽名。
簽名是指對應用程式進行數位簽章。由於對於一些作業系統,安裝的程式都要求必須簽名,所以這些系統要求所有的應用必須被證書進行數位簽章之後才能進行安裝。例如,Android系統透過該證書來確認應用的作者,該證書是不需要權威機構認證的,一般情況下應用都是用開發者的自簽章憑證,該證書是確保應用程式和應用程式作者之間建立信任關係,而不是用來決定使用者可以安裝哪些應用程式。
功能元件是指應用程式中的部分功能或模組,通常以外掛程式形式存在,對修改過的主調檔在應用程式中所屬的功能元件進行重新簽名。
本案的一種優選實施例中,在所述步驟207中所述對 所述主調檔在應用程式中所屬的功能元件進行重新簽名之前,還可以包括:
子步驟S9,判定所述主調檔在應用程式中所屬的功能元件具有原始簽名。
判斷主調檔在應用程式中所屬的功能元件是否具有原始簽名,具體可以查看該功能元件是否有簽名,並且判定主調檔在應用程式中所屬的功能元件具有原始簽名。
步驟208,封裝所述依賴檔、修改後的主調檔、壓縮後的被調檔和解壓功能檔,得到壓縮應用程式。
將依賴檔、修改後的主調檔、壓縮後的被調檔和解壓功能檔重新封包,封裝為新的應用程式,得到壓縮應用程式。具體封裝方式為任意適用的方式,本實施例對此不做限制。
例如,將so載入的依賴表檔、修改後的dex檔、LZMA演算法壓縮的所有so檔、預先編譯好的能夠處理LZMA演算法的so檔重新封包進入APK應用程式,得到的APK應用程式就是壓縮應用程式。
步驟209,對所述壓縮應用程式進行簽名。
由於對於一些作業系統,安裝的程式都要求必須簽名,所以這些系統要求所有的應用必須被證書進行數位簽章之後才能進行安裝。對壓縮應用程式進行簽名,以保證應用程式能被正常安裝運行。
依據本案實施例,首先解壓所述源應用程式,並查找主調檔和被調檔,確定所述被調檔之間的依賴關係,並產 生記錄依賴關係的依賴檔,採用預設壓縮演算法對源應用程式中的被調檔進行壓縮,例如採用比原有壓縮演算法壓縮率更高的演算法,可以提高壓縮應用程式的壓縮率,得到更小體積的應用程式。進一步,將所述解壓功能檔添加至歸屬於應用程式的主框架的主調檔,在所述主調檔的初始化物件中增加解壓功能檔,將主調檔對被調檔的調用修改為對所述預設壓縮演算法對應的解壓功能檔的調用,對所述主調檔在應用程式中所屬的功能元件進行重新簽名,封裝修改後的主調檔、壓縮後的被調檔和解壓功能檔,得到壓縮應用程式,對所述壓縮應用程式進行簽名,從而使得該應用程式運行時可以調用能夠解壓預設壓縮演算法的演算法進行解壓,從而可以解決了原先對壓縮率高的演算法無法相容的問題,可以讓應用程式本身具備解壓壓縮率高的壓縮演算法的功能,保證採用更高壓縮率的應用程式的正常運行。
參照圖3,示出了根據本案實施例三的一種應用程式的解壓方法實施例的流程圖,該方法具體可以包括以下步驟:
步驟301,解封裝壓縮應用程式得到主調檔、採用預設壓縮演算法壓縮的被調檔和所述預設壓縮演算法對應的解壓功能檔。
壓縮應用程式為經預設壓縮演算法壓縮以及相應修改後的應用程式。壓縮應用程式中有主調檔、採用預設壓縮演算法壓縮的被調檔和所述預設壓縮演算法對應的解壓功 能檔。其中,主調檔定義為調用解壓功能檔。具體而言,主調檔在應用程式壓縮時,將主調檔對被調檔的調用修改為對所述預設壓縮演算法對應的解壓功能檔的調用。
對壓縮應用程式進行解封裝,得到主調檔、採用預設壓縮演算法壓縮的被調檔和預設壓縮演算法對應的解壓功能檔。
例如,APK應用程式是一個壓縮應用程式,對該APK應用程式進行解壓,得到修改後的dex檔、LZMA演算法壓縮的所有so檔、預先編譯好的能夠處理LZMA演算法的so檔。
步驟302,在所述主調檔調用所述被調檔時,調用解壓功能檔對壓縮的被調檔進行解壓和載入。
主調檔調用被調檔時,調用解壓功能檔,執行解壓功能檔的代碼,對壓縮的被調檔進行解壓和載入。例如,載入處理LZMA演算法的so檔,執行處理LZMA演算法的so檔的代碼,將壓縮的各so檔解壓,並載入解壓出的so檔,完成對壓縮應用程式的解壓。
依據本案實施例,透過解封裝壓縮應用程式得到主調檔、採用預設壓縮演算法壓縮的被調檔和所述預設壓縮演算法對應的解壓功能檔,在所述主調檔調用所述被調檔時,調用解壓功能檔對壓縮的被調檔進行解壓和載入,從而使得壓縮的應用程式運行時可以調用能夠解壓預設壓縮演算法的演算法進行解壓,從而可以解決了原先對壓縮率高的演算法無法相容的問題,實現了應用程式本身可以解 壓壓縮率高的壓縮演算法,保證採用更高壓縮率的應用程式的正常運行。
參照圖4,示出了根據本案實施例四的一種應用程式的解壓方法實施例的流程圖,該方法具體可以包括以下步驟:
步驟401,解封裝壓縮應用程式得到主調檔、採用預設壓縮演算法壓縮的被調檔和所述預設壓縮演算法對應的解壓功能檔。
在本案實施例中,具體實現方式與其他實施例描述一致,不做贅述。
步驟402,調用主框架的主調檔初始化壓縮應用程式中解壓功能檔。
在主框架的主調檔的初始化物件中有解壓功能檔,調用主框架的主調檔,初始化壓縮應用程式中的解壓功能檔,
例如,運行APK應用程式時,執行主dex檔,在應用程式壓縮階段已經將調用函數修改,所以會調用到載入處理LZMA演算法的so檔的函數,將處理LZMA演算法的so檔載入。
步驟403,判定壓縮的被調檔中存在主調檔所需調用的被調檔。
判斷壓縮的被調檔中是否存在主調檔所需調用的被調檔,如果壓縮的被調檔中存在主調檔所需調用的被調檔,則執行步驟405。
例如,判定要載入的so檔存在於LZMA演算法壓縮的檔中。
步驟404,若不存在主調檔所需調用的被調檔,則從當前作業系統查找被調檔或從網路下載所述被調檔。
在本案實施例中,主調檔調用的被調檔有些是在壓縮的被調檔中,有些是在作業系統中,有些是在網路上,如果壓縮的被調檔中不存在主調檔所需調用的被調檔,就可以從當前作業系統查找被調檔或從網路下載所述被調檔。
步驟405,在所述主調檔調用所述被調檔時,判定主調檔所需調用的被調檔依賴於另一被調檔。
在主調檔調用被調檔時,先判斷主調檔所需調用的被調檔是否依賴於另一被調檔,具體可以根據壓縮應用程式中解封裝得到的依賴檔進行判斷,依賴檔中記錄有各被調檔的依賴關係,並且判定主調檔所需調用的被調檔依賴於另一被調檔。
步驟406,調用解壓功能檔從壓縮的被調檔解壓所述另一被調檔。
調用解壓功能檔從壓縮的被調檔解壓另一被調檔,具體可以用解壓功能檔中對應的解壓演算法對預設壓縮演算法壓縮的檔進行解壓,得到被調檔依賴的另一被調檔。
步驟407,調用解壓功能檔從壓縮的被調檔解壓主調檔所需調用的被調檔。
調用解壓功能檔從壓縮的被調檔解壓所需的被調檔,具體可以用解壓功能檔中對應的解壓演算法對預設壓縮演 算法壓縮的檔進行解壓,得到所需調用的被調檔。
步驟408,調用解壓功能檔對壓縮的被調檔進行解壓和載入。
在本案實施例中,具體實現方式與其他實施例描述一致,不做贅述。
依據本案實施例,透過解封裝壓縮應用程式得到主調檔、採用預設壓縮演算法壓縮的被調檔和所述預設壓縮演算法對應的解壓功能檔,調用主框架的主調檔初始化壓縮應用程式中解壓功能檔,判定壓縮的被調檔中存在主調檔所需調用的被調檔,若不存在主調檔所需調用的被調檔,則從當前作業系統查找被調檔或從網路下載所述被調檔,在所述主調檔調用所述被調檔時,判定主調檔所需調用的被調檔依賴於另一被調檔,調用解壓功能檔從壓縮的被調檔解壓所述另一被調檔,調用解壓功能檔從壓縮的被調檔解壓主調檔所需調用的被調檔,調用解壓功能檔對壓縮的被調檔進行解壓和載入,從而使得壓縮的應用程式運行時可以調用能夠解壓預設壓縮演算法的演算法進行解壓,從而可以解決了原先對壓縮率高的演算法無法相容的問題,實現了應用程式本身可以解壓壓縮率高的壓縮演算法,保證採用更高壓縮率的應用程式的正常運行。
為使本領域技術人員更好地理解本案,以下透過具體的示例對本案的一種驗證方法進行說明。
參見圖5,示出了本案實施例的一個示例中壓縮過程示意圖。
步驟1:檔解析;對於傳入的Android應用程式APK包,進行解壓,找到壓縮包中的所有的so檔,並解析其中的AndroidManifest.xml檔。
步驟2:so依賴表產生;so載入需要相應的依賴關係,產生該APK應用程式中各so檔的依賴關係表。
步驟3:so處理;為減少體積,將所有的so檔使用LZMA演算法壓縮到一個壓縮檔,同時添加一個預先編譯好的能夠處理LZMA演算法的so檔。
步驟4:dex檔修改;由於原先程式所有的so檔都壓縮成一個so檔,所以必須攔截java層載入so檔的函數,在運行時調用的時候透過so檔依賴關係表進行轉換。
步驟5:檔打包;將預先編譯好的能夠處理LZMA演算法的so檔以及so依賴關係表,LZMA演算法壓縮的所有so檔,修改後的dex檔重新封包進入Android應用程式中,同時刪除原有的so檔。
步驟6:重新簽名;使用原來程式的簽名檔對重新封包後的Android應用程式進行重新簽名。
參見圖6,示出了本案實施例的另一個示例中解壓過程示意圖。
步驟1,首先載入能夠解壓LZMA演算法壓縮檔的so檔,讓該APK應用程式具有解壓LZMA壓縮檔的功能。
步驟2,當應用程式需要載入so檔時,也就是執行so檔載入邏輯,由於在打包階段已經將調用函數修改,所以會調用到自訂載入so檔的函數。
步驟3,首先判斷要載入的so檔是否在LZMA壓縮檔中,如果在則執行步驟4,如果不在表示載入系統so檔或者從網上動態下載的so檔,無需解壓,直接調用系統函數載入。
步驟4,根據傳入的so檔案名稱來在預先內置的LZMA壓縮檔中,解壓出來這個so檔,如果該so的載入需要依賴其他的so檔,也需要將其他so檔也解壓出來。
步驟5,得到解壓出來的so檔路徑,調用系統介面來載入這個so檔,完成載入。
參考圖7,示出了根據本案實施例五的一種應用程式的壓縮裝置的結構方塊圖,具體可以包括:被調檔案壓縮模組501,用於採用預設壓縮演算法對源應用程式中的被調檔進行壓縮;調用修改模組502,用於將主調檔對被調檔的調用修改為對所述預設壓縮演算法對應的解壓功能檔的調用,所述解壓功能檔用於解壓和載入壓縮後的被調檔;應用程式封裝模組503,用於封裝修改後的主調檔、壓縮後的被調檔和解壓功能檔,得到壓縮應用程式。
可選地,所述裝置還包括:被調檔查找模組,用於在所述採用預設壓縮演算法對源應用程式中的被調檔進行壓縮之前,查找所述源應用程式中可採用預設壓縮演算法進行壓縮的被調檔。
可選地,所述被調檔為動態連結程式庫檔,所述主調檔為調用所述動態連結程式庫檔的可執行檔;所述被調檔 查找模組,具體用於在所述源應用程式包括的多種類型的檔中查找動態連結程式庫檔。
可選地,所述裝置還包括:功能檔增加模組,用於在所述主調檔的初始化物件中增加解壓功能檔。
可選地,所述裝置還包括:功能檔添加模組,用於將所述解壓功能檔添加至歸屬於應用程式的主框架的主調檔。
可選地,所述功能檔增加模組包括:函數查找子模組,用於在所述主調檔的程式入口位置查找運行的首個函數;功能檔增加子模組,用於在所述首個函數的調用物件中增加對應所述預設壓縮演算法的解壓功能檔。
可選地,所述裝置還包括:入口類名稱提取子模組,用於在所述在所述主調檔的初始化物件中增加解壓功能檔之前,從所述源應用程式的應用全域設定檔中,提取所述源應用程式的程式入口位置的入口類名稱。
可選地,所述裝置還包括:主調檔反編譯模組,用於反編譯對應的主調檔。
可選地,所述裝置還包括:依賴檔產生模組,用於確定所述被調檔之間的依賴關係,並產生記錄依賴關係的依賴檔。
可選地,所述應用程式封裝模組,具體用於封裝所述 依賴檔、修改後的主調檔、壓縮後的被調檔和解壓功能檔,得到壓縮應用程式。
可選地,所述應用程式封裝模組包括:主調檔案壓縮子模組,用於對修改後的主調檔進行壓縮,並替換至修改前的主調檔所處位置;壓縮添加子模組,用於對所述壓縮後的被調檔和解壓功能檔進行壓縮,並添加至所述源應用程式中,得到壓縮應用程式。
可選地,所述應用程式封裝模組還包括:主框架檔案壓縮子模組,用於提取歸屬於應用程式的主框架的主調檔並進行壓縮,得到壓縮後的主框架檔,所述主框架的主調檔中已添加所述解壓功能檔;主框架檔替換子模組,用於採用壓縮後的主框架檔替換所述源應用程式原有的主框架檔。
可選地,所述裝置還包括:元件簽名模組,用於在所述封裝修改後的主調檔、壓縮後的被調檔和解壓功能檔,得到壓縮應用程式之前,對所述主調檔在應用程式中所屬的功能元件進行重新簽名。
可選地,所述裝置還包括:原始簽名判定模組,用於在所述對所述主調檔在應用程式中所屬的功能元件進行重新簽名之前,判定所述主調檔在應用程式中所屬的功能元件具有原始簽名。
可選地,所述裝置還包括:源應用程式解壓模組,用於在所述採用預設壓縮演算 法對源應用程式中的被調檔進行壓縮之前,解壓所述源應用程式,並查找主調檔和被調檔。
可選地,所述裝置還包括:應用程式簽名模組,用於對所述壓縮應用程式進行簽名。
可選地,所述預設壓縮演算法為LZMA演算法。
依據本案實施例,首先採用預設壓縮演算法對源應用程式中的被調檔進行壓縮,例如採用比原有壓縮演算法壓縮率更高的演算法,可以提高壓縮應用程式的壓縮率,得到更小體積的應用程式。進一步,將主調檔對被調檔的調用修改為對所述預設壓縮演算法對應的解壓功能檔的調用,封裝修改後的主調檔、壓縮後的被調檔和解壓功能檔,得到壓縮應用程式,從而使得該應用程式運行時可以調用能夠解壓預設壓縮演算法的演算法進行解壓,從而可以解決了原先對壓縮率高的演算法無法相容的問題,可以讓應用程式本身具備解壓壓縮率高的壓縮演算法的功能,保證採用更高壓縮率的應用程式的正常運行。
參考圖8,示出了根據本案實施例六的一種應用程式的解壓裝置的結構框圖,具體可以包括:應用程式解封裝模組601,用於解封裝壓縮應用程式得到主調檔、採用預設壓縮演算法壓縮的被調檔和所述預設壓縮演算法對應的解壓功能檔;所述主調檔定義為調用所述解壓功能檔;解壓和載入模組602,用於在所述主調檔調用所述被 調檔時,調用解壓功能檔對壓縮的被調檔進行解壓和載入。
可選地,所述裝置還包括:功能檔初始化模組,用於在所述調用解壓功能檔對壓縮的被調檔進行解壓和載入之前,調用主框架的主調檔初始化壓縮應用程式中解壓功能檔。
可選地,所述裝置包括:被調檔存在判定模組,用於在所述調用解壓功能檔對壓縮的被調檔進行解壓和載入之前,判定壓縮的被調檔中存在主調檔所需調用的被調檔。
可選地,所述裝置還包括:查找下載模組,用於若不存在主調檔所需調用的被調檔,則從當前作業系統查找被調檔或從網路下載所述被調檔。
可選地,所述裝置包括:依賴判定模組,用於在所述調用解壓功能檔對壓縮的被調檔進行解壓和載入之前,判定主調檔所需調用的被調檔依賴於另一被調檔;依賴檔解壓模組,用於調用解壓功能檔從壓縮的被調檔解壓所述另一被調檔;檔解壓模組,用於調用解壓功能檔從壓縮的被調檔解壓主調檔所需調用的被調檔。
依據本案實施例,透過解封裝壓縮應用程式得到主調檔、採用預設壓縮演算法壓縮的被調檔和所述預設壓縮演 算法對應的解壓功能檔,在所述主調檔調用所述被調檔時,調用解壓功能檔對壓縮的被調檔進行解壓和載入,從而使得壓縮的應用程式運行時可以調用能夠解壓預設壓縮演算法的演算法進行解壓,從而可以解決了原先對壓縮率高的演算法無法相容的問題,實現了應用程式本身可以解壓壓縮率高的壓縮演算法,保證採用更高壓縮率的應用程式的正常運行。
由於所述裝置實施例基本相應於前述圖1、圖2、圖3和圖4所示的方法實施例,故本實施例的描述中未詳盡之處,可以參見前述實施例中的相關說明,在此就不贅述了。
在此提供的演算法和顯示不與任何特定電腦、虛擬系統或者其它設備固有相關。各種通用系統也可以與基於在此的教示一起使用。根據上面的描述,構造這類系統所要求的結構是顯而易見的。此外,本案也不針對任何特定程式設計語言。應當明白,可以利用各種程式設計語言實現在此描述的本案的內容,並且上面對特定語言所做的描述是為了披露本案的最佳實施方式。
在此處所提供的說明書中,說明了大量具體細節。然而,能夠理解,本案的實施例可以在沒有這些具體細節的情況下實踐。在一些實例中,並未詳細示出公知的方法、結構和技術,以便不模糊對本說明書的理解。
類似地,應當理解,為了精簡本公開並幫助理解各個申請方面中的一個或多個,在上面對本案的示例性實施例 的描述中,本案的各個特徵有時被一起分組到單個實施例、圖、或者對其的描述中。然而,並不應將該公開的方法解釋成反映如下意圖:即所要求保護的本案要求比在每個權利要求中所明確記載的特徵更多的特徵。更確切地說,如下面的權利要求書所反映的那樣,申請方面在於少於前面公開的單個實施例的所有特徵。因此,遵循具體實施方式的權利要求書由此明確地併入該具體實施方式,其中每個權利要求本身都作為本案的單獨實施例。
本領域那些技術人員可以理解,可以對實施例中的設備中的模組進行自我調整性地改變並且把它們設置在與該實施例不同的一個或多個設備中。可以把實施例中的模組或單元或元件組合成一個模組或單元或元件,以及此外可以把它們分成多個子模組或子單元或子元件。除了這樣的特徵和/或過程或者單元中的至少一些是相互排斥之外,可以採用任何組合對本說明書(包括伴隨的權利要求、摘要和附圖)中公開的所有特徵以及如此公開的任何方法或者設備的所有過程或單元進行組合。除非另外明確陳述,本說明書(包括伴隨的權利要求、摘要和附圖)中公開的每個特徵可以由提供相同、等同或相似目的的替代特徵來代替。
此外,本領域的技術人員能夠理解,儘管在此所述的一些實施例包括其它實施例中所包括的某些特徵而不是其它特徵,但是不同實施例的特徵的組合意味著處於本案的範圍之內並且形成不同的實施例。例如,在下面的權利要 求書中,所要求保護的實施例的任意之一都可以以任意的組合方式來使用。
本案的各個部件實施例可以以硬體實現,或者以在一個或者多個處理器上運行的軟體模組實現,或者以它們的組合實現。本領域的技術人員應當理解,可以在實踐中使用微處理器或者數位訊號處理器(DSP)來實現根據本案實施例的基於資料分析的伺服器入侵識別設備中的一些或者全部部件的一些或者全部功能。本案還可以實現為用於執行這裡所描述的方法的一部分或者全部的設備或者裝置程式(例如,電腦程式和電腦程式產品)。這樣的實現本案的程式可以存儲在電腦可讀媒體上,或者可以具有一個或者多個信號的形式。這樣的信號可以從網際網路網站上下載得到,或者在載體信號上提供,或者以任何其他形式提供。
應該注意的是上述實施例對本案進行說明而不是對本案進行限制,並且本領域技術人員在不脫離所附申請專利範圍的範圍的情況下可設計出替換實施例。在申請專利範圍中,不應將位於括弧之間的任何參考符號構造成對申請專利範圍的限制。單詞“包含”不排除存在未列在申請專利範圍中的元件或步驟。位於元件之前的單詞“一”或“一個”不排除存在多個這樣的元件。本案可以藉由於包括有若干不同元件的硬體以及藉由於適當程式設計的電腦來實現。在列舉了若干裝置的單元申請專利範圍中,這些裝置中的若干個可以是透過同一個硬體項來具體體現。單 詞第一、第二、以及第三等的使用不表示任何順序。可將這些單詞解釋為名稱。
Claims (24)
- 一種應用程式的壓縮方法,包括:採用預設壓縮演算法對源應用程式中的被調檔進行壓縮;將主調檔對被調檔的調用修改為對所述預設壓縮演算法對應的解壓功能檔的調用,所述解壓功能檔用於解壓和載入壓縮後的被調檔;封裝修改後的主調檔、壓縮後的被調檔和解壓功能檔,得到壓縮應用程式。
- 如申請專利範圍第1項所述的方法,其中,在所述採用預設壓縮演算法對源應用程式中的被調檔進行壓縮之前,所述方法還包括:查找所述源應用程式中可採用預設壓縮演算法進行壓縮的被調檔。
- 如申請專利範圍第2項所述的方法,其中,所述被調檔為動態連結程式庫檔,所述主調檔為調用所述動態連結程式庫文件的可執行檔;所述查找所述源應用程式中可採用預設壓縮演算法進行壓縮的被調檔包括:在所述源應用程式包括的多種類型的檔中查找動態連結程式庫檔。
- 如申請專利範圍第1項所述的方法,其中,所述方法還包括:在所述主調檔的初始化物件中增加解壓功能檔。
- 如申請專利範圍第1或4項所述的方法,其中,所述方法還包括:將所述解壓功能檔添加至歸屬於應用程式的主框架的主調檔。
- 如申請專利範圍第4項所述的方法,其中,所述在所述主調檔的初始化物件中增加解壓功能檔包括:在所述主調檔的程式入口位置查找運行的首個函數;在所述首個函數的調用物件中增加對應所述預設壓縮演算法的解壓功能檔。
- 如申請專利範圍第4項所述的方法,其中,在所述在所述主調檔的初始化物件中增加解壓功能檔之前,所述方法還包括:從所述源應用程式的應用全域設定檔中,提取所述源應用程式的程式入口位置的入口類名稱。
- 如申請專利範圍第1項所述的方法,其中,所述方法還包括:反編譯對應的主調檔。
- 如申請專利範圍第1項所述的方法,其中,所述方法還包括:確定所述被調檔之間的依賴關係,並產生記錄依賴關係的依賴檔。
- 如申請專利範圍第9項所述的方法,其中,所述封裝修改後的主調檔、壓縮後的被調檔和解壓功能檔,得到壓縮應用程式包括:封裝所述依賴檔、修改後的主調檔、壓縮後的被調檔和解壓功能檔,得到壓縮應用程式。
- 如申請專利範圍第1項所述的方法,其中,所述封裝修改後的主調檔、壓縮後的被調檔和解壓功能檔,得到壓縮應用程式包括:對修改後的主調檔進行壓縮,並替換至修改前的主調檔所處位置;對所述壓縮後的被調檔和解壓功能檔進行壓縮,並添加至所述源應用程式中,得到壓縮應用程式。
- 如申請專利範圍第11項所述的方法,其中,所述封裝修改後的主調檔、壓縮後的被調檔和解壓功能檔,得到壓縮應用程式還包括:提取歸屬於應用程式的主框架的主調檔並進行壓縮, 得到壓縮後的主框架檔,所述主框架的主調檔中已添加所述解壓功能檔;採用壓縮後的主框架檔替換所述源應用程式原有的主框架檔。
- 如申請專利範圍第1項所述的方法,其中,在所述封裝修改後的主調檔、壓縮後的被調檔和解壓功能檔,得到壓縮應用程式之後,所述方法還包括:對所述主調檔在應用程式中所屬的功能元件進行重新簽名。
- 如申請專利範圍第13項所述的方法,其中,在所述對所述主調檔在應用程式中所屬的功能元件進行重新簽名之前,所述方法還包括:判定所述主調檔在應用程式中所屬的功能元件具有原始簽名。
- 如申請專利範圍第1項所述的方法,其中,在所述採用預設壓縮演算法對源應用程式中的被調檔進行壓縮之前,所述方法還包括:解壓所述源應用程式,並查找主調檔和被調檔。
- 如申請專利範圍第1項所述的方法,其中,所述方法還包括: 對所述壓縮應用程式進行簽名。
- 如申請專利範圍第1項所述的方法,其中,所述預設壓縮演算法為LZMA演算法。
- 一種應用程式的解壓方法,包括:解封裝壓縮應用程式得到主調檔、採用預設壓縮演算法壓縮的被調檔和所述預設壓縮演算法對應的解壓功能檔;所述主調檔定義為調用所述解壓功能檔;在所述主調檔調用所述被調檔時,調用解壓功能檔對壓縮的被調檔進行解壓和載入。
- 如申請專利範圍第18項所述的方法,其中,在所述調用解壓功能檔對壓縮的被調檔進行解壓和載入之前,所述方法還包括:調用主框架的主調檔初始化壓縮應用程式中解壓功能檔。
- 如申請專利範圍第18項所述的方法,其中,在所述調用解壓功能檔對壓縮的被調檔進行解壓和載入之前,所述方法包括:判定壓縮的被調檔中存在主調檔所需調用的被調檔。
- 如申請專利範圍第20項所述的方法,其中,所述方法 還包括:若不存在主調檔所需調用的被調檔,則從當前作業系統查找被調檔或從網路下載所述被調檔。
- 如申請專利範圍第18或20項所述的方法,其中,在所述調用解壓功能檔對壓縮的被調檔進行解壓和載入之前,所述方法包括:判定主調檔所需調用的被調檔依賴於另一被調檔;調用解壓功能檔從壓縮的被調檔解壓所述另一被調檔;調用解壓功能檔從壓縮的被調檔解壓主調檔所需調用的被調檔。
- 一種應用程式的壓縮裝置,包括:被調檔案壓縮模組,用於採用預設壓縮演算法對源應用程式中的被調檔進行壓縮;調用修改模組,用於將主調檔對被調檔的調用修改為對所述預設壓縮演算法對應的解壓功能檔的調用,所述解壓功能檔用於解壓和載入壓縮後的被調檔;應用程式封裝模組,用於封裝修改後的主調檔、壓縮後的被調檔和解壓功能檔,得到壓縮應用程式。
- 一種應用程式的解壓裝置,包括:應用程式解封裝模組,用於解封裝壓縮應用程式得到 主調檔、採用預設壓縮演算法壓縮的被調檔和所述預設壓縮演算法對應的解壓功能檔;所述主調檔定義為調用所述解壓功能檔;解壓和載入模組,用於在所述主調檔調用所述被調檔時,調用解壓功能檔對壓縮的被調檔進行解壓和載入。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611266088.7A CN108279941B (zh) | 2016-12-31 | 2016-12-31 | 一种应用程序的压缩方法和装置 |
CN201611266088.7 | 2016-12-31 | ||
??201611266088.7 | 2016-12-31 |
Publications (2)
Publication Number | Publication Date |
---|---|
TW201826117A TW201826117A (zh) | 2018-07-16 |
TWI754658B true TWI754658B (zh) | 2022-02-11 |
Family
ID=62709844
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW106126272A TWI754658B (zh) | 2016-12-31 | 2017-08-03 | 應用程序的壓縮方法和裝置 |
Country Status (6)
Country | Link |
---|---|
US (1) | US10579592B2 (zh) |
EP (1) | EP3563247B1 (zh) |
JP (1) | JP2020504882A (zh) |
CN (1) | CN108279941B (zh) |
TW (1) | TWI754658B (zh) |
WO (1) | WO2018125909A1 (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110210256B (zh) * | 2018-08-07 | 2023-06-06 | 腾讯科技(深圳)有限公司 | 一种应用加固、加固应用启动方法、装置及服务器 |
CN110007925A (zh) * | 2019-04-01 | 2019-07-12 | 睿驰达新能源汽车科技(北京)有限公司 | 一种提升应用程序运行性能的方法及装置 |
US10817460B2 (en) * | 2019-08-28 | 2020-10-27 | Advanced New Technologies Co., Ltd. | RDMA data sending and receiving methods, electronic device, and readable storage medium |
CN113296781A (zh) * | 2021-02-01 | 2021-08-24 | 阿里巴巴集团控股有限公司 | 应用程序安装包文件编译构建方法、装置及电子设备 |
CN113836101A (zh) * | 2021-09-27 | 2021-12-24 | 维沃移动通信有限公司 | 压缩方法、装置及电子设备 |
TWI783729B (zh) * | 2021-10-14 | 2022-11-11 | 財團法人資訊工業策進會 | 分散式資料傳輸容錯系統及其動態資源調整方法 |
CN117311853B (zh) * | 2023-11-28 | 2024-03-12 | 深圳市移卡科技有限公司 | Apk文件的处理方法、装置、计算机设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060010151A1 (en) * | 2004-05-25 | 2006-01-12 | Chih-Ta Star Sung | Lossless compression method and apparatus for data storage and transmission |
US20100131475A1 (en) * | 2007-05-24 | 2010-05-27 | Fujitsu Limited | Computer product, information retrieving apparatus, and information retrieval method |
TW201516871A (zh) * | 2013-10-25 | 2015-05-01 | Tencent Tech Shenzhen Co Ltd | 生成應用程式安裝封包、執行應用程式的方法及裝置 |
US9448782B1 (en) * | 2012-08-27 | 2016-09-20 | Amazon Technologies, Inc. | Reducing a size of an application package |
Family Cites Families (31)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5909638A (en) * | 1996-08-06 | 1999-06-01 | Maximum Video Systems, Inc. | High speed video distribution and manufacturing system |
CN101135978B (zh) * | 2007-03-02 | 2011-01-19 | 中兴通讯股份有限公司 | 压缩版应用程序生成、执行方法与装置及应用方法与系统 |
US9154826B2 (en) | 2011-04-06 | 2015-10-06 | Headwater Partners Ii Llc | Distributing content and service launch objects to mobile devices |
EP2675110B1 (en) | 2011-05-04 | 2015-09-02 | Huawei Device Co., Ltd. | Method, system and terminal for system update between mobile communication terminals |
CN102231117B (zh) * | 2011-07-08 | 2013-08-14 | 盛乐信息技术(上海)有限公司 | 一种在嵌入式平台安装软件的方法和系统 |
US8930940B2 (en) * | 2011-08-19 | 2015-01-06 | Yongyong Xu | Online software execution platform |
GB201115501D0 (en) | 2011-09-08 | 2011-10-26 | Ideaworks 3D Ltd | A method and system for producing executable applications |
US20140032733A1 (en) | 2011-10-11 | 2014-01-30 | Citrix Systems, Inc. | Policy-Based Application Management |
US8799994B2 (en) | 2011-10-11 | 2014-08-05 | Citrix Systems, Inc. | Policy-based application management |
US9529996B2 (en) | 2011-10-11 | 2016-12-27 | Citrix Systems, Inc. | Controlling mobile device access to enterprise resources |
KR101881303B1 (ko) | 2011-11-08 | 2018-08-28 | 삼성전자주식회사 | 애플리케이션 데이터 보호를 위한 휴대용 단말기의 장치 및 방법 |
CN102520987B (zh) * | 2011-11-30 | 2014-11-05 | Tcl集团股份有限公司 | 应用程序在线体验与安装方法、装置、服务器及管理系统 |
US9032391B2 (en) * | 2012-06-27 | 2015-05-12 | Clearside, Inc. | System and method for dynamically creating executable files |
CN102799826B (zh) | 2012-07-19 | 2015-07-29 | 腾讯科技(深圳)有限公司 | 应用程序安装包解压过程的检测方法与装置、客户端设备 |
US9971585B2 (en) * | 2012-10-16 | 2018-05-15 | Citrix Systems, Inc. | Wrapping unmanaged applications on a mobile device |
US9595205B2 (en) | 2012-12-18 | 2017-03-14 | Neuron Fuel, Inc. | Systems and methods for goal-based programming instruction |
US20140258247A1 (en) | 2013-03-05 | 2014-09-11 | Htc Corporation | Electronic apparatus for data access and data access method therefor |
CN104049986B (zh) | 2013-03-14 | 2018-12-18 | 腾讯科技(深圳)有限公司 | 插件加载方法及装置 |
US20150011311A1 (en) | 2013-07-03 | 2015-01-08 | Iswifter, Inc. | System and method for experiencing advertised interactive applications |
GB2519516B (en) | 2013-10-21 | 2017-05-10 | Openwave Mobility Inc | A method, apparatus and computer program for modifying messages in a communications network |
CN105404521B (zh) | 2014-05-30 | 2017-05-31 | 广州市动景计算机科技有限公司 | 一种增量升级方法及相关装置 |
CN105740298A (zh) * | 2014-12-12 | 2016-07-06 | 北京奇虎科技有限公司 | 文件处理方法、装置及服务端设备 |
CN104657131B (zh) * | 2015-01-15 | 2019-03-15 | 北京奥普维尔科技有限公司 | 一种软件安装包的生成系统和方法 |
US20160321116A1 (en) | 2015-04-29 | 2016-11-03 | Microsoft Technology Licensing, Llc | Translating operating system processes |
US9740856B2 (en) * | 2015-05-13 | 2017-08-22 | SEWORKS, Inc. | Apparatus and method for managing gaming engine file in a mobile platform |
US20160378452A1 (en) * | 2015-06-29 | 2016-12-29 | Mediatek Inc. | Policy-Based Compression of Machine Code Generated by a Virtual Machine |
CN105138333B (zh) * | 2015-08-27 | 2018-11-06 | 暴风集团股份有限公司 | 基于安卓系统的apk文件压缩的方法及系统 |
CN106506007A (zh) | 2015-09-08 | 2017-03-15 | 联发科技(新加坡)私人有限公司 | 一种无损数据压缩和解压缩装置及其方法 |
US9811327B2 (en) | 2015-12-21 | 2017-11-07 | Quixey, Inc. | Dependency-aware transformation of multi-function applications for on-demand execution |
US9952848B2 (en) | 2015-12-21 | 2018-04-24 | Samsung Electronics Co., Ltd. | Dependency-aware transformation of multi-function applications for on-demand execution |
CN105893094B (zh) * | 2016-03-31 | 2019-05-03 | 百度在线网络技术(北京)有限公司 | 应用程序插件化的实现方法和装置 |
-
2016
- 2016-12-31 CN CN201611266088.7A patent/CN108279941B/zh active Active
-
2017
- 2017-08-03 TW TW106126272A patent/TWI754658B/zh active
- 2017-12-27 EP EP17887974.8A patent/EP3563247B1/en active Active
- 2017-12-27 US US15/855,889 patent/US10579592B2/en active Active
- 2017-12-27 WO PCT/US2017/068516 patent/WO2018125909A1/en unknown
- 2017-12-27 JP JP2019536025A patent/JP2020504882A/ja active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060010151A1 (en) * | 2004-05-25 | 2006-01-12 | Chih-Ta Star Sung | Lossless compression method and apparatus for data storage and transmission |
US20100131475A1 (en) * | 2007-05-24 | 2010-05-27 | Fujitsu Limited | Computer product, information retrieving apparatus, and information retrieval method |
US9448782B1 (en) * | 2012-08-27 | 2016-09-20 | Amazon Technologies, Inc. | Reducing a size of an application package |
TW201516871A (zh) * | 2013-10-25 | 2015-05-01 | Tencent Tech Shenzhen Co Ltd | 生成應用程式安裝封包、執行應用程式的方法及裝置 |
Also Published As
Publication number | Publication date |
---|---|
TW201826117A (zh) | 2018-07-16 |
CN108279941A (zh) | 2018-07-13 |
JP2020504882A (ja) | 2020-02-13 |
EP3563247A4 (en) | 2020-09-02 |
EP3563247A1 (en) | 2019-11-06 |
EP3563247B1 (en) | 2024-04-10 |
CN108279941B (zh) | 2021-06-15 |
WO2018125909A1 (en) | 2018-07-05 |
US10579592B2 (en) | 2020-03-03 |
US20180189313A1 (en) | 2018-07-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI754658B (zh) | 應用程序的壓縮方法和裝置 | |
US11409949B2 (en) | Mobile device resource provisioning system and method | |
JP5781497B2 (ja) | 拡張可能なメディア形式を持つホスト型アプリケーションプラットフォーム | |
US20090172657A1 (en) | System, Method, Apparatus, Mobile Terminal and Computer Program Product for Providing Secure Mixed-Language Components to a System Dynamically | |
CN106295255B (zh) | 应用程序的加固方法和装置 | |
WO2020177429A1 (zh) | 在应用中嵌入代码的方法、装置及电子设备 | |
US9513762B1 (en) | Static content updates | |
US9110758B2 (en) | Cross-platform software framework for embedded systems on data storage device | |
KR101117165B1 (ko) | 이기종 운영체제 계층 모듈에서 동작하는 웹기반어플리케이션의 연동이 가능한 모바일 단말기용 웹 플랫폼 유닛 | |
CN110941443B (zh) | 修改sdk中文件名的方法、装置及电子设备 | |
US9300760B2 (en) | Machine-specific instruction set translation | |
CN116029526A (zh) | 一种实验资源的调度方法、装置、设备及存储介质 | |
CN110502251B (zh) | 应用安装方法及装置 | |
CN109934016B (zh) | 应用的签名校验方法、装置及电子设备 | |
CN113535566B (zh) | 一种安卓应用校验方法、装置、设备及存储介质 | |
KR20230119821A (ko) | 코드 난독화 및 성능 개선을 위한 자동화된 패키지 재구성 방법 및 시스템 | |
CN117648110A (zh) | 一种脱离aosp编译环境单独打包内核镜像的方法 |