Android 最新 Support V4 包大拆分有用吗?
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) 也许这个拆分只是开始
Android 最新 Support V4 包大拆分有用吗?的更多相关文章
- 兔子--Android Support v4包丢失的解决的方法
在开发中,Android Support v4包丢失的解决的方法: Project->properties->Java Build Path->Libraries->Add E ...
- Android studio中怎么导入android.support.v4包
Android studio中怎么导入android.support.v4包 1.File点击选择projectStructure选择对应的APP然后点击Dependencies 2.点击+号,点击第 ...
- 16.(转) Android之Support v4、v7、v13的区别和应用场景
我们在项目中经常会碰到Android Support v4.v7和v13包兼容问题,所以有必要梳理下这些东西. google提供了Android Support Library package 系列的 ...
- Android快速关联V4包的方式
很多时候需要管理v4包,当然有很多种办法去关联.本人觉得最快速的方式,是通过添加配置文件的方式.只需要ctrl+c和ctrll+v就能解决了 方法如下: 1.新建一个android-support-v ...
- 关于Android studio下V4包 KeyEventCompat 类找不到问题
V4包 KeyEventCompat 类找不到问题 本文链接:https://blog.csdn.net/shanshan_1117/article/details/84344557 今天我把su ...
- android.support.v4包中的LruCache源码简读
package android.util; import java.util.LinkedHashMap; import java.util.Map; /** * A cache that holds ...
- ViewPager空指针错误,android.support.v4.view.ViewPager.onSaveInstanceState
support.v4 包为我们提供了一个非常实用的滑动控件ViewPager,在使用ViewPager时有一个需要注意的地方: 即: android.support.v4.view.ViewPager ...
- Android Studio 提示android.support.v4不存在的解决方法
最近想学习仿QQ列表的侧滑删除功能,看完资料之后,发现有一堆错误,看了一下,说是不存在android.support.v4包不存在,浪费了一个多小时,终于是找到了解决方法,便是记录下来 打开file- ...
- android.support.v4.app.NotificationCompat引用包
在导入使用了ViewPage,ActionBar,Fragment的工程后出现错误,很有可能是没有导入4.0版本的支持包.本人也是碰到这个问题,特意搜索了一下,得到解决办法如下,记录下来,以免忘记. ...
随机推荐
- Educational Codeforces Round 58 (Rated for Div. 2)
A. Minimum Integer 水 #include<bits/stdc++.h> #define clr(a,b) memset(a,b,sizeof(a)) using name ...
- 第六次 Scrum Meeting
第六次 Scrum Meeting 写在前面 会议时间 会议时长 会议地点 2019/4/10 22:00 30min 大运村1号楼6F 附Github仓库:WEDO 例会照片 工作情况总结(4.10 ...
- win10关闭右键角windows提醒图标
1.Win+R输入regedit后进入注册表编辑器: 2.直接定位到: 计算机\HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows, 先检查有无 ...
- 安装notepad++之后鼠标右键无Edit with notepad++
在鼠标右键上加入使用notepad++编辑 最近发现一个问题在安装完notepad++文本编辑器之后,在一个文本文件上右键有时候并没有出现“使用notepad++编辑的选项”,不用着急可以通过简单地修 ...
- 关于DES加密之选择更新版
数据加密算法(Data Encryption Algorithm,DEA)是一种对称加密算法,很可能是使用最广泛的密钥系统,特别是在保护金融数据的安全中,最初开发的DEA是嵌入硬件中的.通常,自动取款 ...
- J15W-J45W铜截止阀厂家,J15W-J45W铜截止阀价格 - 专题栏目 - 无极资讯网
无极资讯网 首页 最新资讯 最新图集 最新标签 搜索 J15W-J45W铜截止阀 无极资讯网精心为您挑选了(J15W-J45W铜截止阀)信息,其中包含了(J15W-J45W铜截止阀)厂家,(J15 ...
- c++ 常用的遍历,删除,分割等等文件处理函数代码实现
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9622851.html 删除文件目录函数: void myDeleteDirectory(CSt ...
- Log4J 配置文件模板及代码说明
相对而言,这个日志系统的配置就没那么随意了,而且有些功能用起来也不是那么爽,譬如动态读取配置文件.不过鉴于使用这个日志的系统还是很多,所以也写一个demo贴出来,风格跟log4j2一样,配置的说明全在 ...
- oracle系统包——DBMS_PIPE用法
DBMS_PIPE包用于在同一例程(实例)的不同会话之间进行通信:注意,如果用户要执行包dbms_pipe中的过程和函数,则必须要为用户授权. sql>conn sys/oracle as sy ...
- [转]nopCommerce 3.9 版本发行
本文转自:http://www.cnblogs.com/xoray007/p/nopCommerce-39-release.html NopCommerce中文信息地址:http://www.nopc ...