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