不久前,在海外科技媒體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商店這樣的渠道存在,並且各渠道方也未必有意願做這樣在開發者層面吃力不討好的工作,所以國內用户想要體驗到如絲般順滑的應用安裝與首次打開速度,可能就只有能等國內手機廠商使出“神優化”了。