Android support支持库详解及AndroidX迁移适配小记
背景
由于项目需要用到新的jetpack组件,而jetpack组件在AndroidX支持库中提供,因此开启了将项目中support-v13库迁移为最新的谷歌推荐的AndroidX支持库。
Android支持库
Android支持库的用途
支持库有一些独特的用途,而针对平台早期版本的向后兼容性类只是其中之一。下表完整列出了支持库在应用中的用途:
新版 API 的向后兼容性 - 大量的支持库都为较新的框架类和方法提供向后兼容性。例如,Fragment 支持类为搭载 Android 3.0(API 级别 11)之前版本的设备中的 Fragment 提供支持。
工具类和辅助类 - 支持库提供了很多辅助类,特别是针对界面开发。例如,RecyclerView 类提供了一个界面微件,用于显示和管理超长列表,并可在 API 级别 7 及更高版本的 Android 系统中使用。
调试和实用工具 - 很多功能可以提供您集成到应用中的代码所不具备的实用工具,包括 support-annotations 库,它改进了对方法输入进行的代码 Lint 检查;以及多 dex 处理支持,用于通过 65536
种以上的方法配置和分发应用。
使用 Support API 与使用 Framework API
支持库提供的类和方法与 Android 框架中的 API 非常相似。了解这点后,您可能想确定应该使用 API 的框架版本,还是使用等效的支持库。以下指南介绍了何时应使用支持库类代替 Framework API:
- 特定功能的兼容性 - 如果要在搭载早期版本平台的设备上支持最新的平台功能,请使用支持库中等效的类和方法。
- 相关库功能的兼容性 - 更复杂的支持库类可能依赖于一个或多个其他支持库类,因此您应该针对这些依赖项使用支持库类。例如,ViewPager 支持类应该与 FragmentPagerAdapter 或 FragmentStatePagerAdapter 支持类一起使用。
- 常规设置兼容性 - 如果您打算以向后兼容的方式在您的应用中使用特定平台功能,但您目前没有相应功能,也依然建议在该应用中使用支持库类。例如,您可能想要使用 ActivityCompat 代替框架 Activity 类,以便以后可以利用更新的功能,例如集成在 Android 6.0(API 级别 23)中引入的新权限模型。
支持库软件包和版本
支持库软件包,俗称support包,有v4、v7、v8、v13、v14、v17支持库(包)。具体支持库各版本变化见链接https://developer.android.google.cn/topic/libraries/support-library/packages?hl=zh_cn
修订版本号,最新版本28.0.0,目前已不维护,建议建议到AndroidX支持库,实际使用包名为com.android.support:support-v4:28.0.0、com.android.support:support-v7:28.0.0等等,详细修订版本号见官方发布链接
最近修订版本:https://developer.android.google.cn/topic/libraries/support-library/revisions?hl=zh_cn
早期版本,修订版归档: https://developer.android.google.cn/topic/libraries/support-library/rev-archive?hl=zh_cn
AndroidX支持库
注意:Android 9.0(API 级别 28)发布后,新版支持库 AndroidX 也随之诞生,它属于 Jetpack。除了现有的支持库,AndroidX 库还包含最新的 Jetpack 组件。
您可以继续使用此支持库以往的工件(这里指的是版本 27 及更早版本,且已打包为 android.support.*)在 Google Maven 中仍然可用。不过,所有新库的开发都将在 AndroidX 库中进行。
我们建议在所有新项目中使用 AndroidX 库。您还应该考虑将现有项目迁移到 AndroidX。
迁移到 AndroidX
参考链接如下
https://developer.android.google.cn/jetpack/androidx/migrate?hl=zh_cn
使用 Android Studio 3.2 及更高版本,您只需从菜单栏中依次选择 Refactor > Migrate to AndroidX,即可将现有项目迁移到 AndroidX。
重构命令使用两个标记。默认情况下,这两个标记在 gradle.properties 文件中都设为 true:
android.useAndroidX=true
Android 插件会使用对应的 AndroidX 库而非支持库。
android.enableJetifier=true
支持库工件映射https://developer.android.google.cn/jetpack/androidx/migrate/artifact-mappings?hl=zh_cn
支持库类映射https://developer.android.google.cn/jetpack/androidx/migrate/class-mappings?hl=zh_cn#top_of_page
例子:如果我要将自己项目中的v13包改为AndroidX支持库,则需要如下操作:
- gradle下删除com.android.support:support-v13:28.0.0依赖
- gradle下添加androidx.legacy:legacy-support-v13:1.0.0依赖