????大部分在應(yīng)用商店上架過App或者進(jìn)行過縮包優(yōu)化的開發(fā)者可能都知道简软,在Android平臺上,APK瘦身方面的優(yōu)化手段其實(shí)不多述暂,無非壓縮資源痹升、刪除無用資源、代碼混淆畦韭、在線資源庫疼蛾、微信壓縮打包工具、插件化等艺配,充其量只是一些裁裁剪剪察郁,并沒有從根本上解決安裝包過大的問題。
? ? 但Google I/O 2018之后转唉,這個問題可能不會再困擾開發(fā)者了皮钠,因?yàn)镚oogle官方推出了一套堪稱神器(事實(shí)上谷歌官方稱它為artifact,就是“神器”)的編譯赠法、發(fā)布APK機(jī)制:Android App Bundles麦轰,直譯為“應(yīng)用束”。
? ? 事實(shí)上期虾,一開始接觸到App Bundles 這種機(jī)制原朝,聽到官方人員“夸夸其談”的介紹(Youtube有介紹視頻),尤其是了解到它存在的限制镶苞,比如需要加入谷歌的測試計(jì)劃喳坠,版本限制(5.0以上),需要在谷歌商店的Play Console(應(yīng)用控制臺)注冊自己的App茂蚓,只能通過Google Play發(fā)布等壕鹉,我是很嫌棄的,因?yàn)楣雀璨⒉皇菦]有這種雷聲大雨點(diǎn)小的先例聋涨。
????然而當(dāng)我真的深入了解了Android App Bundles 和它的配套發(fā)布機(jī)制:Dynamic Delivery(動態(tài)交付)晾浴,還是要說一聲“谷歌爸爸真厲害”。
????其實(shí)上面的限制在長期來看并不是問題牍白,首先脊凰,5.0以上的Android app,支持App Bundles 和Dynamic Delivery,應(yīng)用體積大大減少狸涌,而對于5.0以下的版本切省,Google也有相應(yīng)的減少體積的方法,只是效果沒有那么明顯帕胆。其次朝捆,對于針對國內(nèi)市場的開發(fā)者而言,以中國如此蓬勃的Android生態(tài)來看芙盘,恐怕不久各大應(yīng)用商店會有類似的機(jī)制出現(xiàn)脸秽,因此提前了解好處大大滴有儒老。
????Android App Bundles
? ? Android App Bundle是一種新的應(yīng)用編譯记餐、上傳贷盲、發(fā)布形式,它包括了開發(fā)者應(yīng)用中所有編譯過的代碼剥扣、資源(例如圖片铝穷、語言、字符串資源等)曙聂、屏幕大小晦炊、硬件架構(gòu)等等。使用此種格式發(fā)布的應(yīng)用宁脊,用戶在應(yīng)用商店看到的包的大小精簡到極致断国。App Bundle需要配合Dynamic Delivery(動態(tài)交付)一起使用榆苞,原理在下文一起介紹。
? ? Dynamic Delivery
? ? 動態(tài)交付坐漏,是Google Play提供的新的app服務(wù)模塊,配合App Bundle使用街夭,可以針對不同用戶的設(shè)備生成并提供優(yōu)化過的APK躏筏。從而用戶可以僅僅下載他們運(yùn)行此App需要用到的代碼和資源板丽。開發(fā)者不再需要針對多種設(shè)備去編譯趁尼,簽名猖辫,管理不同的APK(Multi-APK機(jī)制)乃正,用戶可以下載體積更小的,優(yōu)化過的APK荧飞。
? ? 比如,一個英語國家叹阔,谷歌手機(jī)Pixel 2L的使用者传睹,僅僅需要下載基礎(chǔ)代碼,xxxhdpi的資源欧啤,en的語言包,arm64硬件架構(gòu)等店印,而不再需要其他不必要資源倒慧。
????普通的apk發(fā)布流程:
????使用App Bundle + Dynamic Delivery的應(yīng)用發(fā)布流程:
????動態(tài)交付的功能不僅限于此纫谅。開發(fā)者可以為應(yīng)用的工程添加動態(tài)功能模塊炫贤,包含在App Bundle中付秕。這些模塊包含了用戶首次下載安裝應(yīng)用不需要用到的功能和資源。在集成了 Play Core Library 的SDK后俩垃,我們可以在之后請求用戶去安裝這些動態(tài)功能模塊汰寓。通過動態(tài)交付,Google Play僅僅只會提供針對這臺設(shè)備所需要的代碼和資源(某種語言有滑,某種分辨率的資源,對應(yīng)的ABI)望艺。
? ??對于使用Android Studio開發(fā)的App苛秕,大多數(shù)工程很輕松就可以支持動態(tài)交付并建立App Bundle應(yīng)用束找默。但動態(tài)功能模塊還在測試中,支持這個功能可能需要對應(yīng)用進(jìn)行重構(gòu)店煞。
? ? 篇幅所限风钻,本文章僅介紹了應(yīng)用束和動態(tài)交付的機(jī)制和原理,假如有比較多的朋友關(guān)注和喜歡這項(xiàng)技術(shù)骡技,我將在之后的文章繼續(xù)分析它的實(shí)現(xiàn)方式、兼容性問題和翻譯相關(guān)文檔等囤萤。
? ? 也可以在以下鏈接了解更多:
? ??谷歌Android開發(fā)者