Android Support Library详细介绍

更多原创文章和优质资源请关注公众号:


open_dev

网上对Android Support Library中各个依赖包介绍的中文资料太少了,结合官方文档和有限的参考资料做了一次总结,有描述得不对的地方还请指正。

一、主工程、依赖包、jar包、android.jar、Android Support Library的关系

一个Android工程通常包括主工程和依赖包,依赖包又有两种形式:

  • 一种是单独的工程或者aar:在主工程的配置文件中指明主工程和依赖包的依赖关系之后,就可以在主工程中正常使用依赖包的类和接口了,这种适合于依赖包中有图片资源、so等不能打包到jar包中或者依赖包需要频繁改动的情况,比如Nine Old AndroidsPullToRefreshFancyCoverFlow等;

  • 另一种是jar包:放在主工程的libs文件夹下,这种通常是依赖包中只有代码,比如Fastjson.jarVolley.jarGson.jar等。

为了程序能够编译通过并在设备中正常运行,主工程除了依赖第三方的工程和jar包之外,还需要依赖安卓系统本身的代码,也就是我们在sdk的每个版本中看到的android.jar,这里面集成了android的所有API,随着android sdk的升级,高版本的sdk中会增加很多新的API,比如ActionBar、Fragment、RecyclerView等,如果在低版本的sdk中需要使用高版本新增的API怎么办?不可能去更新移动设备中的android.jar吧,因为硬件设备集成的sdk版本是固定的,android.jar也是固定的,所以最好的方式是将新增的API以依赖包的形式集成到需要使用高版本API的应用程序中。

谷歌早已经考虑到了向后兼容的问题,所以推出了一系列脱离于android.jar的依赖包,比如常见的android-support-v4、appcompat-v7等。这些依赖包可以直接集成到应用程序中,依赖包有的是jar包,有的是独立的工程。如果你用的IDE是Android Studio,这些库已经上传到了maven仓库,在build.gradle中直接依赖即可。

Android Support Library除了向后兼容的作用外,还有其它方面的好处:

  • 提供不适合打包进framework的功能:Android官方对App开发提供了推荐设计,希望Android应用都有相对一致的交互设计来减少用户的使用成本,希望三方App类似系统应用从而完美融入到Android生态系统中。但是这都仅仅是推荐,不要求开发者一定要这样,如果有这种需求就可以使用官方支持包提供的这些功能,避免重复造轮子。如支持包中的DrawerLayout、Snackbar等类都是这种情况。

  • 为了支持不同形态的设备:通过使用支持包来在不同形态设备上提供功能,如手机、电视、可穿戴设备等。

各个依赖包可以在“<sdk>/extras/android/support/”文件夹下查看,如果该路径下没有,打开SDK Tools更新SDK即可。

二、各个版本的Android Support Library介绍

Android 各个Support Library支持的最低版本如下:

Android Support Library更新状况

目前为止Android Support Library包含的依赖包有:

Android Support Library汇总

1、V4 Support Libraries

这个包是为Android 2.3(API版本为9)及以上的版本设计的(Support V4首次发布是在2011年,它支持的最低版本是Android 1.6即API Level 4,V4的名字也是根据其支持的最低API版本来的,随着系统的迭代Android 1.6的设备已经很少了,官方在Support Library 24.2.0版本的时候移除了对Android 2.2(API Level 8)及以下版本的支持,所以从Android Support Library 24.2.0开始,V4包支持的最低版本是Android 2.3即API Level 9),它包含大部分高版本中有而低版本中没有的API,包括application components、user interface features、accessibility、data handling、network connectivity、programming utilities,下面是对V4中的一些关键API的介绍:

App Components:

  • Fragment:一个专为解决Android碎片化的类,通过它可以让同一个程序适配不同的屏幕。

  • NotificationCompat:支持更丰富的通知形式;

  • LocalBroadcastManager:适合于应用内的消息传递。

