本页详细介绍了最新的支持库软件包版本。如需了解早期版本,请参阅 支持库修订版本归档。
修订版 28.0.0 正式版
(2018 年 9 月 21 日)
这是支持库 28.0.0 的稳定版,适合在生产环境中使用。这将是 android.support
打包下的最后一个功能版本,我们建议开发者迁移到 AndroidX。
新功能
-
AnimatedStateListDrawableCompat
可提供可绘制对象状态之间的动画转换。 -
VectorDrawableCompat
获得了对渐变以及ColorStateList
填充和描边的支持。
修订版 28.0.0 RC 2
(2018 年 8 月 27 日)
此支持库的候选版本被视为功能完备,并且其公共 API Surface 也稳定。除非出现任何严重问题,否则此版本将作为最终稳定版推出。此版本应可在生产环境中放心使用。如有任何问题,请向公开问题跟踪器报告。
修复的问题
- Proguard 移除了视图模型应用构造函数(公开问题 112230489)
- 修复了 `AnimatedStateListDrawableCompat` 常量状态
- 从 mediarouter 1.0.0 中移除了 media2 依赖项
- 点击主屏幕按钮时,“Fragment.getViewLifecycleOwner()”不会停止(公开问题 113070421)([公开问题 113070421](https://issuetracker.google.com/issues/113070421))
修订版 28.0.0 RC 1
(2018 年 8 月 6 日)
此支持库的候选版本被视为功能完备,并且其公共 API Surface 也稳定。除非出现任何严重问题,否则此版本将作为最终稳定版推出。此版本应可在生产环境中放心使用。如有任何问题,请向公开问题跟踪器报告。
注意:某些库(如 media2)仍处于 Alpha 版阶段,因为其 API Surface 尚未最终确定。我们不建议在生产环境中使用 Alpha 版库。库应严格避免在生产环境中依赖于 Alpha 版库,因为其 API Surface 可能会以与源代码和二进制文件不兼容的方式发生变化。
修复的问题
- BottomNavigationView 菜单未在 Design 支持库中正确初始化
- PositionalDataSource 无法正确处理向数据库中插入前置项的操作
- 滑块卡顿且无响应
- `SlicesProviderCompat.getPinnedSpecs()` 不会将用户 ID 添加到 URI
- RoutePlayer2:远程播放不会切换回本地播放
- 缓存的切片解析在执行操作时崩溃
- Google 搜索应用在渲染静态切片时崩溃
- 当数据集随着移除选择而发生更改时 RecyclerView 选择库中出现 ConcurrentModificationException
- PreferenceThemeOverlay 已更新为最新的素材主题背景。如果未提供自定义主题,则会将 PreferenceThemeOverlay 用作默认主题。
- PreferenceThemeOverlay.v14 和 PreferenceThemeOverlay.v14.Material 主题背景已废弃,取而代之的是 PreferenceThemeOverlay。
- PreferenceGroup 可见性现在与其子级相关联 - 如果隐藏父组,也会阻止其子级显示在层次结构中。使用 Preference.isShown() 可了解是否在层次结构中向用户实际显示了某项偏好设置。
- Preference.onSetInitialValue(boolean, Object) 已弃用,取而代之的是 onSetInitialValue(Object)。PreferenceDataStore 现在也可以正确恢复默认值。
修订版 28.0.0 Beta 版 1
(2018 年 7 月)
除非出现任何严重问题,否则此支持库 Beta 版被视为功能完备,并且其公共 API Surface 也稳定。虽然此版本可在生产环境中放心使用,但可能仍会存在 bug。 如有任何问题,请向公开问题跟踪器报告。
修复的问题
- 不可选项上的 GestureSelectionHelper 吞食事件
- 更新滑块值时,滑块切片可能具有重复的拇指图标
- IconCompat 破坏了 TYPE_URI 图标
- 使用拖动条的偏好设置发生崩溃
- Slice.toString() 中发生崩溃
- OffsettingListUpdateCallback.onMoved() 会调用 mCallback.onRemoved() 而不是 mCallback.onMoved()(问题 110711937)
修订版 27.1.1
(2018 年 4 月)
修复的问题
- AsyncListDiffer 不调用 getChangePayload(AOSP 问题 73961809)
- 未调用 Fragment ViewModel 的 onCleared(AOSP 问题 74139250)
- 即使适配器为 null,RecyclerView.setRecycledViewPool() 也会增加 attachmentsCount
- SmoothScroller.onStop 调用 stop() 或 startSmoothScroller() 时会出现 RecyclerView NPE
- fragment 替换事务会导致在显示新的 fragment 后,之前的 fragment 闪烁(AOSP 问题 74051124)
- 27.1.0 中的加载器回调重大变更(AOSP 问题 74135998)
- 当垂直网格视图的列 >1 时,RTL 布局不起作用
- 在 ViewPager 中使用 FragmentPagerAdapter 多次调用 onLoadFinished
- AsyncListDiffer 应该在设置当前列表后调度更新(AOSP 问题 74003309)
- ShareActionProvider 在 27.1.0 中抛出 ClassCastException
- Fragment 生命周期随 ViewPager 的变化(AOSP 问题 73976255)
修订版 28.0.0 Alpha 版 1
(2018 年 3 月)
注意:28.0.0-alpha1 是一个预发布版本,支持 Android P 开发者预览版。其 API Surface 可能会发生更改,且不一定包含最新稳定版支持库中的功能或 bug 修复。
重要变更
- 如之前在
Android KTX 公告中所述,我们将继续在所有库中采用
androidx
软件包前缀。这个新软件包将开始提供一系列全新的库,包括heifwriter
和recyclerview-selection
。我们希望android.*
和androidx.*
之间的区别更明确,哪些 API 与平台捆绑在一起,以及哪些 API 是适用于不同 Android 版本的应用开发者的静态库。 - 我们已将 support-core-ui、support-core-utils 和 support-compat 的部分拆分为更小的库。此更改将帮助我们将来摆脱对支持库的依赖。现在,我们有了以下新库:
- asynclayoutinflater(来自 support-core-ui)
- collections(来自 support-compat)
- coordinatorlayout(来自 design)
- cursoradapter(来自 support-core-ui)
- customview(来自 support-core-ui)
- documentfile(来自 support-core-utils)
- drawerlayout(来自 support-core-ui)
- interpolator(来自 support-core-ui)
- loader(来自 support-fragment 和 core-utils)
- localbroadcastmanager(来自 support-core-utils)
- print(来自 support-core-utils)
- slidingpanelayout(来自 support-core-ui)
- swiperefreshlayout(来自 support-core-ui)
- viewpager(来自 support-core-ui)
新增 API
recyclerview-selection
为RecyclerView
提供内容选择支持。该软件包提供以下功能:- 支持创建、修改、检查和监控对 RecyclerView 列表中一组选定项的更改。
- 支持直观的多选操作:
- 触摸驱动的选择可让用户通过直观的长按并拖动手势选择一系列项。
- 鼠标驱动的频带选择可让用户使用传统的鼠标指针频段/套索操作选择 RecyclerView 列表中的项块。
- 支持以触摸为中心的设备,包括手机和支持触摸的笔记本电脑,以及以指针为中心的设备。
- HEIF Writer 提供对编写 HEIF 格式静态图片的支持。
- Design 库
- 我们推出了一个新的应用主题
Theme.MaterialComponents
,它为组件提供了新的属性和样式。 - 我们添加了以下组件:
- BottomAppBar
- Chip
- ChipGroup
- MaterialButton
- MaterialCardView
- 我们推出了一个新的应用主题
- Slice 为应用提供了一个框架,用于嵌入来自其他应用的模板化内容。
- slices-builders 包含以模板格式构建内容的方法。
- slices-view 包含呈现相应内容的方法。
- 浏览器操作为应用开发者提供了一种协议,可让应用开发者为网址启动一致(但可以自定义)的上下文菜单。此功能取决于是否存在实现了对浏览器操作的支持的浏览器应用(例如,此功能仍在开发中的 Chrome 应用)。
-
ContextCompat.getSystemService()
和getSystemServiceName()
允许在所有 API 级别按类型查找系统服务。
bug 修复
- 未调用 Fragment ViewModel 的 onCleared(AOSP 问题 74139250)
- 在 ViewPager 中使用 FragmentPagerAdapter 多次调用 onLoadFinished()(AOSP 问题 74182171)
- 在某些情况下,RecyclerView 的 LinearLayoutManager 的 smoothScrollToPosition() 显示不稳定(来回)移动(AOSP 问题 71567765)
修订版 27.1.0 版本
(2018 年 2 月)
重要变更
- 加载器的底层实现已经重写,可以使用 Lifecycle。虽然 API 保持不变,但也存在一些行为变更:
initLoader()
、restartLoader()
和destroyLoader()
现在只能在主线程上调用。- 现在,在启动和停止包含的 FragmentActivity/Fragment 时,会分别调用加载器的
onStartLoading()
和onStopLoading()
。 - 系统仅会在
onStart()
和onStop
之间调用onLoadFinished()
。因此,现在可以在onLoadFinished()
中安全地完成 Fragment 事务。 - 与加载器相关的 FragmentController 方法现已废弃。
- 现在,DialogFragment 的
getDialog()
在onDestroyView()
之前将为非 null 值,而不是在dismiss()
中变为 null。您现在可以通过检查getDialog().isShowing()
是否返回 false 来确定是否在onStop()
中手动关闭对话框。
新增 API
RecyclerView
的ListAdapter
(以及AsyncListDiffer
)可以更轻松地在后台线程上计算列表差异。它们可以帮助您的 RecyclerView 动画内容自动更改,只需在界面线程上完成极少的工作。在后台,它们使用的是DiffUtil
。SortedList.ReplaceAll
支持更新 SortedList 中的所有数据,它会针对插入、移除、更改和移动(移动被视为移除和插入)运行所有合适的动画。- FragmentActivity 和 Fragment 现在实现了
ViewModelStoreOwner
,现在可以与ViewModelProvider
构造函数一起使用,作为使用ViewModelProviders.of()
的替代方案。 - Fragment 现在具有
requireContext()
、requireActivity()
、requireHost()
和requireFragmentManager()
方法,这些方法会返回等效的 get 方法的NonNull
对象或抛出IllegalStateException
。 findViewById()
的@NonNull
兼容版本requireViewById()
已添加到WindowCompat
、ActivityCompat
和ViewCompat
,它们会在找不到目标时抛出IllegalArgumentException
。LoaderCallbacks
方法现在具有相应的@Nullable
和@NonNull
注解。FileProvider
现通过新的<external-media-path>
元素在 API 21 及更高级别设备上支持getExternalMediaDirs()
。
bug 修复
- 在 onCreate 中初始化加载器的 fragment 破坏了 ViewPager 内的生命周期
- LoaderManager 在 onLoadFinished 中抛出 IllegalStateException
- LoaderViewModel 不在 onCleared 中清除其加载器
- 找不到 android.arch.lifecycle.ViewModelStoreOwner 的类文件
- DialogFragment onDismiss 没有在 dismiss() 之后立即调用
- 使用可下载字体时,国旗表情符号在发布密钥设备上无法使用
- Preferences 库使用的属性不适用于旧版 Android
- MediaCompat 的 testlib 工件类型记录有误(AOSP 问题 71559905)
- TypefaceCompatUtil 中发生 Google Sans 崩溃
- 公开了需要传入 Collection 的 ArraySet 构造函数
- updateApi 会移除应保留的 .ignore 文件
- 在 BrowserFragment 中创建的冗余 MainFragment
- 从 CarRecyclerView 中移除反射的使用
- FragmentManagerImpl.checkStateLoss 处出现 java.lang.IllegalStateException
- 使用 android.support.v4.content.PermissionChecker.checkSelfPermission 时出现 java.lang.SecurityException(未记录)
- 由于未在 setAdapter 中清除 State.mPreviousLayoutItemCount 而出现 RecyclerView IndexOutOfBoundsException(AOSP 问题 37657125)
- 在 onCreate 中初始化加载器的 Fragment 破坏了 ViewPager 内的生命周期(AOSP 问题 34831613)
- FragmentManagerImpl.execSingleAction 发生崩溃
修订版 27.0.2 版本
(2017 年 11 月)
bug 修复
-
EmojiEditTextHelper
会抛出NullPointerException
。 -
IllegalStateException
:尚未附加 Fragment。 - 无法通过点按屏幕上的任意位置来关闭“投射”图标弹出式窗口。
-
MediaMetadataCompat
会抛出BadParcelableException
。
修订版 27.0.1 版本
(2017 年 11 月)
bug 修复
- 在调用
startActivityForResult()
后,LifecycleRegistry 状态有误。 (问题 65665621) - 对于较旧的 API 级别,停用按钮的颜色过浅。
- 用户滚动后,无法点击
RecyclerView
中的项目。(AOSP 问题 66996774) - 在 Talkback 中,点击更多选项不会导致系统公布新弹出式窗口或将焦点添加到新选项。
修订版 27.0.0 版本
(2017 年 10 月)
API 差异
API 更改
- 向各种 API 添加了可为 null 性注解,包括: 如果没有正确处理可为 null 的返回类型,可能会导致 Kotlin 编译错误。
-
Fragment
可以将Transition
的支持库版本用于 Fragment 转换,包括共享元素转换。 - Content Paging 库 (
android.support.content.ContentPager
) 支持对通过ContentProvider
公开的分页内容。使用此库可让客户端避免在界面线程上执行开销非常大的进程间“光标窗口交换”,从而为 Android 8.0 功能提供兼容性库。 -
ViewCompat
现在为自动填充方法添加了封装容器,包括getImportantForAutofill()
、isImportantForAutofill()
、setAutofillHints()
和setImportantForAutofill()
。 -
Leanback 获得了新功能和改进,并丢失了一些已弃用的类,例如:
-
Picker
现在可以使用setSeparators()
方法在各个列之间使用不同的分隔符。 -
添加了
DiffCallback
,以允许ArrayObjectAdapter
利用DiffUtil
提供的输出。 - 添加了基础架构,以支持具有可变控件的媒体播放器,同时添加了用于快进、重复、随机播放、下一个、上一个和快退的可选控件。
- 移除了
MediaControllerGlue
、PlaybackControlGlue、PlaybackControlSupportGlue
和PlaybackOverlayFragment
。
-
- 为了进行测试,从 AOSP CTS 移植了 PollingCheck 实用程序。它会轮询在超时时间范围内出现的条件。
- 使用
PermissionCompatDelegate
添加了基础架构,以支持适用于 Android 5.0 的免安装应用的运行时权限。 - 现在支持可信自定义标签页,以及定义应用与源 URI 之间的关系的功能。
- 使用 AmbientMode 无头 fragment 简化了 Android Wear 氛围模式支持,这也使得支持氛围模式与使用架构组件兼容。
- Wear 团队希望就这一重大变更征询开发者的反馈。如需了解详情,请参阅 Android Wear 版本说明。
- 由于我们停止使用 V14 之前的旧版 API,因此移除了一些已废弃的类,例如
android.support.v7.NotificationCompat
(改用 v4NotificationCompat
)、KeyEventCompat
、ParallelExecutorCompat
和SearchViewCompat
。 - 迁移后的 Wear 清单元数据常量现在可通过
android.support.wear.utils.MetadataConstants
获取。 - 氛围模式支持现在适用于所有 activity,而不仅仅是 WearableActivity。如需了解详情,请参阅
AmbientMode
参考文档。 -
RoundedDrawable
现在支持 XML 膨胀。
bug 修复
- 应用在采用支持库 27 和可下载字体时发生崩溃
- 可下载字体无法用于更新 SDK 后创建的新项目
- SpeechRecognizer API 在最新升级中损坏
- 移除动画视图后,在绘制期间发生与 Fragment 相关的崩溃
- support-leanback-demos 媒体播放功能全部无法使用
- Android 支持库会向清单添加 <meta-data>
- FontResourcesParserCompat 应该了解 android: attrs
- Leanback Glue 不支持暂停输入键
- 当多个软件包共享同一工件 ID 时,IDE 中出现未解析的符号。
- CarExtender 中出现 Null 指针异常
- 创建 MediaController 后,错误的随机播放 / 重复模式设置了 PlaybackState
- 导航时,库集群默认海报运行到下一个集群
- 推荐卡片元数据被截断
- RecyclerView.AttachViewToParent() 出现 IllegalArgumentException
- 在对 SavedState 进行数据编出时出现 ClassNotFoundException(AOSP 问题 37133281)
- 焦点卡在 RecyclerView 中
- 修复了 Leanback LayoutManager 中的 ANR
修订版 26.1.0 版本
(2017 年 9 月)
这是一个特殊版本,用于将支持库与架构组件中的 Lifecycles 集成。如果您未使用 Lifecycles 库,则无需从 26.0.2 更新。如需了解详情,请参阅架构组件版本说明。
重要变更
Fragment
和FragmentActivity
(AppCompatActivity
的基类)现在会实现架构组件中的LifecycleOwner
接口。
修订版 26.0.2 版本
(2017 年 8 月)
bug 修复
- 菜单图标在支持库 26.0.0 上扁平化
GuidedAction.multilineDescription
无法在 Leanback 中正常运行
修订版 26.0.1 版本
(2017 年 8 月)
bug 修复
- FontCompat 26.0.0 在 O-MR1 设备上发生崩溃
- 26.0.0 Design 支持库不应支持 MultiDex(问题 63999442)
- 从 26.0.0 开始,AppBarLayout 现在具有 300px 的左内边距
- PlaybackTransportControl 导航无法使用
- 在 onCreate 完成之前的某个时间调用 Fragment.onCreateView
- 在对 android.support.v4.media.MediaMetadataCompat 进行数据编出时出现 android.os.BadParcelableException: ClassNotFoundException
修订版 26.0.0 版本
(2017 年 7 月)
重要提示:支持库现在可以通过 Google 的 Maven 制品库获取。您无需从 SDK 管理器下载支持代码库。如需了解详情,请参阅支持库设置。
重要变更
- 最低 SDK 版本已提升至 14。因此,一些仅仅为了与 14 之前的 API 级别而存在的 API 都已弃用。这些 API 的客户端应该迁移到其等效框架,正如每个弃用 API 对应的参考页面中所述。
- Wear 界面库包含一些类,可以帮助您实现适用于 Wear 设备的图案和布局。如需了解详情,请参阅 使用 Wear 界面库。
- Percent 支持模块已弃用。此模块的客户端应迁移到新的
ConstraintLayout
widget,此 widget 作为 SDK 管理器中的单独工件提供。 android.support.v7.app.NotificationCompat
及其包含的类已弃用,并将在未来的版本中移除:- 使用
NotificationCompat.Builder
,而不要使用v7.app.NotificationCompat.Builder
。之前依赖于使用 v7 AppCompat Builder 的功能现已合并到 v4 Compat Builder 中。 -
DecoratedCustomViewStyle
已移至android.support.v4.app
软件包。 -
MediaStyle
和DecoratedMediaCustomViewStyle
现在是 media-compat 库的一部分,可在 android.support.v4.media.app 软件包中找到。
- 使用
新增 API
RecyclerView
的新fastScrollEnabled
布尔标记。如果启用,则必须设置fastScrollHorizontalThumbDrawable
、fastScrollHorizontalTrackDrawable
、fastScrollVerticalThumbDrawable
和fastScrollVerticalTrackDrawable
。
API 差异
bug 修复
- RecyclerView.toString() 中出现无限循环
- 升级到 Canary 6 后,在 API 16 AVD 上运行 Kotlin 项目时出现 ResourceNotFoundException
- 采用支持库 26.0.0-beta2 的设计视图中出现 java.lang.AssertionError
- 支持库 widget 的 Android Studio 布局预览已损坏
- 如果 Preference 不是使用属性创建的,则会忽略 Preference.setSingleLineTitle()
- 支持库的 25.3.0 / 25.4.0 修订版本的 DAC“Since”注解有误
- ResourcesCompat.getFont() 抛出异常
- 工具栏标题未以粗体显示
- 使用 maxLines 自动调整大小会产生意外结果
- TextView.checkForRelayout() 中出现 NullPointerException
- AppCompatTextViewAutoSizeHelper.setRawTextSize() 在布局期间调用 requestLayout()
- EmojiAppCompatTextView 崩溃
- 当文本更改时,Autosize TextView 不会自动调整
- Instacart 中出现屏幕损坏
- MenuItemCompat 中出现 UnsupportedOperationException
- NotificationCompat 无法完全提取对 API 24 或更高级别的操作
- 布局更新时出现 CoordinatorLayout 锚定问题