本文轉載自超能網,其它媒體轉載需超能網同意
大傢如果細心的話,可能會發現在 Android 的應用商店和 iOS 的 App Store 上,同一個 APP,iOS 版標註的 APP 所需容量大小要遠比 Android 大好幾倍,比如一個 QQ,在 Google Play Store 上隻有 34MB,但在 App Store 上居然有 231MB 之巨,這使得不少用戶以為 iOS 浪費存儲空間,甚至一些陰謀論都出來瞭。
那麼為什麼會出現這種情況呢?
iOS 的 APP 比 Android 大這麼多?
這問題放在過去,有個流行的說法是,由於蘋果的 iPhone、iPad 有好幾種不同的屏幕分辨率,所以 iOS 的 APP 裡面包含瞭幾套圖像資源,導致瞭 App 占用巨大,而 Android 系統中對圖像的處理要求不高,所以不同設備用瞭通用的資源,APP 自然就小瞭。
這個解釋雖然有一定的道理,但放在今時今日就不大成立瞭。所以下面要講講兩個系統的 APP 文件大小有什麼不一樣。
安裝文件分析
我們都知道,在 Android 中的安裝文件類型為 apk,iOS 為 ipa,其實簡單來講,這兩個安裝文件都是個壓縮包。
以微信 APP 的 apk(版本為 6.5.10)為例,原文件大小在 Windows 上(NTFS 文件系統)顯示為 44.1MB,經過 WinRAR 解壓縮後占用空間為 93.7MB。 而微信 APP 的 ipa(版本為 6.5.11)原文件大小為 145MB,解壓縮後占用 186MB。
咋一看,ipa 無論解壓縮都確實要比 apk 大上不少,那來看看兩個系統的安裝文件裡面包含瞭什麼。
微信 apk 對比 ipa 文件大小
一個 apk 文件解壓縮後,主要有 assets、lib、META-INF、r、AndroidManifest.xml、classes.dex、resources.arsc 這幾個文件和文件夾。
微信 apk 內含文件和文件夾
當然這裡不是編程課堂,所以隻講下這些文件中占容量最大的一般是 assets 目錄、lib 目錄、res 目錄和 classes.dex 文件。
- assets 目錄存放靜態文件,app 需要用到一些音效、字體、表情包等都在此。
- lib 目錄為依賴庫文件,現在的 apk 大多都是包含 armeabi 的 lib 庫,如果 apk 兼容 x86,還會有 x86 的依賴庫,這樣這個目錄就會更大一點瞭。
- r 即 res、resource 目錄,主要存放資源文件,如圖片、影像文件。
- classes.dex 文件則是 Android 中 Dalvik 虛擬機的可執行文件,由 JAVA 下的 class 文件編譯而來。
iOS 的 ipa 安裝包則相對簡單一些,主要文件夾為 Payload,在 Windows 上會顯示裡面有一個 APP 名字命名的文件夾,如微信為 WeChat.app,包括瞭 APP 所有需要的執行和資源文件。
微信 ipa 主要文件夾為 WeChat.app
對比兩個安裝文件,微信 APP 的主執行文件為 WeChat,文件大小為 132MB,其它文件其實隻有 54MB。Android 的主執行文件包括 classes.dex 文件和 lib 目錄,微信 APP 裡面這些文件大小為 52.6MB,而其它文件為 41.7MB。
iOS 版微信主執行文件大小
Android 版微信主執行文件大小
由此可見,兩個系統的同樣一個 APP,安裝包裡面除開主要的執行文件,其它資源文件占用空間大小相差不多,並非是文章開頭所說的不同蘋果設備需要不同的套圖,導致安裝文件巨大。
但僅從安裝文件來看,iOS 的 APP 確實要比 Android 版的大好幾倍,那下面還要講到兩個系統的 APP 安裝機制。
APP 安裝機制
以前 Android 主要采用 Dalvik 虛擬機,執行 apk 中的 classes.dex 文件,但後來為瞭提高 APP 啟動和運行速度。從 4.4.4 版本開始,Android 換用瞭 ART 虛擬機,apk 安裝到系統的過程中會進行預編譯,把 apk 中的 dex 文件編譯成 oat 文件,把字節碼經過 JIT 即時編譯器轉換為機器識別碼,所以 apk 安裝包中有關程序部分的文件更像是一堆代碼,占用空間較小。
Android 4.4 開始引入的 ART 虛擬機
iOS 則不一樣,由於 iOS 最早是基於 mac 電腦上的 OS X 同源開發,所以在 APP 的安裝方式上也相似,簡單來說 iOS 的 APP 本身就是一個大文件夾,類似 Windows 上解壓即用的綠色軟件,當你從 App Store 中下載安裝到 iPhone 上,更像是一個復制文件的過程。
Android 的安裝機制,使得 APP 安裝文件的大小,不代表安裝到手機上之後的大小,而在 iOS 上則是安裝文件有多大,安裝完後基本上也是多大。那麼實際情況如何呢?
實測 APP 安裝後占用空間
這裡在基於 Android 7.1.2 的 Lineage 14.1 和 iOS 10.3.2 系統上,對比微信和網易雲音樂兩個 APP 在應用商店上文件大小和安裝後文件大小。
在應用商店上,微信 APP 的標註大小僅為 44.1MB,但事實上 APP 安裝完成後,查看大小卻增大到 104MB。網易雲音樂 APP 標註大小為 29.8MB,安裝後為 54.33MB。
Android 上微信
Android 上網易雲音樂
App Store 上微信 APP 的標註大小為 123MB,下載安裝完後為 121.3MB,應用大小卻變小瞭,網易雲音樂 APP 同樣更是標註 103MB,安裝完成後為 89.8MB,這是由於測試使用的是 iPhone SE,App Store 上標註的大小應該是以 iPhone 7 Plus 作標準的。
這也說明在 App 下載安裝過程中,App Store 會根據設備型號來適配必要的文件。
iOS 上微信
iOS 上網易雲音樂
可以明看到,Android 在安裝 APP 後大小出現翻倍的情況,因為前面提到,現在 Android 系統安裝 APP 過程中會進行編譯,所以裝完後 APP 真正的占用空間大小就出來瞭,這也解答瞭不少網友向小超哥(微信 9501417)詢問,在 Android 上安裝一個才十幾 MB 的 APP,裝完後存儲空間不見瞭上百 MB 的疑問。
Android 應用商店上隻是顯示 APK 安裝文件的大小,而在 App Store 上顯示的 APP 大小是安裝到手機後的占用空間大小。
這樣的好處是,用戶們會很直觀地知道自己手機還夠不夠容量安裝新的 APP,而不會出現明明手機設置裡面顯示還有幾十 MB 空餘存儲,卻連個十幾 MB 的 APP 都安裝不進的困惑。
當然 Android 更小的安裝文件方便下載到手機上,現在最新 Android 7.1.2 已經大幅提升安裝 APP 速度,隻是在安裝之前,大傢要註意預留 2-3 倍於安裝文件的存儲空間。
總結來看,本期課堂提出的 " 為什麼 iOS 上 APP 比 Android 大幾倍 " 其實是個偽問題,真實的情況是:
- App Store 上標註的 APP 大小是安裝之後的大小,Android 應用商店大多隻是顯示安裝文件的大小
- Android 安裝 APP 後,占用空間其實和 iOS 版相差不大