Android 最新 Support V4 包大拆分有用嗎?

来源:http://www.cnblogs.com/ganchuanpu/archive/2017/07/17/7192530.html
-Advertisement-
Play Games

Google 更新了最新的 Support Library 版本,其中最為顯眼的功能莫過於 support-v4 大拆分,然後這個拆分現在看來並沒有那麼美好。 v4 包從 2011 年開始引入,包含 ViewPager、FragmentActivity 等我們常用的功能,目前已經達到 1.3 M,G ...


Google 更新了最新的 Support Library 版本,其中最為顯眼的功能莫過於 support-v4 大拆分,然後這個拆分現在看來並沒有那麼美好。

v4 包從 2011 年開始引入,包含 ViewPager、FragmentActivity 等我們常用的功能,目前已經達到 1.3 M,Google 此次升級將這個庫拆分為 5 個子的 Module,每個 Module 可以被單獨引用。

1. 子 Module 介紹


五個子 Module 分別為:
(1) support-compat
相容一些 Framework API。如 Context.getDrawable() 和 View.performAccessibilityAction()。大小為 602k。

(2) support-core-utils
提供一系列核心的工具,如 AsyncTaskLoader 和 PermissionChecker。大小為 90k。

(3) support-core-ui
提供一系列核心的 UI,如 ViewPager、 NestedScrollView。大小為 240k。

(4) support-media-compat
android.media 相容庫,包括 MediaBrowser 和 MediaSession。大小為 248k。

(5) support-fragment
fragment 的相容庫,大小為 136k。

 

2. 子 Module 間依賴關係


PS:其中 support-annotations 為一些註解的聲明庫,如我們比較常用的 RequiresApi、UiThread、NonNull。大小為 21k。

 

從中可以看出 support-fragment 依賴於所有其他子 Module,而 support-v4 包含所有 Module,所以現在引入
compile 'com.android.support:support-fragment:24.2.0'
compile 'com.android.support:support-v4:24.2.0'
的效果是一樣的。

 

3. 問題

support-v4 拆分的好處第一眼看來便是能減少應用大小,因為你不需要引用完整的 support-v4 包,只需要引用子的 Module 即可。

比如我只用了 AsyncTaskLoader,只需要引用 support-core-utils 即可,只有 90k 哎,比原來的 1.3M 降了一個數量級多,應用減少了 1M 多哎,然而真的這樣嗎?

(1) support-compat 過大
大家知道 AAR 的大小是不包含它的依賴大小的,所以 support-core-utils 90k 大小僅表示自己的代碼和資源總大小。

從上面的依賴關係可以看出它們都依賴 support-compat,而 support-compat 有 602k,它依賴的 support-annotations 還有 21k,這樣引用 support-core-utils 實際增大大小約為 700k+。

這樣比 1.3M 還是少了一半,也不錯,然而還沒有結束。

(2) support-v4 觸角太深
v4 包從 2011 年開始出來,由於 ViewPager、FragmentActivity 等類,v4 被大量其他包引用,早已子孫遍全球,比如 v7 相容包 appcompat-v7 就依賴 v4。

我們可以嘗試通過 exclude module 可以把 v7 中 v4 去掉,然並卵,v7 依賴 FragmentActivity 這個類,而 FragmentActivity 位於 v4 的 support-fragment 中,所以依賴變成這樣:

compile ('com.android.support:appcompat-v7:24.2.0') {
    exclude module: 'support-v4'
}
compile 'com.android.support:support-fragment:24.2.0'

上面介紹過現在 com.android.support:support-fragment 與 com.android.support:support-v4 已經幾乎無異,所以對於依賴 v7 的 App 來說這次的 v4 拆分不能帶來任何依賴包體積的精簡。

初步看來 data-binding 也依賴於 support-v4。

4. 好處

這樣看來 v4 包的拆分是否是 Google 的自娛自樂,對於開發者全無好處呢?我看並不是。

(1) 這個拆分本身對於 V4 包項目來說是好事
各模塊劃清各自功能邊界,充分解耦。

(2) 也許這個拆分只是開始

  


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 2016年10月我參加了在北京舉行的DevDays Asia 2016 - Office 365應用開發”48小時黑客馬拉松“,我開發的一個Word Add-In Demo——WordTemplateHelper獲得了二等獎。在會場有幸結識了陳希章老師,在與陳老師的交流中受益良多,得知陳老師在準備一 ...
  • yahoo軍規一共分7類共35條: 1.儘量減少HTTP請求數 分類: 內容 80%的終端用戶響應時間都花在了前端上,其中大部分時間都在下載頁面上的各種組件:圖片,樣式表,腳本,Flash等等。減少組件數必然能夠減少頁面提交的HTTP請求數。這是讓頁面更快的關鍵。 減少頁面組件數的一種方式是簡化頁面 ...
  • 具體代碼如下: <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Document</title><style>*{margin:0;padding:0;font-size:14px;-webkit-user-sele ...
  • 今天看的《JavaScript設計模式》-作者:張容銘。主要看了js繼承。下麵我將看的,以及代碼貼出來,跟大家一起學習,分享。共同進步。 先來個簡單是 單繼承 多繼承 類繼承 是通過子類的原型prototype對父類實例化來實現的 缺點:父類中的共有屬性如果是引用類型就會在子類的所有實例中共擁有,一 ...
  • JavaWeb01_html basic html操作思想 使用標簽把要操作的數據包起來,通過修改標簽的屬性值,來實現標簽內數據樣式的變化 font標簽 屬性:size取值範圍1-7 color:英文單詞,十六進位數 #ffffff 標題標簽 <h1> </h1> ... <h6> </h6> 從h ...
  • 綱要 =============================== 計劃佈局,劃分整體結構 內容區域,從整體到局部,局部中的通用部分,根據上下文應用樣式 公共頭部(public header)、尾部(public footer) 公共容器(public container/inner center ...
  • [1]概述 [2]入門實例 [3]生成器 [4]HTTP模塊 [5]中間件 [6]托管靜態資源 [7]常用中間件 [8]路由 [9]路由器實例 [10]響應方法 [11]請求方法 [12]APP方法 [13]HTTPS [14]模板引擎 [15]資料庫 [16]上傳文件 [17]開發實例 ...
  • 一,工程圖。 二,代碼。 ViewController.m ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...