【保姆級】包體積優化教程

語言: CN / TW / HK

市面上有很多優化方案,但是都沒有一個完整的鏈路體系,現在它來了,本文將帶你進階新高度,不管是面試、績效KPI,還是彙報宣講,都能讓你遊刃有餘!

前置必讀:

Android包體積優化(常規、進階、極致) 涵蓋各階段全面的優化方案。

1、背景

  • 提升下載轉化率
  • ...
  • 提升更新率,這個是鮮有人提到的,二次下載同樣重要,它能推動業務快速落地。

2、現狀

  • 最新版本?MB,突破80大關?100大關?競對?
  • 近6個月平均每個月增速?MB
  • 近6個月平均每個版本更新週期(7天?10天?)

輸出報表

3、目標

減少30MB & 降低30%

4、現狀具體分析

  1. 圖片佔比15%
  2. 程式碼佔比25%
  3. so檔案50%
  4. 其他10%

結合專案分析,輸出每項佔比背後的具體因素(設計花哨?業務複雜?架構合理?)

輸出餅圖

5、優化思路

  1. 壓縮參與打包的檔案
  2. 減少參與打包的檔案

6、規劃思考

  1. 如何保證穩定性?
  2. 如何長效治理?

站在更高的角度去思考問題

7、里程碑

  1. 資訊公示
  2. 確保進度穩中推進
  3. 有風險及時尋求資源支援

8、抓手

  • Android Studio
  • ApkChecker
  • ClassShark
  • ...
  • 產出具有專案特色的工具

9、技術大圖

彙報示例

9、圖片優化

手動 -> 指令碼

10、程式碼優化

11、遠端so

需要熟悉打包流程,知道Gradle的各種Task執行在幹什麼事。

打包階段,在合併apk之前,把需要遠端的so檔案上傳至遠端,然後剔除掉。

Flutter的so遠端這方面沒啥資料,提一下,原始碼搜一下FlutterLoader,繼承FlutterLoader重寫startInitialization,原理就是干預原有的so檔案載入路徑。

11.1、下載流程

沉澱通用的下載SDK

  1. 網路狀態管理
  2. 下載任務優先順序排程
  3. 斷點續傳
  4. ...

11.1.1、啟動下載(閒時)

閒時下載:使用者是無感知的,即使失敗,也不需要互動形式表現。

11.1.2、按需下載

按需下載:下載流程與閒時下載一樣,但互動表現形式不一樣,需要讓使用者感知你在幹什麼、什麼進度,提供一個loading頁承載。

自檢:不一定是我們程式碼的問題,可能是使用者網路不可用、儲存不夠等

12、測試

  1. 相容性:android 5.0-12.0
  2. 是否重複下載、是否可用(32/64)
  3. 斷網、弱網
  4. 覆蓋安裝
  5. 前臺退後臺
  6. ...

13、監控告警

13.1、埋點

  1. success
  2. error code/message
  3. so name
  4. retry
  5. demotion
  6. storage size
  7. download type
  8. download time
  9. 裝置資訊
  10. 網路資訊
  11. 使用者資訊
  12. ...

13.2、監控

  1. 下載成功率
  2. load成功率
  3. loading頁開啟成功率
  4. ...

13.3、告警

?分鐘?次失敗

告警形式包括但不限於釘釘群、微信群、簡訊、電話等。

13.4、排障

  1. 排障指南
  2. 資料庫底表查詢sql

14、長效治理

打包後置卡口的設計原理:

  1. 打包過程中會對資原始檔、程式碼檔案、jar/aar等檔案進行合併,既然知道有哪些檔案,就可以知道這些檔案的大小,就可以輸出一個file size的檔案作為當前版本的基線。
  2. 閾值配置資訊可寫死,可配置。

15、結果

  • 優化前、優化後對比
  • 競對 對比
  • 下載時間對比
  • 安裝時間對比
  • ...

輸出報表

16、未來規劃

  1. 白名單 logo?
  2. 沉澱方法論?
  3. 流程工具化、智慧化?
  4. 月度報告?
  5. 資料大盤?
  6. ...

17、價值&意義

  1. 技術:沉澱通用元件?創新flutter?
  2. 團隊:影響力?
  3. 公司:減少頻寬,全年節省?W經費
  4. 使用者:下載時間減少?安裝時間減少?
  5. 社會:每次下載減少?M流量,全年節省流量?億
  6. ...

18、思考

  1. 需要做到極致嗎?理論上啟動非必須的圖片、檔案、so都是可以遠端的。(減肥是要越瘦越好嗎?)
  2. 極簡包?

19、面試問題

  1. 為什麼選用tinypng,原理是什麼,還有其他方案嗎?
  2. 遠端so的選定標準是什麼?
  3. 支援斷點續傳嗎?
  4. 會重複下載嗎?
  5. 下載可以根據網路選擇嗎?
  6. 有檔案完整性校驗嗎?
  7. 有下載優先順序嗎?
  8. 怎麼避免64位裝置下到32位so檔案?
  9. so檔案更新之後會在裝置上與老的版本共存嗎?
  10. 兜底方案是什麼?
  11. 還有哪些可以優化的地方?
  12. ...

20、最後

  1. 頂級廚師線上烹飪,做好了自己吃,不負責喂🤪
  2. 多思考,深度思考,可以夢到的那種🧐
  3. 多搞點花樣,多體現個人部分,即使沒有技術深度
  4. 角色轉換,個人、團隊、產品、拉新運營、使用者、公司、社會...
  5. 技術價值、業務價值
  6. 別忘了三連 ~

我正在參與掘金技術社群創作者簽約計劃招募活動,點選連結報名投稿