`
netfreeperson
  • 浏览: 6530 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类

了解Android 的支持库

阅读更多

我只是技术搬运工,如果搬运有误,请不吝指出,谢谢酷

了解Android 的支持库

         支持众多不同设备是Android平台强大的一方面。从手机,平板,手表到电视机,汽车等等,Android想成为所有移动计算平台。从数字上来说,已经非常成功了-在作者写这篇文章的时候已经用超过20000不同的设备了。这已经超过了任何其他的竞争平台。

         支持所有这些设备,遇到一连串的挑战。用户希望app能在不同设备上表现一致,尽管在设备上有重要的不同。以此同时,因为唯一的挑战是发布Android软件给用户,所以开发者不能一味的依赖于用户是使用Android的最新版本。实际上,开发者应该预期大多数用户是使用18各月以前或更早以前的Android版本。

         如果没有来至Android团队的支持,开发者为了支持他们的用户被迫要求做丑陋的方案。幸运的是,Android团队意识到了协调老版本设备对战略来说是重要的。然而,在不影响未来的版本情况下,提出了一个构建的挑战,因为AndroidAPI会随着时间的推移而演变。如何将新的重要的API让大部分Android用户使用,而不是仅仅的新设备和新版本用户?

         答案是由Android团队做出的最重要,最奇特的设计决策之一:Android的支持库。

 

什么是Android支持库?

         Android 支持库始于2011年,作为Android的兼容库。在所有安装的应用中,超过75%,它是最广泛应用的Android库。Android开发人员可以使用Android支持库提供的新的Api给老版本使用。但是这并不是全部。

         Android支持库并不是单单是一个库,而是一个库的集合:大概可以分为两组:兼容库和组件库。

         每个库使用一个名字约定,可以识别minSdkVersion,你的项目如果需要使用就需要使用minSdkVersion。那看起来是有点迷惑的,因为你认为高版本包含了低版本的特性(你认为v7-appcompat提供了来至v4的特性)。这望望是错误的。库自己有版本号,比如”AppCompat v21”实际上市指支持库v7-appcompat21版本。

 

兼容库

兼容库旨在将新版本的特性移植到那些跑在老版本的机器上,以便可以使用新
API
的优势。主要的兼容库是v4v7-appcompat

 

v4

v4是所有的鼻祖。它包含了很多的特性,就像它名字所暗示的,支持回API 4. 除了支持主要的实现类,如:FragmentLoader(这两个都在API 11的框架中),你也将发现好几个广泛使用的类也没有在框架中,比如ViewPagerDrawerLayout

 

不要让它的名字糊弄了你:尽管可以支持回Android 1.6,它任然是一个被广泛使用和重要的库。因为支持库以来,你很难完全的避免使用v4.

 


v7-appcompat

通常简单称为AppCompat, v7-appcompat库提供了ActionBar(API 11中介绍) Toolbar(API21中介绍)的实现为了向后金融API 7. 它需要v4库,但是它不包含v4.因此,任何特许如果是以来v7-appcompat的话也需要以来v4.

 

Under the Hood(引擎盖下)

兼容库大量使用垫片(shims)来向后兼容特许。这些兼容垫片是对底层实现的组件(在支持版本的API)的封装。在老的版本中,这些垫片反而调用支持实现,可能有轻微的不同或者是功能的删减。

 

然而,在一些情况下兼容垫片是不被使用的,相反,在这些情况下支持包经常使用它们自己的实现来替代框架的实现-甚至当版本支持框架的实现。一个主要的例子是v4支持的Fragments

 

这是一个非常有趣的决定,在整个Android框架中都有体现。Android已经创建了一个完全不同的支持实现(主要的特性,大多数功能的复制),并且将他们打包为不同的classeresources集合。这些实现平行的生存在他们的兄弟框架中,完全拥有它们自己的继承结构,修订版本和bugs

 

谷歌宣称在这种情况下,大部分的API是相同的,除了包的不同和方法名的微小差别。然而,在实际中,有那么一些不明显的API差别在支持库和框架的实现上-差别将随着时间而增加。

 

此外,在某些情况下,开发人员可能认为他们可以在框架和支持实现中选择所用的特性,但是只是发现支持以来决定了他们的选择。比如,v7-appcompat库可以让开发人员使用Material Design UI特性(API 21中介绍)。然而,这样做所有的Activity都需要继承自AppCompatActivity,它继承自v4的支持库FragmentActivity.因此,开发人员的API如果小于21,但是希望使用Material Design UI特性,就必须使用v4支持的Fragments,而不是框架的Fragments

 

谷歌认为使用支持库是最佳的实践,即使不是必须的。v70appcompatv4库在它的大多数实例代码中,并且在Android Studio的新项目魔棒中。谷歌显然是在兼容库上花很大的努力了,并且希望开发人员很大程度上使用它们。

 

组件库

除了兼容性库,Android的支持库还提供了更小,更模块化的组件库,使开发人员能够增加在其他方面功能而不是标准框架的一部分。这些独立的库,可以轻松地从项目中添加或删除,而不依赖关注。有几个有价值的组件库值得考虑:

 

v7-recyclerview: 提供 RecyclerView组件,它可以有效的动画的展示大量的数据,被用来替代ListView

v7-cardview: 提供CardView组件,可以使用cards UI设计模式。

 

v7-gridlayout: 提供GridLayout 类,可以组织UI元素到矩形grid中。

 

v7-mediarouter: 提供MediaRouter和相关的类,可以支持Google Cast

 

v7-palette: 提供Palette 类,可以使开发人员识别原始颜色在一张图片中。

 

添加这些组件到你的基于gradle的项目就像添加依赖到你的build 脚本一样简单。

 

除了方便和模块化的好处外,分离这些组件到它们自己的库中可以事谷歌单独发布重要API,而不需要在框架之内。这样允许收集反馈,并且可以迭代开发在整合到框架之前。

 

其他的库

Android的支持库中还包含了一些平时比较少用的库,但是也值得提及:

v8: RenderScript(API 11中介绍)提供支持为了向后金融API 8

v13:Fragment UI模式和v4提供额外的兼容支持。

v17: 为构建TV UI提供支持

multidex:为构建多个DEX文件的app提供支持

annotations: 为像@NonNULL @IntDef的注解提供支持。

 

常见问题

 

什么时候我应该使用Android的支持库?

当你需要的框架特性是比minSdkVersion新的时候或者在你标准框架中不可用时需要支持库。

 

然而,谷歌认为一般情况下使用支持库是最好的实践,即使不是必要的。

 

那个版本的支持库是我需要的?

 

总之,使用你应用需要支持特性的对应的版本。一些特性和模块,比如,使用RecyclerView,只要简单的将v7-recyclerView以来添加到你的Gradle脚本。

 

如果你需要一个来之v4的兼容组件,你可以使用v13替代,如果你的minSdkVersion支持的话,因为它绑定了v4。不然的话,如果你需要支持API小于13的,并且需要v4组件,可以直接使用v4.

 

然而,需要注意的是支持库的以来可能命令具体支持库的使用。

 

结论

通过谷歌的标准,为了Android保持成功,它必须继续保持尽可能宽的覆盖。一个组要组件的目标就是为了爆炸式增长的设备支持,其中许多可能永远不会有机会获得最新的Andr​​oid版本的持续支持。

 

 

虽然不总是优雅的或者完全无痛的,Android支持库可以是开发者在老版本上使用重要的新的API,同时提供了游泳的组件,它们不是在标准Android框架中的。它是Android开发重要的部分,Android开发人员有责任懂它和利用它。

0
1
分享到:
评论

相关推荐

    Basic4android库分析器兼智能提示文本汉化工具

    Basic4android语言类似于Visual Basic语言,支持更多的对象。Basic4android将代码编译成Android原生(native)应用,无需其它运行环境的支持。与其它的集成开发环境不同,Basic4android是完全用于Android应用开发的...

    android-support-v7-appcompat.rar

    AppCompatActivity - 添加一个应用 Activity 类,此类可作为使用支持库操作栏实现的 Activity 的基础类。 AppCompatDialog - 添加一个对话框类,此类可作为 AppCompat 主题对话框的基础类。 ShareActionProvider ...

    新版Android开发教程.rar

    这一联盟将会支持 Google 发布的 Android 手机操作系统或者应用软件,共同开发名为 Android 的 开 放源代码的移动系统。开放手机联盟包括手机制造商、手机芯片厂商和移动运营商几类。目前,联盟成员 数 量已经达到了...

    Android高级编程--源代码

    通过学习,您可以打下牢固的理论根基,了解使用当前android 1.0 sdk编写定制移动程序所需的知识,还能灵活快捷地运用未来的增强功能构建最前沿的解决方案。  主要内容  ◆android移动开发的最佳实践  ◆简要介绍...

    android-navigationview-material-design:了解如何使用材料设计支持库的NavigationView创建抽屉

    了解如何使用材料设计支持库的NavigationView创建抽屉。 复制回购 在GitHub上创建新的空仓库 运行以下命令,将新存储库基于现有的android-actionbar-material-design库。 cd ~ /repos/android git clone git@...

    Android应用程序开发教程PDF电子书完整版、Android开发学习教程

    Android 包括了一个核心库,该核心库提供了 JAVA 编程语言核心库的大多数功能。 每一个 Android 应用程序都在它自己的进程中运行,都拥有一个独立的 Dalvik 虚拟 机实例。Dalvik 被设计 成一个设备可以同时高效地...

    android 平台利用OliveOfficeSDK 实现office文档查看的demo

    利用OliveOfficeSDK 实现android平台上office文档的查看,支持格式为doc、docx、 ppt、pptx、xls、xlsx,目前只支持查看,未来将推出编辑功能,了解更多请登陆 www.olivephone.com或者联系sales@olivephone.com ...

    android/iphone/windows/linux声波通信库(2017)

    可支持任何平台,常见的平台android, iphone, windows, linux, arm, mipsel, stm32都有示例。 详情了解:http://blog.csdn.net/softlgh/article/details/40507623 也可从http://pan.baidu.com/s/1mi00vhe下载 后面...

    《Android高级编程》

    1.9.3 Dalvik虚拟机 1.9.4 Android应用程序架构 1.9.5 Android库 1.9.6 高级Android库 1.10 小结 第2章 开始入手 2.1 Android开发 2.1.1 开始前的准备工作 2.1.2 创建第一个Android活动 2.1.3 Android应用程序的类型...

    虹软人脸识别 – Android平台调用动态库时的常见错误解析

    本文详细介绍从编译动态库(.so)到程序调用so的整个流程,模拟在加载虹软人脸识别so文件时经常遇到的一些问题,帮助大家了解这些问题出现的原因以及解决方法。 一、 ArcFace库加载常见错误 1.1 找不到动态库 java....

    android-navigation-material-design:了解如何使用材料设计支持库的NavigationView在片段之间导航

    通过NavigationView进行Android导航了解如何使用材料设计支持库的NavigationView在多个片段之间导航。复制回购在GitHub上创建新的空仓库运行以下命令,将新存储库基于现有的android-navigationview-material-design...

    Google Android SDK开发范例大全(完整版)

    Android 通过提供对 2D 和 3D 图形的内置支持,包括 OpenGL 库,解决了图形方面的挑战。由于 Android 平台包括流行的开源 SQLite 数据库,因此缓解了数据存储的负担。图 1 显示一个简化的 Android 软件层次结构。 ...

    DNAC-Device-Scan-Android-App:这款移动应用可让您扫描设备的序列号并了解其库存信息

    添加android平台支持: ionic cordova add platform android 编译 cd frontend/devScan/ npm install ionic cordova build android --debug 中间件安装 创建一个python virtualenv并激活它 安装要求 pip ...

    Android Rtmp播放器源代碼 精簡小巧 優化效率高 適合串流技術工程師深入了解的好代碼

    oarplayer(only android rtmp player)是一款简单到毫无特色的纯rtmp播放器, 不依赖ffmpeg,仅依赖srs-librtmp第三方库,体积小,可调整性强. 功能介绍 未依赖ffmpeg框架,基于srs-librtmp的rtmp拉流,编译打包更简单; ...

    android/iphone/windows/linux声波通信库(2018)

    可支持任何平台,常见的平台android, iphone, windows, linux, arm, mipsel, stm32都有示例。 详情了解:http://blog.csdn.net/softlgh/article/details/40507623 也可从http://pan.baidu.com/s/1mi00vhe下载 后面还...

    精通ANDROID 3(中文版)1/2

    12.4.4 创建使用库的Android项目  12.5 参考资料  12.6 小结  第13章 处理程序  13.1 Android组件和线程  13.1.1 活动在主线程上运行  13.1.2 广播接收程序在主线程上运行  13.1.3 服务在主线程上...

    Securing Android-Powered Mobile Devices Using SELinux

    1. Android本身不支持SELinux; 2. Android没有加载策略的手段; 3. 没有为Android定制的策略库; 4. 为Dalvik进程配置SELinux策略比较困难; 之后介绍了将SELinux移植到Android的详细步骤。阅读该文档读者会有如下...

    Android高级编程 part1

    通过学习,您可以打下牢固的理论根基,了解使用当前Android 1.0 SDK编写定制移动程序所需的知识,还能灵活快捷地运用未来的增强功能构建最前沿的解决方案。  Android提供一个开放的开发环境,为针对移动设备编写...

    Android高级编程 part2

    通过学习,您可以打下牢固的理论根基,了解使用当前Android 1.0 SDK编写定制移动程序所需的知识,还能灵活快捷地运用未来的增强功能构建最前沿的解决方案。  Android提供一个开放的开发环境,为针对移动设备编写...

    基于Android实现的DLMS COSEM 协议源码支持读取电表、气表和水表.zip

    DLMS.Android 库是适用于 Android 的高性能 Java 组件,可帮助您读取 DLMS/COSEM 兼容的电表、气表或水表。我们试图使组件易于使用,以至于您根本不需要了解协议。 使用前必须设置以下设备参数。参数是制造商特定的...

Global site tag (gtag.js) - Google Analytics