乐虎游戏|乐虎国际登录|欢迎你

Android Support Library介绍

日期:2020-03-13编辑作者:计算机资讯

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

***转载、引用请标明出处***

本文出自zhh_happig的简书博客

 

图片 1open_dev

 

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

一  Android support v4如何支持低版本

Android support v4这个包是为Android 1.6(API版本为4)及以上的版本设计的(从android-support-v4-24.2.0开始,V4包支持的最低版本是Android 2.3即API Level 9),该支持库可以让在旧版本 Android 平台上运行的应用,支持新版本平台推出的功能。

举个Fragment的例子说明一下,假设我们某个应用支持的最低版本是:minSdkVersion=8,但是应用中用到了android.app.Fragment类,而Fragment类是在Android 11的时候才开始加入的,那么当我们的应用运行在Android 11以下的手机就会出现问题,那么如何能让Fragment在低于11的手机上也能正常使用呢?我们需要引入android.support.v4包中android.support.v4.app.Fragment来替换掉原来用到的android.app.Fragment类,android.support.v4.app.Fragment和android.app.Fragment有一样的效果,但是它能在低于11的手机上正常使用,这就是support支持库提供的功能,能兼容低版本的Android平台。

android.support.v4包支持的最低版本是Android 4,v4的意思是就是支持最低版本是4,如果你要使用Fragment,最低版本只兼容到4了。

拿上面的例子来说:应用中的minSdkVersion=8,为了兼容低版本的手机,引入了android.support.v4包中android.support.v4.app.Fragment。当应用在不同版本手机运行,android.support.v4是怎样工作的呢?

a.当运行在Android版本是4-10手机上,手机Android框架没有提供Fragmeng提供的功能:则android.support.v4支持库会调用自身android.support.v4.app.Fragment;

b.当运行在Android版本是11及以上的手机上,手机Android框架提供了Fragmeng提供的功能:则android.support.v4支持库会调用手机Android框架android.app.Fragment。

也就是说,如果应用调用其中一个支持类的方法,则支持库的行为将取决于运行应用的手机的Android 版本。如果手机Android框架提供必要的功能,则支持库将通过调用手机Android框架执行任务。如果应用在旧版本的 Android 上运行,且手机Android框架未提供所需的功能,则支持库自身可能会尝试提供相应的功能或什么都不做。无论是哪一种情形,应用通常都不需要检查其在哪一版本的 Android 上运行,而是通过支持库执行检查并选择适当的行为。

还有一些android.support.v4中类,比如ViewPager等,不管在Android那个版本,都没有这个类,所以要用到ViewPager,就必须引用android.support.v4包了。

v4 Support Library


 

这个库是为Android 1.6(API版本为4)及以上的版本设计的,它包含大部分高版本中有而低版本中没有的API,包括application components、user interface features、accessibility、data handling、network connectivity、and programming utilities,下面是对V4中的一些关键API的介绍:

 

App Components

Fragment:通过它可以让同一个程序适配不同的屏幕。
NotificationCompat:支持更丰富的通知形式;

LocalBroadcastManager:

用来在同一个应用内的不同组件间发送Broadcast。

  • 发送的广播只会在自己App内传播,不会泄露给其他App,确保隐私数据不会泄露
  • 其他App也无法向你的App发送该广播,不用担心其他App会来搞破坏
  • 比系统全局广播更加高效

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:增加了对数据的异步加载的支持,该库还提供了该类的具体实现,包括CursorLoader 和 AsyncTaskLoader类;
FileProvider:应用间的私有文件共享。

 

在你下载了Android Support Library以后,这个库放在<sdk>/extras/android/support/v4/目录下。这个库的Gradle建造脚本依赖标识符如下:

com.android.support:support-v4:18.0.+

这个依赖符号指定了发布版本为18.0.0或更高。

 

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

二  Android support v4版本介绍

注:随着系统的迭代Android 1.6的设备已经很少了,官方在Support Library 24.2.0版本的时候移除了对Android 2.2(API Level 8)及以下版本的支持,所以从Android Support v4 24.2.0开始,V4包支持的最低版本是Android 2.3即API Level 9

我们可以发现android-support-v4后面都跟着版本号:比如android-support-v4-23.0.0 (对应Android Api Level 23),如果不清楚这个版本号,在开发中也会带来很多问题。

最常见的问题就是已经引入了android-support-v4包,但是某个类或者某个方法却找不到,这个原因应该就是版本号不对了。

比如我们在targetSdkVersion < 23的时,用到android.support.v4.content.PermissionChecker这个类来检查权限,但是引入了android-support-v4-22.2.1.jar后,却找不到PermissionChecker类,原因就是PermissionChecker是23.0.0版本才加入的,所以引入android-support-v4-23.0.0.jar就行了。

遇到这种问题,可以去Android官方中文网站找到对应的类或方法,看看它们加入的版本:added in version,然后在引入对应的support包

图片 2

注:在android-support-v4-24.2.0及之后的版本中,为了增强效率和减小APK的大小起见,Android将android-support-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包。

Multidex Support Library


该support包用于使用多dex技术编译APP,当一个应用的方法数超过65536个时需要使用multidex配置

在你下载了Android Support Library以后,这个库放在<sdk>/extras/android/support/multidex/目录下。这个库的Gradle建造脚本依赖标识符如下:

 

com.android.support:multidex:1.0.0

 

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

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

三  Android support v4关键api

v4 compat library 

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

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

v4 core-utils library

提供一系列核心的工具类,如 AsyncTaskLoader 和 PermissionChecker,在AS中的依赖方式如下,按自己需求选择合适版本:

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

core-ui library

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

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

v4 media-compat library

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

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