User Interface:

  • ViewPager:一个可以管理子view的viewgroup,用户可以在各个view之间自由切换,这个在很多应用中都有使用到;

  • PagerTitleStrip:一个关于当前页面、上一个页面和下一个页面的一个非交互的指示器。它经常作为ViewPager控件的一个子控件被被添加在XML布局文件中。

  • PagerTabStrip:一个关于当前页面、上一个页面和下一个页面的一个可交互的指示器。它经常作为ViewPager控件的一个子控件被被添加在XML布局文件中。

  • DrawerLayout:抽屉

  • SlidingPaneLayout:用于实现两列面板的切换,在UI最上层的使用提供了一个水平的,多个面板的布局。左边的面板可以看作是一个内容列表或者是浏览,右边的面板的任务是显示详细的内容。

Accessibility:

  • ExploreByTouchHelper:帮助自定义View实现accessibility的帮助类;

  • AccessibilityEventCompat、AccessibilityNodeInfoCompat、AccessibilityNodeProviderCompat、AccessibilityDelegateCompat:Accessibility的适配类

Content:

  • Loader:异步加载数据;

  • FileProvider:应用间的私有文件共享。

关于V4的更多API介绍可以参见:Support V4 Libraries API References

在Android Support Library 24.2.0及之后的版本中,为了增强效率和减小APK的大小起见,Android将V4包从一个独立的依赖包拆分成v4 compat library、v4 core-utils library、v4 core-ui library、v4 media-compat library和v4 fragment library这5个包,考虑到V4的向后兼容,你在工程中依赖V4这个依赖包时默认是包含拆分后的5个包的,但为了节省APK大小,建议在开发过程中根据实际情况依赖对应的V4包,移除不必要的V4包。

拆分后的5个V4包如下:

V4拆包

v4 compat library

兼容一些 Framework API,如 Context.getDrawable() 和 View.performAccessibilityAction(),大小为 602k,在AS中的依赖方式如下:

    compile 'com.android.support:support-compat:24.2.1'

v4 core-utils library

提供一系列核心的工具类,如 AsyncTaskLoader 和 PermissionChecker,大小为 90k,在AS中的依赖方式如下:

    compile 'com.android.support:support-core-utils:24.2.1'

v4 core-ui library

提供一系列核心的 UI,如 ViewPager、 NestedScrollView,大小为 240k,在AS中的依赖方式如下:

    compile 'com.android.support:support-core-ui:24.2.1'

v4 media-compat library

android.media 兼容库,包括 MediaBrowser 和 MediaSession,大小为 248k,在AS中的依赖方式如下:

    compile 'com.android.support:support-media-compat:24.2.1'

v4 fragment library

跟fragment相关部分,大小为 136k。V4这个子库依赖了其他4个子库,所以我们一旦依赖这个库就会自动导入其他4个子库,这跟直接依赖整个support-v4效果类似,在AS中的依赖方式如下:

compile 'com.android.support:support-fragment:24.2.1'

拆包并不一定代表能够真的解决问题,V4各子包的依赖关系如下,可见即使拆包之后,要用到V4中的某个API时,依赖包并没有减小多少:

V4拆包后各子包的依赖关系

2、V7 Support Libraries

&emsp;V7和V4一样,同样包含多个依赖包,但和V4不同的是,V7下的多个子包并不是后面拆分开来的,而是最初发布时就以各个独立库的形式发布的。它是针对Android 2.3(API Level 9)及以上的版本谷歌提供了一系列的support包(和V4包的命名一样,V7最初支持的最低版本是Android 2.1即API Level 7,所以称其为V7,同样在Android Support Library 24.2.0将V7支持的最低版本改为Android 2.3即API Level 9了),这些support包各自对应着特定的功能,每一个都可以单独地被引用。

v7 appcompat library

这个包支持对Action Bar接口的设计模式、Material Design接口的实现等,核心类有ActionBar、AppCompatActivity、AppCompatDialog、ShareActionProvider等,在AS中的依赖方式如下:

    compile 'com.android.support:appcompat-v7:24.2.1'

注意:这个包需要依赖android-support-v4。

