概述:
Android Support Library包是一组代码库, 它提供了向后版本的frameworkAPI的兼容, 这些代码库实现的效果和只能在指定版本中使用的API一样好. 每个Support Library都是指定版本的兼容库. 这种设计的意义在于, 让我们的APP可以使用库的功能并依然可以兼容Android 1.6及更高的版本. 本文介绍了关于Support Library功能的基本信息, 以及在开发环境中如何使用它们.
在Android的工程中使用Support Library是开发者想要支持各种目标版本的最佳方法. 使用库的功能可以让我们的APP的界面更加丰富, 提高更好的稳定性以及拓宽目标用户的覆盖范围. 如果使用Android的代码模板工具, 我们可以注意到所有的Android APP模板默认情况下都包含一个或者更多的Support Library.
每个Support Library都对应一个Android的目标版本并提供了不同功能的组合. 为了高效的使用这些库, 搞清楚我们要使用哪些功能以及每个版本的库支持哪些功能是十分重要的.
Support Library功能:
Android Support Library(以下称为”支持库”)包含了多种代码库. 每种库支持一个指定范围的Android平台版本和功能组合. 本小节将介绍其中重要的功能以及各个支持库可以支持的版本, 来让我们在选择支持库的时候做出权衡. 通常, 我们推荐使用v4 support和v7 appcompat库, 因为它们支持的版本范围很广, 并且提供了推荐的用户接口模式的API. 想要使用下列任何版本库, 我们都必须下载这些版本库文件到Android SDK安装路径中. 如何下载和设置将在下一章节中介绍. 现在先介绍一下各个版本库的功能:
V4Support Library:
该库设计用来支持Android 1.6及更高版本. 相比于其它库它包含了最多的API, 包括对APP组件, 用户接口功能, 访问性, 数据处理, 网络连接和编程实用工具的支持. 下面列举一些其中关键的类:
l APP组件:
n Fragment – 增加了对用户界面和Fragment功能的封装, 使得APP可以在大小屏幕之间调整.
n NotificationCompat – 提供了丰富的Notification功能.
n LocalBroadcastManager – 让APP可以很方便的在单个APP内部注册和接收intent,而不用广播到全局.
l 用户接口:
n ViewPager – 添加一个可以管理子view的ViewGroup, 用户可以在它们之间滑动.
n PagerTitleStrip – 添加一个非交互式标题栏, 可以作为ViewPager的子项目.
n PagerTabStrip – 在分页的View间添加一个用来切换的导航控件, 也可以用于ViewPager.
n DrawerLayout – 增加对Navigation Drawer的支持, 它让我们可以从窗口的边缘拖出一个菜单.
n SlidingPaneLayout – 添加一个控件, 可以用于创建连接的汇总和详情页面来适配多种屏幕尺寸.
l 访问性:
n ExploreByTouchHelper – 为实现自定义view的可访问支持添加一个helper类.
n AccessibilityEventCompat – 添加对AccessibilityEvent的支持. 更多关于实现可访问性的信息可以参考Accessibility.
n AccessibilityNodeInfoCompat – 添加对AccessibilityNodeInfo的支持.
n AccessibilityNodeProviderCompat – 添加对AccessibilityNodeProvider的支持.
n AccessibilityDelegateCompat – 添加对View.AccessibilityDelegate的支持.
l 内容:
n Loader – 添加对同步数据加载的支持. 该库还提供了该类的具体实现, 包括CursorLoader和AsyncTaskLoader.
n FileProvider – 添加对APP间私有文件共享的支持.
在该库中还有很多其它的API. 完整的API信息可以参考这里. 在我们下载完了Android支持库之后, 该库就位于<sdk>/extras/android/support/v4目录下. 库内不包含用户接口资源. 注意, 使用动态依赖, 特别是对于更高的版本, 可以导致未知版本更新和退回(regression)不兼容. 该库的Gradle build脚本依赖代码如下:
com.android.support:support-v4:23.1.0
Multdex支持库:
该库为创建多Dalvik Executable(DEX)文件提供了支持. 当一个APP的方法超过了65536之后, 就需要使用多配置. 更多关于它的信息可以参考 Building Apps with Over 65K Methods.在下载了Android支持库之后, 该库保存在<sdk>/extras/android/support/multidex/目录. 该库不包含用户接口资源. 该库的Gradle build脚本依赖代码如下:
com.android.support:multidex:1.0.0
v7 Support Library:
有几种库被设计来支持Android 2.1(API level 7)及更高版本. 这些库提供了指定功能集并可以独立的添加到APP库.
V7 appcompat library:
该库提供了对Action Bar用户接口设计模式. 它还包含了对material design用户接口的实现. 注意, 该库依赖于v4支持库. 下面是一些它提供的关键类:
ActionBar – 提供了action bar用户接口模式的实现.
AppCompatActivity – 添加了一个APPActivity类, 该类可以作为一个实现了action bar的Activity的基类.
AppCompatDialog – 添加一个dialog类, 它可以用来作为AppCompat主题dialog的基类.
ShareActionProvider – 增加对标准化共享action(比如email或者发布给社交APP)的支持. 可以被添加到一个actionbar.
下载该库之后它会被保存在<sdk>/extras/android/support/v7/appcompat/目录下. 它包含用户接口资源. 该库的Gradle build脚本依赖代码如下:
com.android.support:appcompat-v7:23.1.0
v7 cardview library:
该库添加了对CardView组件的支持, 它让我们可以以一致的风格在任意APP上通过卡片展示信息. 这些卡片在material design中十分的有用, 并且在TV APP的layout中应用广泛. 下载该库之后, 它将保存在<sdk>/extras/android/support/v7/cardview/目录中. 该库包含用户接口资源.它的Gradle build脚本依赖代码如下:
com.android.support:cardview-v7:23.1.0
v7 gridlayout library:
在下载了Android支持库之后, 该库可以添加对GridLayout的支持. 它让我们可以使用一个矩形单元格排列用户接口元素. 更多关于v7 gridlayout库的API可以参考android.support.v7.widget包. 它将保存在<sdk>/extras/android/support/v7/gridlayout/目录中. 该库包含用户接口资源.它的Gradle build脚本依赖代码如下:
com.android.support:gridlayout-v7:23.1.0
v7mediarouter library:
该库提供了MediaRouter, MediaRouteProvider和相关的支持Google Cast的媒体库. 通常, 在v7 媒体路由库中的API提供了对”媒体通道路由”和”从当前设备发送到外部显示设备的流”, 话筒和其它目标设备的控制. 它还提供了对启动一个媒体路由provider的支持, 以及发现和选择目标设备, 检查媒体状态等. 更多信息可以参考android.support.v7.media包. 它将保存在<sdk>/extras/android/support/v7/mediarouter/目录中. 它以v7appcompat库的依赖库的形式提供, 所以设置工程的时候需要引入这两个库. Gradle builder脚本依赖识别代码是这样的: com.android.support:support-v7-mediarouter:<revision>, 其中<revision>是” theminimum revision at which the library is available”. 它的Gradle build脚本依赖代码如下:
com.android.support:mediarouter-v7:23.1.0
官方建议我们只有在使用Google Cast的时候才使用这个库.
v7 palette library:
v7 palette支持库包含Palette类, 它让我们可以从一张图片中提取颜色. 栗如, 一个音乐APP可以使用一个Palette对象来提取专辑封面的主要颜色, 并使用这些颜色来创建一个颜色协调的歌曲主题卡. 它将保存在<sdk>/extras/android/support/v7/palette/目录中. 该库不包含用户接口资源.它的Gradle build脚本依赖代码如下:
com.android.support:palette-v7:23.1.0
v7 recyclerview library:
recyclerview库添加了RecyclerView类. 该类提供了对RecyclerView控件的支持, 这个view通过提供一个数据项的受限的窗口来有效的显示大数据集. 它将保存在<sdk>/extras/android/support/v7/recyclerview/目录中. 该库包含用户接口资源.它的Gradle build脚本依赖代码如下:
com.android.support:recyclerview-v7:23.1.0
v7 Preference Support Library:
preference包提供了支持可以添加preference对象的API, 比如CheckBoxPreference和ListPreference,以便用户修改UI设置项. V7 Preference库还添加了对接口的支持, 比如Preference.OnPreferenceChangeListener 和Preference.OnPreferenceClickListener, 还有类, 比如CheckBoxPreference和ListPreference. 它将保存在<sdk>/extras/android/support/v7/preference目录中. 该库包含用户接口资源.它的Gradle build脚本依赖代码如下:
com.android.support:preference-v7:23.1.0
v8 Support Library:
该库设计用来支持Android 2.2及更高版本. 它提供了指定的功能集并可以独立地包含到APP中.
V8 renderscript library:
用于支持Android 2.2及更高版本, 它添加了对RenderScript计算框架的支持. 这些API被包含在android.support.v8.renderscript包中. 我们应该意识到在APP中包含这些API的步骤跟其它的支持库有很大的不同. 更多关于它的用法可以参考这里. 注意: 我们可以使用Android Studio和基于Gradle的编译系统使用RenderScript支持库. 它将保存在build-tools/$VERSION/renderscript目录中. 下面代码演示了使用该库的Gradle代码:
defaultConfig {
renderscriptTargetApi 18
renderscriptSupportModeEnabled true
}
v13 Support Library:
该库被设计用来支持Android 3.2及更高版本. 它通过FragmentCompat类添加了对Fragment用户接口模式的支持, 以及额外的fragment支持类. 关于v13支持库的详情可以参考android.support.v13包. 它将保存在<sdk>/extras/android/support/v13/目录中. 该库不包含用户接口资源.它的Gradle build脚本依赖代码如下:
com.android.support:support-v13:23.1.0
v14 Preference Support Library:
android.support.v14.preference包包含的API添加了对Preference接口的支持, 比如PreferenceFragment.OnPreferenceStartFragmentCallback和PreferenceFragment.OnPreferenceStartScreenCallback, 以及类, 比如MultiSelectListPreference和PreferenceFragment.更多关于v14 Preference支持库的信息可以参考这里. 它将保存在<sdk>/extras/android/support/v14/目录中. 该库不包含用户接口资源.它的Gradle build脚本依赖代码如下:
com.android.support:preference-v14:23.1.0
v17 Preference Support Library for TV:
android.support.v17.preference包的API为电视设备提供了Preference接口, 包括对LeanbackListPreferenceDialogFragment.ViewHolder.OnItemClickListener接口和类的支持, 比如BaseLeanbackPreferenceFragment和 LeanbackPreferenceFragment. 更多关于v17 Preference支持库的信息可以参考这里. 它将保存在<sdk>/extras/android/support/v14/目录中. 该库不包含用户接口资源.它的Gradle build脚本依赖代码如下:
com.android.support:preference-leanback-v17:23.1.0
v17 Leanback Library:
android.support.v17.leanback包的API提供了TV设备上创建用户接口的支持.它为TV APP提供了大量的重要的组件. 其中一些拉风的类包括:
BrowseFragment – 一个fragment, 它可以创建一个基础layout来浏览类别和媒体条目.
DetailsFragment – 一个封装的fragment,用于Leanback详情页面.
PlaybackOverlayFragment – DetailsFragment的子类, 用于显示播放控制和相关内容.
SearchFragment – 一个用于处理搜索的fragment.该fragment接收用户的搜索请求, 并将其传递给APP提供的SearchResultProvider. SearchResultProvider返回搜索结果给SearchFragment,然后显示到一个RowsFragment上.
它将保存在<sdk>/extras/android/support/v17/leanback目录中. 它的Gradle build脚本依赖代码如下:
com.android.support:leanback-v17:23.1.0
AnnotationsSupport Library:
Annotation包提供的API可以支持添加动画元数据到APP中. 它将保存在<sdk>/extras/android/support/annotations目录中. 它的Gradle build脚本依赖代码如下:
com.android.support:support-annotations:23.1.0
Design Support Library:
Design包的API提供了对materialdesign组件和模式的支持, 比如navigation drawer, floating action button(FAB), snackbar 和tab. 它将保存在<sdk>/extras/android/support/design目录中. 它的Gradle build脚本依赖代码如下:
com.android.support:design:23.1.0
Customtab Support Library:
Custom Tab包提供的API添加了对自定义tab的支持, 包括多种类, 比如Custom TabsService和Custom Tabs Callback. 它将保存在<sdk>/extras/android/support/customtabs目录中. 它的Gradle build脚本依赖代码如下:
com.android.support:customtabs:23.1.0
PercentSupport Library:
Percent包提供的API可以支持添加和管理基于百分比的尺寸. 它可以支持PercentLayoutHelper.PercentLayoutParams接口和多种类, 比如PercentFrameLayout和PercentRelativeLayout. 它将保存在<sdk>/extras/android/support/percent目录中. 它的Gradle build脚本依赖代码如下:
com.android.support:percent:23.1.0
AppRecommendation Support Library for TV:
App Recommendation包提供的API可以支持添加内容建议到TV上运行的APP. 该库添加了对动画的支持, 比如ContentRecommendation.ContentMaturity和多种类, 比如ContentRecommendation和 RecommendationExtender. 它将保存在<sdk>/extras/android/support/recommendation目录中. 它的Gradle build脚本依赖代码如下:
com.android.support:recommendation:23.1.0
支持库的设置:
如何设置这些Android支持库取决于我们需要使用什么样的功能以及想要支持的Android版本.
下载支持库:
Android支持库包作为Android SDK的补充下载, 可以通过AndroidSDK管理器管理. 可以通过这些步骤来获得支持库文件:
1. 启动Android SDK管理器.
2. 在SDK管理器窗口中, 下拉到包列表的底部, 找到Extras文件夹, 展开.
3. 选择Android Support Library选项. 提醒: 如果开发环境是AndroidStudio的话, 选择并且安装Android Support Repository选项.
4. 点击Install packages按钮:
下载之后, 会将支持库文件安装到SDK目录下. 库文件保存在: <sdk>/extras/android/support/目录下.
添加支持库:
为了使用支持库, 必须修改APP工程的依赖库的路径, 还得为每个想要使用的支持库处理该流程. 有些支持库包含代码类以外的资源(比如图片或者XML文件). 栗如v7 appcompat和v7 girdlayout库.
要添加一个不包含资源的库到APP工程中:
1. 确定已经通过SDK管理器下载了Android Support Repository.
2. 打开APP工程中的build.gradle文件.
3. 添加支持库到dependencies选项中. 栗如, 要添加一个v4支持库, 可以这样:
dependencies {
...
compile "com.android.support:support-v4:18.0.+"
}
要添加一个包含资源的支持库(比如v7 appcompat)到APP工程中:
1. 确定已经通过SDK管理器下载了Android Support Repository.
2. 打开APP工程中的build.gradle文件.
3. 添加支持库功能工程识别码到dependencies选项中. 比如, 要包含appcompat工程:
dependencies {
...
compile "com.android.support:appcompat-v7:18.0.+"
}
使用支持库中的API:
支持库的类一般跟framework中的名字一样, 但是位于android.support包中, 或者有一个*Compat后缀.
注意: 使用支持库中的类的时候, 需要确认引入的类归属于哪个包. 栗如, 当使用ActionBar类的时候, 支持库中的ActionBar在android.support.v7.app.ActionBar中; 而仅在API level11及更高版本中开发的时候, 该类在android.app.ActionBar中.
再注意: 当我们在APP工程中使用支持库的时候, 官方强烈建议我们使用ProGuard工具来准备APP的发布版APK. 除了保护原代码, ProGuard工具还可以从任何工程中的库里移除没使用的类, 它会让我们发布的APK文件达到最小的尺寸.
Manifest声明的变化:
如果我们通过支持库为早期版本的APP添加向后兼容, 请确保升级APP的manifest. 特别指出的是, 我们应该更新<use-sdk>中的android.minSdkVersion为新的更低版本的值, 栗如:
<uses-sdk
android:minSdkVersion="7"
android:targetSdkVersion="17" />
Manifest中的设置会告诉Google Play, 我们的APP可以被安装在Android2.1(API level 7)及更高版本中. 如果使用的是Gradle编译文件, 那么在编译文件中设置的minSdkVersion将会覆盖manifest中的设置:
apply plugin: 'com.android.application'
android {
...
defaultConfig {
minSdkVersion 8
...
}
...
}
它会告知Google Play, 该APP可以被安装在Android 2.2(API level 8)及更高版本中. 更多信息可以参考Build SystemOverview.
注意: 如果我们包含了v4支持库和v7 appcompat库, 那么应该指定最小SDK版本为”7”(而不是4). APP中的最高支持库等级决定了可以支持的最低API版本.
代码示例:
每个支持库都包含代码示例来帮助我们学习如何使用这些API. 代码包含在SDK管理器下载的文件中, 它们包含在SDK的安装目录下, 列表如下:
l 4v 代码示例: <sdk>/extras/android/support/samples/Support4Demos/
l 7v代码示例: <sdk>/extras/android/support/samples/Support7Demos/
l 13v代码示例: <sdk>/extras/android/support/samples/Support13Demos/
l App Navigation:<sdk>/extras/android/support/samples/SupportAppNavigation/
总结:
Android支持库提供了对更高版本的framework的支持, 可以拓宽我们的APP支持的版本范围, 使得我们在低版本上可以使用新版本的功能. 十分有用, 不但如此, 它还是一个新版本API的目录, 通过这些功能我们可以了解到新版本中有哪些好用的新功能.
参考: https://developer.android.com/tools/support-library/features.html
https://developer.android.com/tools/support-library/index.html