`
netfreeperson
  • 浏览: 6758 次
  • 性别: 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
分享到:
评论

相关推荐

    Android升级支持库版本遇到的两个问题详解

    首先,让我们了解Android支持库的作用。支持库是一个由Google维护的库集合,旨在提供对较旧Android版本的功能支持,确保应用能在广泛的设备上运行。支持库包含多个组件,如v7-appcompat、v4-support库等,它们各自...

    sqlite-android,android sqlite支持库.zip

    "sqlite-android,android sqlite支持库.zip" 文件是一个专门为 Android 平台优化的 SQLite 支持库,它提供了最新的 SQLite 版本。这个压缩包中的 "sqlite-android-master" 文件夹很可能是该项目的源代码仓库主分支,...

    Android-android动态库远程依赖

    在Android应用开发中,动态库(Dynamic Library)是不可或缺的一部分,它们主要用于提供底层的C/C++代码支持,处理性能敏感或跨平台的任务。"Android-android动态库远程依赖"这一主题聚焦于如何在Android项目中引入...

    takephoto拍照相册开源库更改为用androidx库v4.1.0版本

    AndroidX是对原来Support Library的重构和扩展,旨在解决支持库版本不一致和命名冲突的问题。 本项目涉及的主要知识点是将`takephoto`拍照相册开源库升级到使用AndroidX库的v4.1.0版本。旧版的V4库(android....

    android GIF加载库

    在Android开发中,处理动态图像是一个常见的需求,特别是GIF格式的图片,因为它们能够提供循环播放的动画效果...了解和熟练使用这些库是Android开发中的一个重要技能,特别是对于那些需要频繁处理动态内容的应用来说。

    Android-Android串口库

    通过深入研究这个库,开发者可以了解如何在Android系统上实现更复杂的串口通信功能,并结合实际应用场景进行定制化开发。同时,参与开源社区的讨论和贡献,也有助于提升开发者在Android串口通信领域的专业技能。

    android support library支持库源码

    Android Support Library支持库是Google为Android开发者提供的一组库,旨在帮助开发者实现向后兼容,同时引入新功能和API,而无需担心目标设备运行的Android版本。这些库使得开发者能够利用最新的设计、动画、工具栏...

    android图标库

    1. 尺寸与分辨率:Android支持多种屏幕尺寸和密度,因此图标需要有多种尺寸,如hdpi、xhdpi、xxhdpi和xxxhdpi等。每个尺寸都有对应的像素要求,确保在不同设备上显示清晰。 2. 颜色:Android采用Material Design...

    Android-一个精简全面方便的AndroidLog库--ALog

    通过查看源码,我们可以了解其实现原理,学习如何构建这样的日志库,提升自身的Android开发技能。 7. **集成与依赖管理** 在现代的Android项目中,我们通常通过Gradle来引入依赖。对于ALog,我们需要在项目的build...

    Android 海康最新视频播放库,支持Android 6.0 和 Android 7.0

    本文将深入探讨“Android海康最新视频播放库”,它专为支持Android 6.0(Marshmallow)和Android 7.0(Nougat)系统设计,并包含了在Android Studio 2.4版本下的示例源代码。 首先,我们要理解Android 6.0和7.0在...

    Android-sqlite-android一个AndroidSQLite支持库

    `sqlite-android`是一个针对Android平台的SQLite支持库,它提供了更便捷的方式来与SQLite数据库交互,尤其在ORM(对象关系映射)框架中,可以极大地简化开发者的工作。 ORM框架允许开发者以面向对象的方式处理数据...

    android 材料设计支持库样例

    材料设计支持库是Google为了帮助开发者在Android应用中实现这一设计风格而推出的一套组件库。在这个"android 材料设计支持库样例"中,我们可以深入学习如何在项目中有效地运用这些组件。 首先,让我们关注描述中...

    android_curl版本支持库

    `android_curl`版本支持库是为了让Android应用能够利用`curl`的功能,而无需自行编译和配置复杂的依赖。下面将详细介绍`android_curl`、`curl`库以及如何在Android环境中使用它们。 1. **Android_curl**: `android_...

    安卓android版本的curl库

    总之,Android版的Curl库提供了强大的网络通信功能,支持多种处理器架构,使得开发者能轻松地在Android应用中实现复杂的网络操作。正确地集成和使用Curl库,将极大地提升开发效率和应用的网络功能。

    Android的底层库

    了解Android底层库的相关知识对于深入研究Android系统有着重要的意义。通过掌握这些基础知识,开发者不仅能够更好地理解Android的工作原理,还能够在实际开发过程中更加灵活地进行定制化开发。希望本文能为你提供有...

    Android Studio 基于cmake 链接静态库,动态库

    在Android开发中,Android Studio是首选的集成开发环境(IDE),它支持多种构建系统,包括原生C/C++代码的构建工具CMake。本篇文章将深入探讨如何在Android Studio中利用CMake链接静态库和动态库,以实现跨平台的...

    Android CMake调用第三方库

    在Android开发中,有时我们需要利用C++代码来提高性能或者接入一些C/C++的第三方库。Android Studio提供了CMake工具,使得我们可以在Android项目中轻松地集成和调用C++代码。本文将深入探讨如何使用Android CMake...

    海康Android播放库编程指南

    《海康Android播放库编程指南》是一份专为开发者准备的详细文档,旨在帮助开发者们在Android平台上有效地集成和使用海康威视的播放库。这份指南覆盖了最新的SDK版本V7.3.1.x,提供了全面的技术支持和实例解析,以...

    ffmpeg4.3.5 Android 动态库

    在这个特定的场景中,我们关注的是 FFmpeg 的 Android 动态库版本 4.3.5。动态库(.so 文件)是针对 Android 平台编译的,使得开发者可以在 Android 应用中直接调用 FFmpeg 的功能,而无需重新编译整个项目。 1. **...

    vlc-android媒体播放AAR库

    总结来说,"vlc-android媒体播放AAR库"为Android开发者提供了一个强大且灵活的多媒体播放解决方案,集成了VLC的核心功能和媒体库管理,尤其对m3u8直播流的完美支持,使得它成为开发音视频应用的理想选择。...

Global site tag (gtag.js) - Google Analytics