Support V4的拆分

2024-06-16 09:32
文章标签 v4 support 拆分

本文主要是介绍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 中,所以依赖变成这样:

上面介绍过现在 com.android.support:support-fragment 与 com.android.support:support-v4 已经几乎无异,所以对于依赖 v7 的 App 来说这次的 v4 拆分不能带来任何依赖包体积的精简。

 

初步看来 data-binding 也依赖于 support-v4。

 

4. 好处

这样看来 v4 包的拆分是否是 Google 的自娱自乐,对于开发者全无好处呢?我看并不是。

 

(1) 这个拆分本身对于 V4 包项目来说是好事
各模块划清各自功能边界,充分解耦。

 

(2) 也许这个拆分只是开始

这篇关于Support V4的拆分的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1066081

相关文章

隐私计算实训营:SplitRec:当拆分学习遇上推荐系统

拆分学习的概念 拆分学习的核心思想是拆分网络结构。每一个参与方拥有模型结构的一部分,所有参与方的模型合在一起形成一个完整的模型。训练过程中,不同参与方只对本地模型进行正向或者反向传播计算,并将计算结果传递给下一个参与方。多个参与方通过联合模型进行训练直至最终收敛。 一个典型的拆分学习例子: Alice持有数据和基础模型。Bob只有数据、基础模型和fuse模型。 Alice使用自己的数据

动态规划---单词拆分

题目: 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true。 注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。 思路:本题属于完全背包问题,字符串s的长度为背包容量,字符串列表wordDict中的每一个元素相当于物品。 动态规划五部曲: 1.确定dp数组及含义 dp数组为元素类型是布

the following classes could not be found android.support.v7.internal.

打开XML的界面时候显示 rendering problems: the following classes could not be found android.support.v7.internal.....。 后来发现http://stackoverflow.com/questions/33742114/the-following-classes-could-not-be-fou

兔子--Android Support v4,Android Support v7,Android Support v13

Android Support Library package用于高版本的特性的向下兼容。 (fragement,ViewPager) Android Support v4:  这个包是为了照顾1.6及更高版本而设计的,这个包是使用最广泛的,eclipse新建工程时,都默认 带有了。 Android Support v7:  这个包是为了考虑照顾2.1及以上版本而设计的,

兔子--Android Support v4包丢失的解决办法

在开发中,Android Support v4包丢失的解决办法: Project->properties->Java Build Path->Libraries->Add External Jars 中加入sdk目录下的extras/android/support/v4/android-support-v4.jar (如果找不到,则需要用sdk manager下载andro

Android编程之解决android-support-v4打包混淆编译的问题

转载自:http://blog.csdn.net/a348163124/article/details/19545909 如果工程引入了android-support-v4的jar类库,那么在工程打包混淆时,就会出现报错提示。例如提示你:You may need to specify additional library jars (using ‘-libraryjars’)。 这里先给出解决

Failed to resolve: com.android.support:appcompat-v7:xx.+

1、错误信息 Error:(26, 13) Failed to resolve: com.android.support:appcompat-v7:27.+ 2、环境描述 Android Studio 2.3.3 如下图所示 注意:支持的Android SDK Tools 是 25.2.4 3、场景复现 导致这个问题时本人用Android Studio 2.3.3 创建一

代码随想录:343. 整数拆分

343. 整数拆分   class Solution {public:int integerBreak(int n) {int dp[100]={0};//拆分i的最大乘积为dp[i]dp[1]=1;//初始化,主要是为了dp[2]初始for(int i=2;i<=n;i++){for(int j=1;j<i;j++){ dp[i]=max(dp[i],max(j,dp[j])*ma

【动态规划】343. 整数拆分

力扣链接:343. 整数拆分 - 力扣(LeetCode) dp数组的含义:dp[i]表示对i拆分,得到最大的积为dp[i] 递推公式:拆成两个数是 j*(i-j),拆成三个及以上是 j*dp[i-j],所以递推公式取两者大值 遍历顺序:从小到大 public int integerBreak(int n) {int[] dp = new int[n+1];dp[1]=0;dp[2]=

2157. 优秀的拆分(power)

代码 #include<bits/stdc++.h>using namespace std;int a[10001];int main(){int n,t=1,k=0;bool flag=false;cin>>n;if(n%2==1) {cout<<-1;return 0;}while(n>0){if(n%2==1){k++;a[k]=t; }n=n/2;t=t*2;}if(k