v7 cardview library

支持cardview控件,使用Material Design语言设计,卡片式的信息展示,在电视App中有广泛的使用,在AS中的依赖方式如下:

    compile 'com.android.support:cardview-v7:24.2.1'

v7 gridlayout library

一个支持GridLayout布局的support包,在AS中的依赖方式如下:

    com.android.support:gridlayout-v7:24.2.1

v7 mediarouter library

一个用于设备间音频、视频交换显示的support包,在AS中的依赖方式如下:

    com.android.support:mediarouter-v7:24.2.1

v7 palette library

该库提供了palette类,使用这个类可以很方便提取出图片中主题色。比如在音乐App中,从音乐专辑封面图片中提取出专辑封面图片的主题色,然后将播放界面的背景色设置为封面的主题色,随着播放音乐的改变,播放界面的背景色也会巧妙的跟着改变,从而提供更好的用户体验。,在AS中的依赖方式如下:

    com.android.support:palette-v7:24.2.1

v7 recyclerview library

核心类是RecyclerView,用于替换ListView、GridView,具体可以查阅RecyclerView方面的资料,在AS中的依赖方式如下:

    com.android.support:recyclerview-v7:24.2.1

v7 Preference Support Library

一个用于支持各种控件存储配置数据的support包,比如CheckBoxPreference和ListPreference,在AS中的依赖方式如下:

    com.android.support:preference-v7:24.2.1

3、V8 Support Library

&emsp;V8 Support Library支持的最低SDK版本是Android 2.3即API Level 9。

v8 renderscript library

一个用于渲染脚本的support包,在AS中按照如下方式配置即可正常使用:

    defaultConfig {
        renderscriptTargetApi 18
        renderscriptSupportModeEnabled true
    }

4、V13 Support Library

这个包的作用主要是为Android3.2(API Level 13)及以上的系统提供更多地Framgnet特性支持,使用它的原因在于,android-support-v4中虽然也对Fragment做了支持,由于要兼容低版本,导致他是自行实现的 Fragment 效果,在高版本的 Fragment 的一些特性丢失了,而对于 v13以上的 sdk 版本,我们可以使用更加有效,特性更多的代码,在AS中的依赖方式如下:

    com.android.support:support-v13:24.2.1

5、Multidex Support Library

该support包用于使用多dex技术编译APP,当一个应用的方法数超过65536个时需要使用multidex配置,关于multidex的更多信息,可以参见如何编译超过65K方法数的应用,在AS中的依赖方式如下:

    compile 'com.android.support:multidex:1.0.0'

6、Annotations Support Library

一个支持注解的support包,在AS中的依赖方式如下:

    compile 'com.android.support:support-annotations:24.2.1'

7、Design Support Library

一个用于支持Design Patterns的support包,它提供了Material Desgin设计风格的控件,在AS中的依赖方式如下:

    com.android.support:design:24.2.1

8、Custom Tabs Support Library

一个提供了在应用中添加和管理custom tabs的support包,在Google IO 2015中有介绍,在AS中的依赖方式如下:

    compile 'com.android.support:customtabs:24.2.1'

9、Percent Support Library

一个提供了百分比布局的support包,通过这个包可以实现百分比布局,在AS中的依赖方式如下:

    com.android.support:percent:24.2.1

三、参考资料

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,569评论 25 707
  • 在之前的开发经历中经常需要导入一些如v4、v7、v13等Android官方的支持包,遇到这些情况时都是网上搜索一下...
    都有米阅读 15,753评论 34 141
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,087评论 2 44
  • 昨晚和朋友聊了聊旅行,却悲哀地想起自己很久都没一次正经的旅行了。所谓正经的旅行,想来应该是身体与灵魂都在路上的,身...
    贫僧法号铲屎阅读 226评论 0 0
  • 心情是最无法捉摸和定位的东西,因为它随着人的情绪变化而变化,而人又是多变的动物,谁都不知道下一秒会是什么鬼样子。我...
    前行20年阅读 353评论 0 0