不久前,在海外科技媒體GSMArena關於手機儲存空間的調查中,絕大多數參與者友認為他們的下一部手機需要有128GB和256GB的空間。但這一結果就在4年前,主流觀點還是隻需要64GB就夠了。
其實關於這個問題,用“安迪-比爾定律”來解釋非常恰當,就是硬體提高的效能很快被軟體消耗掉,而整個問題其中一個很重要的原因,就是APP的體積越來越大,曾經小巧玲瓏的APP已經非常少見。隨著APP的體積越來越大,下載與安裝的速度自然也就越慢,首次執行時對於硬體的壓力同樣也就越大。
以微信這個國民級APP為例,在其誕生的2011年,還只是一款功能非常簡單的社交軟體,但如今的微信卻已經是一個集聊天、直播、影片、小程式等眾多功能的超級APP。並且由於微信這類超級APP的不同元件或框架往往都是獨立開發,如果將每一個額外的元件都整合在一起勢必還會產生額外的開銷,而程式碼量的增大也就意味著APP體積會越大。
面對這一情況,谷歌在Play商店上選擇使用基於大資料的全新安裝方式,來加快APP安裝、開啟和首次執行的時間。日前來自開發論壇XDA的訊息顯示,谷歌這項新技術將被命名為“App install optimization”,並且是一項可選功能。在其被開啟後,將會收集每一位使用者即將安裝APP的相關資料,並會監視使用者使用APP的哪些部分,以及哪些部分未被使用,從而形成大資料來判斷APP解壓執行後最重要的一部分檔案是哪些。
例如當用戶首次下載Instagram這個圖片社交軟體時,可能會花上十分鐘來設定自己的個人資料並找到朋友。如果大量使用者屬於這種情況,那麼Play商店會先下載Instagram的對應部分,而發帖或故事檢視功能模組則將暫時不被安裝,直到使用者嘗試使用它們或網路連線情況良好時才會繼續安裝。目前,Play商店的25.5.13版本中已經引入了App install optimization功能,但尚不清楚其將於何時正式啟用。
這也就意味著,谷歌希望透過儘可能收集Play商店使用者下載APP的檔案資訊,來整理出不同類別APP在首次開啟時所需要的檔案,並從中總結出相應的規律。並且谷歌方面也已經表示,這一功能將不會收集使用者的任何隱私資料,例如電子郵件地址、姓名和本地儲存內容等。
那麼谷歌是如何實現這個蘋果App Store都還沒有用上的功能呢?要知道,Android應用盡管是以Java之後的Kotlin作為官方開發語言,但準確來說Android並不一定要用Java來開發,只是用Java更快更方便而已。例如知名的2D手遊引擎Cocos2d-X,其實就是使用C++寫邏輯,然後利用NDK進行交叉編譯成為APK檔案。
開放的開發環境造就了Play商店乃至國內安卓渠道中的應用,最終都是以APK檔案呈現,但其背後所使用的開發技術卻可以說是五花八門。所以在這樣的情況下即便是有大資料與強力演算法,要從如此繁雜的APP中找出規律,可以說是無異於天方夜譚。
事實上App install optimization得以問世的背後,是谷歌在2018年推出的一種名為Android App Bundle的全新應用程式打包方式。在經過了兩年多的推廣後,讓Play商店上的APP上傳逐漸有了標準化的趨勢。
在Android App Bundle這一打包方式逐漸成為潮流後,APP的打包也成為了模組化、標準化的形式。眾所周知,大資料雖然看上去非常高大上,但在最基礎的資料標註、資料獲取、特徵提取、模型設計和訓練上,還是需要人工打標籤的方式來實現。而所謂的“資料標註員”,就是生產大量可供計算機深度學習訓練資料的職業,這是一項非常要求重複性機械式的枯燥工作。
顯而易見,讓谷歌自己來僱傭龐大的人力完成Play商店上APP的資料標註,無疑是不現實且不經濟的,所以Android App Bundle就是其利用在Android的領導地位,以及Play商店在應用分發上的壟斷地位,所提出帶有半強制性的措施。並且Android App Bundle與傳統應用打包模式最大的不同,就是前者可以將APK生成及簽名交由Play商店而不是開發者來完成,開發者就無需再編譯、簽署和管理多個APK,以支援各種不同的裝置。
以往使用者從應用分發渠道中拿到的APK包,其實是一個涵蓋了針對不同螢幕、SoC的整合包,開發者需要將不同螢幕大小、SoC型號、語言等資源都打包到APK中,即便你的手機不需要非中文及低分辨的相關資源,同樣也需要下載。 但在使用Android App Bundle這一機制後,開發者就能實現“千機千面”的專屬App Bundle(應用束),使得APK的體積有著顯著的縮減。
Android App Bundle是谷歌推動模組化應用開發技術的組成部分,它可以將一個傳統的APP拆分成三個不同部分。這三部分則分別為,包含了提供應用基本功能的Base APK、適配當前手機螢幕解析度資源的Configuration APK,以及包含應用中某項功能程式碼和資源的Dynamic feature APK。
這就使得使用者在Play商店下載一個透過Android App Bundle方式打包的應用時,只會下載Base Module對應的APK檔案,此後如果使用者要用到其他功能,系統就會指揮相關APP使用Dynamic Feature Module(動態特性模組),用類似網路遊戲中玩家到了某個新地圖才開始下載地圖資源一樣,下載這個APP的其他功能。
所以在這一技術的加持下,使用者下載APP時,Play商店的新動態機制就只會傳輸適配裝置的專屬程式碼和資源。而Play商店中看到的安裝包體積越小,下載速度自然也就越快,同時也節省了裝置的儲存空間,並且開發者甚至可以實現按條件分發應用,讓一些元件排除在一些裝置的初始安裝之外,避免將無用功能安裝到使用者的手機上。
有了模組化的應用打包方式,Play商店自然就能更明確地找出APP的共性,進而發現哪些功能是使用者最希望率先體驗的,並最終優先載入相應的模組。不過考慮到國內安卓分發渠道中還沒有Play商店這樣的渠道存在,並且各渠道方也未必有意願做這樣在開發者層面吃力不討好的工作,所以國內使用者想要體驗到如絲般順滑的應用安裝與首次開啟速度,可能就只有能等國內手機廠商使出“神最佳化”了。