App越来越大 程序员用5分钟把一个400多MB的苹果安装包削掉了187MB
前些日子,一個手機QQ安裝包就要快900MB的事兒在網(wǎng)上吵得沸沸揚揚。
最新安裝包又大了,已經(jīng)924MB
現(xiàn)在的App真的是越來越大了。
而就在最近,國外一位程序員也遇到了同樣的困惑。
他乘的一班飛機由于沒有機上小電視,只能下載一個叫做“美聯(lián)航”的App來看視頻打發(fā)時間。
小哥一邊感嘆現(xiàn)在航空公司越來越雞賊:把成本都加到顧客頭上,一邊打開了應(yīng)用商店,結(jié)果就很詫異:
不就用來看個電影啥的嗎,一個Netflix都只有101.5MB,這App怎么是它的四倍?
作為一名iOS/Android開發(fā)工程師,小哥決定不“坐以待斃”,看看它是否真的需要這么大的空間。
說干就干,還在飛機上的小哥立刻用ipatool下載了這個App的二進制文件。
ipatool是GitHub上標星1.4k的開源項目,是一個命令行工具,可以從iOS應(yīng)用商店搜索和下載應(yīng)用程序的ipa文件包,用這個包可以進行開發(fā)內(nèi)容的一些檢查等功能。
下好以后需要把ipa擴展名改為zip,解壓之后可以看到下面這樣的目錄:
可以發(fā)現(xiàn)Frameworks就占了414.8MB,小哥解釋:應(yīng)用程序的主要內(nèi)存來源就是Frameworks,現(xiàn)在的最佳實踐都是把代碼push到這里面,還是挺正常的。
接下來進入該目錄:
以UAL開頭的框架是核心架構(gòu)、NodeMobile框架跟NodeJS功能有關(guān)、LocusLabsSDK和Mapbox是供應(yīng)地圖的,還有一些是負責(zé)身份驗證、客戶反饋的……
而視頻播放相關(guān)的框架相反其實占內(nèi)存并不多:
接著進入占空間最大的UALAppCore.framework。
經(jīng)過層層探索,小哥終于在這里鎖定了最大占存的UALAppCore。
按照他的工作經(jīng)驗,77MB這個數(shù)字還是有點反常的,他打算用nm命令深入看看這個框架的符號表(symbol)文件(nm用于顯示二進制目標文件的符號表,格式如下)。
很快他就想起來,Swift的符號需要剝離(strip,iOS框架中的術(shù)語),Objective-C則不需要。
那就查Swift的,結(jié)果還真就發(fā)現(xiàn):
沒有一個Swift框架的符號被剝離過。
而這些都沒有用,白白耗內(nèi)存:
那接下來就簡單了,寫一個bash腳本運行一下該框架就可以O(shè)K:
最后,可以看到原始框架從350MB減到了163M!
小哥表示,這一頓操作只花了不到5分鐘,沒想到可削減空間這么大,整整省掉了187MB。
等于現(xiàn)在的安裝包只有原來的不到60%了。
他猜測該安裝包仍有削減空間,不過這個結(jié)果他已經(jīng)很滿意了。
就在小哥發(fā)出這個博客之后,有網(wǎng)友評論道,還有很多安裝包其實都可以再縮減15%到30%甚至更高的空間,就比如Gmail、Outlook這些很常見的應(yīng)用。
但似乎現(xiàn)在很多開發(fā)商不是很關(guān)心這個問題,他們只想趕緊不停更新應(yīng)用:
給不給用戶省掉這幾百M的流量都一樣賺錢,為啥還要費功夫呢?
有一位嵌入式工程師就表示:當(dāng)我跟同事提起要注意這方面的優(yōu)化時,他們總是給我一個茫然的眼神。
有網(wǎng)友認為:除非各應(yīng)用商店開始管這事兒,開發(fā)商是不會做出改變的。就單說手機廠商就很樂意看到這一場面,內(nèi)存不夠就可以去他們那買新手機了。
他還發(fā)現(xiàn)谷歌Play Store好像就不顯示應(yīng)用程序大小。
而一些銀行App在這個問題上尤其嚴重,因為他們知道你不會輕易換銀行。
你怎么看?
總結(jié)
以上是生活随笔為你收集整理的App越来越大 程序员用5分钟把一个400多MB的苹果安装包削掉了187MB的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 续航300公里!五菱MINIEV GAM
- 下一篇: Intel回应《艾尔登法环》显卡驱动延期