此页面提供有关最新支持库软件包版本的详细信息。对于较早的版本,请参阅支持库修订版存档。
28.0.0 正式版
(2018 年 9 月 21 日)
这是 Support Library 28.0.0 的稳定版本,适合用于生产环境。这将是 android.support
封装下的最后一个功能版本,鼓励开发者迁移到AndroidX。
新功能
-
AnimatedStateListDrawableCompat
提供可绘制状态之间的动画过渡。 -
VectorDrawableCompat
增加了对渐变和ColorStateList
填充和描边的支持。
28.0.0 RC 2
(2018 年 8 月 27 日)
此支持库的候选版本被认为功能完整,其公共 API 表面稳定。除非出现任何严重问题,否则此版本将作为最终稳定版本发布。此版本应该可以安全地用于生产环境。请向公共问题跟踪器报告任何问题。
已修复的问题
- Proguard 删除了 View Model 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
- 片段替换事务导致新片段显示后上一个片段闪烁(AOSP 问题74051124)
- 27.1.0 中的加载器回调重大更改(AOSP 问题74135998)
- 当垂直网格视图设置列 >1 时,RTL 布局不起作用
- 使用 FragmentPagerAdapter 的 ViewPager 中 onLoadFinished 被多次调用
- AsyncListDiffer 应在设置当前列表后分派更新(AOSP 问题74003309)
- ShareActionProvider 在 27.1.0 中抛出 ClassCastException
- 使用 ViewPager 的片段生命周期更改(AOSP 问题73976255)
28.0.0 Alpha 1
(2018 年 3 月)
注意:28.0.0-alpha1 是支持 Android P 开发者预览版的预发布版本。其 API 表面可能会更改,并且不一定包含来自最新稳定版 Support Library 的功能或错误修复。
重要更改
- 正如之前在Android KTX 公告中提到的那样,我们正在继续在我们的库中采用
androidx
包前缀。一些全新的库,包括heifwriter
和recyclerview-selection
,正是在这个新的包中开始的。我们希望android.*
和androidx.*
之间的划分能更清楚地表明哪些 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)
- 抽屉布局 (来自 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
,其中包含新的属性和更新的组件样式。 - 我们添加了以下组件:
- 底部应用栏 (BottomAppBar)
- 芯片 (Chip)
- 芯片组 (ChipGroup)
- 材质按钮 (MaterialButton)
- 材质卡片视图 (MaterialCardView)
- 我们引入了一个新的应用程序主题,
- 切片 (Slices) 提供了一个框架,供应用嵌入来自其他应用的模板化内容。
- slices-builders 包含以模板格式构建内容的方法。
- slices-view 包含呈现该内容的方法。
- 浏览器操作 (Browser actions) 为应用开发者提供了一个协议,用于为 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月)
重要更改
- 加载器 (Loaders) 的底层实现已重写为使用 生命周期 (Lifecycle)。虽然 API 保持不变,但有一些行为更改:
initLoader()
、restartLoader()
和destroyLoader()
现在只能在主线程上调用。- 加载器的
onStartLoading()
和onStopLoading()
现在分别在包含的 FragmentActivity/Fragment 启动和停止时调用。 onLoadFinished()
现在只会在onStart()
和onStop
之间调用。因此,现在可以在onLoadFinished()
中安全地执行 Fragment 事务。- 与加载器相关的 FragmentController 方法现已弃用。
- DialogFragment 的
getDialog()
现在将一直非空,直到onDestroyView()
,而不是在dismiss()
中变为 null。现在可以通过检查getDialog().isShowing()
是否返回 false 来确定对话框是否已手动关闭。
新的 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
现在通过新的<external-media-path>
元素支持 API 21 及更高版本的设备上的getExternalMediaDirs()
。
错误修复
- 在 onCreate 中初始化加载器的 Fragment 在 ViewPager 中具有损坏的生命周期
- LoaderManager 在 onLoadFinished 中抛出 IllegalStateException
- LoaderViewModel 在 onCleared 中没有清除其加载器
- 找不到 android.arch.lifecycle.ViewModelStoreOwner 的类文件
- DialogFragment 的 onDismiss 在 dismiss() 之后没有立即调用
- 使用可下载字体时,国家/地区国旗表情符号在发布版设备上不起作用
- Preferences 库使用在旧版 Android 上不起作用的属性
- MediaCompat 的 testlib 工件类型文档不正确(AOSP 问题 71559905)
- Google Sans 在 TypefaceCompatUtil 中崩溃
- 公开接受集合作为参数的 ArraySet 构造函数。
- updateApi 删除了应该保留的 .ignore 文件
- 在 BrowseFragment 中创建了冗余的 MainFragments
- 从 CarRecyclerView 中删除反射的使用
- FragmentManagerImpl.execSingleAction 崩溃
- 使用 android.support.v4.content.PermissionChecker.checkSelfPermission 时出现(未记录的)java.lang.SecurityException
- 由于 State.mPreviousLayoutItemCount 在 setAdapter 中未清除,导致 RecyclerView IndexOutOfBoundsException(AOSP 问题 37657125)
- 在 onCreate 中初始化加载器的 Fragment 在 ViewPager 中具有损坏的生命周期(AOSP 问题 34831613)
- FragmentManagerImpl.execSingleAction 崩溃
27.0.2 版本发布
(2017年11月)
错误修复
-
EmojiEditTextHelper
抛出NullPointerException
。 -
IllegalStateException
:Fragment 尚未附加。 - 无法通过点击屏幕上的任何位置来关闭“投射”图标弹出窗口。
-
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 之间关系的能力。
- Android Wear 环境模式支持已通过使用 AmbientMode 无头片段而简化,这也使环境模式支持与使用架构组件兼容。
- 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 支持库正在向清单中添加
。 - FontResourcesParserCompat 应该理解 android:attrs
- Leanback Glue 不支持暂停输入键
- 多个包共享相同的构件 ID 时,IDE 中出现未解析的符号。
- CarExtender 中出现空指针异常
- 创建 MediaController 后,错误的混洗/重复模式设置 PlaybackState
- 库集群默认海报在导航时运行到下一个集群。
- 推荐卡元数据被截断
- 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 不是使用属性创建的,则忽略 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 锚定问题