v4 fragment library

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

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

拆包并不一定代表能够真的解决效率和减小APK的大小问题,V4包拆分后的5个子包有依赖关系。即拆包之后,要用到某个子包的API时,可能还得依赖其它的子包,这也是有坑的地方。当我们编译没有问题,运行出现Do not find class之类的错误时,一定要看看是不是子包之间的依赖关系造成的,如果是引入相应的子包。出现这个依赖问题,再加上版本可能出现问题,对于新手来说,比较棘手,建议新手全部导入。

以上文章内容,是本人工作中的总结,供大家参考,有误的地方还请指正。

v7 Support Libraries


针对Android 2.1(API Level 7)及以上的版本谷歌提供了一系列的support包,这些support包各自对应着特定的功能,每一个都可以单独地被引用。

 

 v7 appcompat library

 这个库添加 Action Bar 用户界面设计模式的支持。这个库包括支持material design的用户界面实现。

注意:这个库依赖于v4 Support Library。

这里有一些包含在v7 appcompat库中的关键类:

ActionBar:提供ActionBar用户界面模式的实现

AppCompatActivity :增加一个Activity类,可以用作支持ActionBar实现的Activity的基类。

AppCompatDialog :添加一个对话框类,可以作为一个appcompat主题对话框基类。

ShareActionProvider :增加一个标准化的共享动作(如电子邮件或发送到社交网站),包含在ActionBar中。

 在你下载了Android Support Library以后,这个库放在<sdk>/extras/android/support/v7/appcompat/目录下。这个库的Gradle建造脚本依赖标识符如下:

 

com.android.support:appcompat-v7:21.0.0

 

v7 cardview library

 

这个库添加cardview widget的支持。

 

 

 在你下载了Android Support Library以后,这个库放在<sdk>/extras/android/support/v7/cardview/目录下。这个库的Gradle建造脚本依赖标识符如下:

 

com.android.support:cardview-v7:21.0.0

 

 

v7 gridlayout library

 

这个库添加了对 GridLayout类的支持,这个类允许你使用矩形单元的网格来排列用户界面元素。

 

在你下载了Android Support Library以后,这个库放在<sdk>/extras/android/support/v7/gridlayout/目录下。这个库的Gradle建造脚本依赖标识符如下:

 

com.android.support:gridlayout-v7:21.0.0

 

 

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

v7 mediarouter library

这个库提供了MediaRouter, MediaRouteProvider和相关媒体类,支持Google Cast。

在你下载了Android Support Library以后,这个库放在<sdk>/extras/android/support/v7/mediarouter/目录下。这个库的Gradle建造脚本依赖标识符如下:

com.android.support:mediarouter-v7:21.0.0

 

 v7 palette library

 这个库添加了对 Palette 类的支持,这个类允许你从一个图像中提取突出的颜色。

 在你下载了Android Support Library以后,这个库放在<sdk>/extras/android/support/v7/palette/目录下。这个库的Gradle建造脚本依赖标识符如下:

 

com.android.support:palette-v7:21.0.0

 

v7 recyclerview library

 这个库添加了对 RecyclerView 类的支持,这个类提供了recyclerview widget支持。

  在你下载了Android Support Library以后,这个库放在<sdk>/extras/android/support/v7/recyclerview/目录下。这个库的Gradle建造脚本依赖标识符如下:

com.android.support:recyclerview-v7:21.0.0

 

 

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

v8 Support Library 


 这个库是为Android 2.2 (API level 8)或更高版本的使用设计的。

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

 

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

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

v8 renderscript library

加入了对  RenderScript 计算架构的支持。

 

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

v13 Support Library 


 

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

它添加了对  Fragment用户界面样式(利用FragmentCompat类)和额外的fragment支持类的支持。

 

在你下载了Android Support Library以后,这个库放在<sdk>/extras/android/support/v13/目录下。这个库的Gradle建造脚本依赖标识符如下:

com.android.support:support-v13:18.0.0

 

 

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

v17 Leanback Library


 

 android.support.v17.leanback包,为电视设备的用户界面提供支持。它提供了一些重要的小部件的电视应用程序。

 在你下载了Android Support Library以后,这个库放在<sdk>/extras/android/support/v17/leanback目录下。这个库的Gradle建造脚本依赖标识符如下:

com.android.support:leanback-v17:21.0.0

 

 

图片 3Android Support Library更新状况

Annotations Support Library


 

一个支持注解的support包。

在你下载了Android Support Library以后,这个库放在<sdk>/extras/android/support/annotations目录下。这个库的Gradle建造脚本依赖标识符如下:

com.android.support:support-annotations:22.0.0

  

 

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

Design Support Library 


 

一个支持material design的support包。

 

 

 

 

 

 

 

 

图片 4Android Support Library汇总

这个包是为Android 2.3及以上的版本设计的(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介绍

关键词:

Maven pom 详明

Resources.../Resources Maven 属性默认只有在 pom.xml 中才会被解析,对于放在 src/main/resources/ 目录下的文件,maven 是需要通过...

详细>>

计算机:RxJava2.0(一)

Outline 特此声明:本文为转载文章!尊重原创的劳动果实,严禁剽窃 本文转载于:http://www.jianshu.com/p/464fa025229e 出自于...

详细>>

Rxjava2~zip~学渣带你扣rxjava2~ map操作符到底干了什么

prestatic ObservableString sampleObservable() {returnObservable.defer(new CallableObservableSource? extendsString() {@Overridepublic ObservableSource? ...

详细>>

RXJava的使用<二>

vankeservice 前言 RxJava和Retrofit也火了一段时间了,不过最近一直在学习ReactNative和Node相关的姿势,一直没有时间研究这...

详细>>