為什麼同一個應用ios比Android大那麼多呢?
首先下載時所用的IPA和APK都是ZIP文件,比較壓縮前的體積才有意義,iOS上46M的QQ就是因為一點沒壓縮。其次反對最上面說是因為資源文件的問題,不是每家公司的美工都愛偷懶的。對於常見的應用,個人認為體積大的原因是是iOS上的可執行文件比Android上的位元組碼文件體積大太多,以常用的QQ為例。iOS上的可執行文件在未壓縮前是44M,壓縮後是20M
針對佔用應用體積大小的大戶圖片資源,來嘗試回答下這個問題
.1. 一個應用的影響大小因素很大一方面是來自於資源,而非代碼,一般應用主要的是圖片資料,比如圖標,背景,圖片等.2. iOS 對於圖片資源的要求嚴格一些、
2.1 從屏幕密度上說: 比如 iOS 上屏幕密度不同,得支持 iPhone 6 Plus (3倍),iPhone 6(2倍) iPhone 3GS(1倍)那麼你必須提供三種屏幕密度的圖片資源,即: 60x60,40x40,20x20, 如果不提供的話,至少在 iOS 7之前則會顯示文件缺失.這方面 Android 的機制複雜但寬鬆一些:說複雜是因為 iOS 的圖片資源主要有屏幕密度作為區別(在 iOS 8中也加入了幾個屏幕大小的類別),但是 Android 呢,你可以看到: 根據Android 關於資源的官方文檔 Providing Resources上面所列舉出來的 Table 2. Configuration qualifier names. 有18大項之多.不僅包含屏幕密度,長,寬,大小,比例,方向,語言,還包含其他 N 多情況. 這是複雜的一面.按理來說,Android 的應用應該比 iOS 的大才對.但是事實並不是這樣的.因為 Android 的限制寬鬆一些.就拿屏幕密度來說,iOS 的屏幕密度現在就三種,(如果不考慮老的設備的話,就算兩種了)但是 Android 的設備,你知道千奇百怪,很多種--不過基本也在1倍,2倍,3倍,左右.如1.5倍, 2倍, 2.2倍,2.5倍等等. 屏幕密度很多種,怎麼辦? Android 在一開始設計的時候就提供了這樣一個解決方法:即,如果1.5的設備,對應圖片不存在,如果有2倍或以上的倍數的圖片就用相應的圖片,縮放後使用.上面文檔關於屏幕密度的與資源的匹配說明如下:
Note: Using a density qualifier does not imply that the resources are only for screens of that density. If you do not provide alternative resources with qualifiers that better match the current device configuration, the system may use whichever resources are the best match.
這樣造成的一種情況就是:很多應用其實都是主要使用一份屏幕密度的圖片資源,比如我看微信 Android 版本,有一個版本的資源圖片主要集中在3倍上. 這樣一來,Android 應用就比 iOS 設置少了兩份屏幕密度的資源了.
在這裡稍微總結一下:Android 的圖片資源查找規則是查找最匹配的一個,最終查找到有就不會出錯.而 iOS 在 iOS 7之前呢,則就是查找匹配的資源.對於一般的圖片,圖標來說,從96x96壓縮到72x72對外觀應該沒有什麼影響(具體我沒有測試過),所以導致 Android 中提供的資源少一些.
2.2 上面說了屏幕密度,那屏幕大小呢? Android 的屏幕大小也是眾多的,反正我是說不清倒底有多少,但是 iOS 呢? 我估計你稍微查找下資源,是可以窮舉過來的. 例如 iPhone 從3GS到5S 屏幕的寬度都可以表述為320點寬對設計和實現上有這麼一些影響:1. 也許你已經知道,很多設計師一般是以 iPhone 為參考大小來設計的.這個時候舉一個例子:假充我需要有一個設計上有一個背景,320x240, 這樣設計師,切出來之後,就是320x240再出一份,640x480的, iOS 開發者,放上去直接可用 - 搞定,到面透氣去了.Android 開發者,這個時候就苦逼一點了,因為 Android 的屏幕寬度比例眾多,怎麼搞?一開始 Android 開發工具提供了一個叫 Draw-9-Patch 的軟體(我就不具體描述這個軟體有多難用了,反正用過的都說坑,--- 後來這個軟體可以拖動了,1年成集成進 Android Studio,更好用了),這個軟體就是用來畫點九(.9.png)圖片,點九圖片的概念具體我就不解釋了(基主要是一個圖片四條邊,左邊和上邊可定義可擴展區域,右邊和下邊可以用來定義內容區域)然後花幾分鐘,或者補學者,慢一點10多分鐘,將一張圖片處理好,作為背景來說,可自動根據大小拉伸縮放.(最典型的案例其實是,如聊天用的氣泡背景圖)上面的問題造成這樣的可能:一張背景圖在 iOS 因為至少有兩份,而且是原圖大小可能要10多 K.但在 Android 這邊製作成點九格式之後一般是1K 不到.
說明: 在設計上,(主要內容區域)純色的背景下點九處理是再好不過了,但是有些紋理的就會導致最終的效果差強人意了. 說明2: 在 iOS 中,Xcode 5也加入了製作類似點九圖的功能叫 Slicing.(之前也可以在代碼中,設置圖片的edge 來達到點九的效果,但是一般用的情況不多- 這是由於 iOS 設備尺寸種類有限決定的)說明3: iOS 比 Android 更容易在應用中還原設計. Android 中由於尺寸眾多,導致開發者對設計還原的妥協. 所以一般的應用大小反而更低,但是美觀上略輸(針對現在,以前是輸很多),其實從某些方面來說,這也是近年影響扁平化設計的一個因素,純色遠比紋理,陰影,高光處理來得方便.
總結: Android 系統資源寬鬆靈活,使得 Android 應用體積較小,但是設計上不如 iOS 精緻這是一個很冷門,但很有趣的問題!我之前也發現了,今天特意去看了下!發現差別真的很大!就拿現在的微信來說!ios版本的241.9MB,而微信的卻只有58.4MB!這裡說明下,ios版的微信版本現在是6.6.3而安卓是6.6.2,雖然版本不同,但安裝包的差別是真的大!
這裡就需要科普下ios和安卓的文件格式了!ios的安裝包格式是「ipa」而安卓的安裝包格式是「apk」
ipa:文件實質是一個 zip壓縮包(不是 rar 或 7z 包),包含 3 個組件:payload 目錄下的 .app 目錄,這個是軟體的主程序;iTunesArtwork,實質是一個無後綴名的 png 圖片,用來在 iTunes 中顯示圖標;iTunesMetadata.plist,記錄購買者信息、售價等數據。解壓後即可使用,不需要安裝,卸載的話也只用刪除程序文件即可。
apk:APK是AndroidPackage的縮寫,即Android安裝包(apk),是安卓的應用程序的文件格式。安卓專屬,區別於iOS應用程序的ipa,pxl,deb格式,wp8(10)應用程序的xap(appx)格式。
(註:以上均來自百度百科)
兩個壓縮包解壓後如下圖,左邊是「ipa」,右邊是「apk」的
(註:以上對比圖片來自網路)
從上圖,我們看一看到,安卓版的微信安裝包只有44.12M,安裝完成後就變成了104M,變大了不少,而ios的安裝包有123M,但是安裝完成後只有121.3M,反而比原來的小了一點!所以我們看到的大小只是安裝包的大小而已,實際兩者安裝完成後的大小其實差別不大!
題主指的應該是,同一個應用在App Store上標註的APP大小跟Android應用商店上的差別很大吧。
這是因為App Store上標註的APP大小是安裝之後的大小,Android應用商店大多只是顯示安裝文件的大小。 Android安裝APP後,佔用空間其實和iOS版相差不大。
Android上微信
Android上網易雲音樂
iOS上微信
iOS上網易雲音樂
應用中的資源包括可執行程序,媒體文件及其他配置文件。
其中可執行文件和配置文件都是比較小的,配置文件幾k,可執行文件幾M。
文件比較大的就是媒體資源文件。通常就是圖標,啟動圖,引導圖,其他應用內的按鈕圖標。
1,桌面圖標:
iOS中必須要包含一套完整的桌面圖標,只支持iPhone的app需要9張桌面圖標。同時支持iPad和iPhone的App桌面圖標數量加倍。
Android中需要6個不同像素密度的桌面圖標。
2,啟動圖
這個Android 和iOS應該差別不大。
在iOS沒有LanchScreen.Storyboard出現之前,啟動圖是要iPod設備,4寸屏,3.5寸屏,4.7寸,5.5寸,iPad設備各設計一套啟動圖的。還要分橫屏豎屏的情況。
3,引導圖和按鈕圖標
iOS需要1x 2x 3x三套。
4,其他資源
iOS因為審核很嚴,不能留下載可執行文件的後門,所有功能必須在提交審核的時候打包進來,遊戲圖片資源除外。
除了以上媒體資源的區別外,iOS app通常會同時適配iPad和iPhone,apple watch。
另外iOS應用內還有寄生應用程序,比如Today 應用,共享文件應用,自定義鍵盤。
Today 應用
共享文件應用
我所知道的是ios和安卓設計層次的問題,安卓自帶所有類型的虛擬機和數據包,這些數據包就算用不上的時候也會自動運行於內存,不能關閉,好處是多而全,需要什麼數據包的時候不用重新載入,對RAM容量要求高,對存取速度要求比較低,但是由於佔用cpu資源,產生大量無效運算,使得安卓響應速度不如iOS ,也就是在主界面流暢程度不及iOS,出現划動有延遲,不跟手的現象。而iOS除了使用object-c精簡指令集使得運算大大簡化之外,內存管理機制,墓碑後台機制,使得IOS在不運行大型程序的時候負擔很小,就僅僅是一個主界面,而IOS的app都需要自帶數據包,需要的時候載入,不需要時立刻清除,對內存容量要求不高,但對存取速度要求非常高,在安卓動不動8核CPU,6G內存的今天,IOS還停留在2-3G,雙核處理器。賬面數據並不能說明安卓旗艦機硬體更好,iPhone使用的內存到目前都是速度最快的,雖然容量不到安卓旗艦的一半,但成本可能更高。而處理器單核性能才是決定軟體運行速度的基礎,核心數再多,運行一個軟體也只能用到一個,否則可能出現運算衝突的問題。IOS是一個時間段內全力全速做好一件事,把所有硬體資源都發揮到極致,而安卓也是一個時間段運行多種任務,速度嘛就別太指望了,各有各的優點,就用戶體驗而言,IOS更適合手機,在電力資源有限的手機上,減少無效運算可以保證續航,所以iPhone 的電池容量一直都不大,安卓更適合電腦,在擁有無限電量的情況下,安卓可以做更多的事,安卓手機動不動4000以上的電池容量是最簡單粗暴提高續航的方法,因為8核cpu實在是個耗電大戶。兩種系統在設計理念上存在較大差異,說不清誰好誰壞,安卓可以任意改界面,拷貝文件也可以用傳統的電腦複製粘貼的方式。iOS為了流暢,限制多,需要在電腦上運行一些輔助的軟體,類似愛思助手來實現文件傳遞,對於懂電腦,喜歡折騰的人來說,安卓更有折騰價值,IOS你直接使用就好,更適合喜歡簡單的人。
作為開發人員,雖然前幾個答案不能說錯,但是感覺沒有提到點子上
我們做遊戲使用unity開發,不管是iOS還是安卓,兩個平台使用的資源都是一樣的,編譯都用IL2CPP,iOS同時支持32位和64位,安卓同時支持arm和x86,打出來的原始包,安卓會大得多。但是iOS上傳到App Store後,包體的大小大致要大一倍,為什麼?因為App Store顯示的是手機安裝後的實際大小,而不是開發人員上傳的ipa大小,也就是說壓縮比越大的app顯示出來的大小與ipa本身差別越大。而apk上傳Google play後包體大小几乎不會有變化,這就是導致App Store的包要比安卓大很多的根本原因
另外apk是可以優化的,例如只出arm的包可以再小很多,因為現在x86架構基本上只有模擬器在用
例如騰訊的捕魚來了,在App Store將近800m,但是官網下的apk才200m
蘋果這樣做的好處,是希望用戶不要來問為什麼我的手機明明還有200m空間,下載一個80m的應用會一直失敗啊…
因為iOS應用和安卓應用有本質的不同,iOS應用開發是由源代碼直接編譯成系統可執行文件,因此編譯後的文件就非常大(可以理解為二進位文件)。而安卓應用開發之後並沒有直接編譯成系統可執行文件,而是編譯成中間層機器碼,供虛擬機解釋運行,這種中間層的機器碼並不是最終的可運行文件,文件與源碼差不多大小,因此安卓應用包相對會小很多。但在安卓5,谷歌發布了新的虛擬機,會把安卓的中間層機器碼編譯成本地可執行代碼,提高了運行效率,app不需要解釋運行,但是也會犧牲存儲的空間,因此安卓4之後的版本,同一個應用安裝之後,會佔用更多的存儲空間。這就是經常說的「拿空間換時間」還是「拿時間換空間」。
我覺著作為iOS開發人員的話,我意識到現在使用swift語言編譯,包確實會變大,因為ipa裡邊包含了一個swift支持動態庫支持文件相當的大。大約在60/70M左右(解壓縮之後),以及上傳打包的bitcode編譯參數設定(用於不同架構分發二進位文件以及LLVM編譯和優化)我認為當swift更加成熟,或蘋果整個底層用swift語言重新架構之後(也或者說完美兼容到不需要一些橋接文件支持的時候)ipa文件會變得更小,運行速度更快
因為要騙你買更貴的iPhone!因為要騙你買更貴的iPhone!因為要騙你買更貴的iPhone!因為要騙你買更貴的iPhone!因為要騙你買更貴的iPhone!因為要騙你買更貴的iPhone!
iphone的ipa可能把應用裡面的資源整合到安裝包裡面去,所以初始安裝包較大。 而android的apk可能只把重要文件打包成安裝包,而其他資源則在進入應用後再載入,所以安裝包相對較小。
推薦閱讀:
※從稻城亞丁如何拼車回迪慶,大概多少錢?
※請問如何把360雲盤的照片下載或者轉移出來?
※知乎的「不知道診所」是用來做什麼的?
※科技啟示錄
