最近的支持库修订

本页面提供了关于最近的支持库软件包版本的详细信息。对于早期版本,请参阅 支持库修订历史记录

修订版 28.0.0 生产

(2018 年 9 月 21 日)

这是 Support Library 28.0.0 的稳定版本,适合在生产环境中使用。这将是 android.support 打包下的最后一个功能版本,建议开发者迁移到 AndroidX

新特性

修订版 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 Search 应用在渲染静态 Slice 时崩溃
  • 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 月)

此 Support Library 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)
  • 即使 adapter 为 null,RecyclerView.setRecycledViewPool() 也会增加 attachCount
  • 如果 SmoothScroller.onStop 调用 stop() 或 startSmoothScroller(),则 RecyclerView 发生 NPE
  • Fragment Replacement 事务导致前一个 fragment 在新 fragment 显示后闪烁 (AOSP 问题 74051124)
  • Loader 回调在 27.1.0 中存在重大更改 (AOSP 问题 74135998)
  • 当垂直网格视图设置列 >1 时,RTL 布局不起作用
  • 在 ViewPager 使用 FragmentPagerAdapter 时,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 表面可能会发生变化,并且不一定包含 Support Library 最新稳定版本中的特性或错误修复。

重要变更

  • 如先前在 Android KTX 公告中所述,我们正在持续在我们库中采用 androidx 包前缀。一些全新的库,包括 heifwriterrecyclerview-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)
    • drawerlayout(来自 support-core-ui)
    • interpolator(来自 support-core-ui)
    • loader(来自 support-fragments 和 core-utils)
    • localbroadcastmanager(来自 support-core-utils)
    • print(来自 support-core-utils)
    • slidingpanelayout(来自 support-core-ui)
    • swiperefreshlayout(来自 support-core-ui)
    • viewpager(来自 support-core-ui)

新 API

  • recyclerview-selectionRecyclerView 提供项目选择支持。该包提供:
    • 支持创建、修改、检查和监控 RecyclerView 列表中的一组选定项目的变化。
    • 支持直观的多选操作
      • 触摸驱动的选择允许用户通过直观的长按并拖动手势选择项目范围。
      • 鼠标驱动的带状选择允许用户使用传统的鼠标指针带/套索操作在 RecyclerView 列表中选择一个项目块。
    • 支持以触摸为中心的设备,包括手机和支持触摸的笔记本电脑外形设备,以及以指针为中心的设备。
  • HEIF Writer 提供写入 HEIF 格式静止图像的支持。
  • 设计库
    • 我们引入了一个新的应用主题 Theme.MaterialComponents,其中包含新的属性和更新的组件样式。
    • 我们添加了以下组件:
      • BottomAppBar
      • Chip
      • ChipGroup
      • MaterialButton
      • MaterialCardView
  • Slices 提供了一个框架,用于应用嵌入来自其他应用的模板化内容。
    • slices-builders 包含以模板格式构建内容的方法。
    • slices-view 包含呈现该内容的方法。
  • 浏览器操作 为应用开发者提供了一个协议,用于启动针对 URL 的一致(但可自定义)上下文菜单。此功能依赖于存在支持浏览器操作的浏览器应用(例如 Chrome,此功能仍在开发中)。
  • ContextCompat.getSystemService()getSystemServiceName() 允许在所有 API 级别按类型查找系统服务。

错误修复

  • Fragment ViewModel 的 onCleared 未被调用 (AOSP 问题 74139250)
  • 在 ViewPager 使用 FragmentPagerAdapter 时,onLoadFinished() 被多次调用 (AOSP 问题 74182171)
  • RecyclerView 的 LinearLayoutManager 的 smoothScrollToPosition() 在某些情况下显示不稳定的(来回)移动 (AOSP 问题 71567765)

修订版 27.1.0 发布

(2018 年 2 月)

重要变更

  • Loaders 的底层实现已重写为使用 Lifecycle。尽管 API 保持不变,但行为发生了一些变化:
    • initLoader()restartLoader()destroyLoader() 现在只能在主线程上调用。
    • Loader 的 onStartLoading()onStopLoading() 现在分别在包含它的 FragmentActivity/Fragment 启动和停止时调用。
    • onLoadFinished() 只会在 onStart()onStop 之间调用。因此,现在可以在 onLoadFinished() 中安全地进行 Fragment 事务。
    • 与 Loaders 相关的 FragmentController 方法现已弃用。
  • DialogFragment 的 getDialog() 现在直到 onDestroyView() 之前都将是非 null 的,而不是在 dismiss() 中变为 null。您现在可以通过检查 getDialog().isShowing() 是否返回 false 来确定 Dialog 是否在 onStop() 中被手动解除。

新 API

  • RecyclerViewListAdapter(以及 AsyncListDiffer)使得在后台线程计算列表差异变得更容易。这些可以帮助您的 RecyclerView 自动动画内容更改,同时最大程度地减少 UI 线程上的工作。它们底层使用 DiffUtil
  • SortedList.ReplaceAll 支持更新 SortedList 中的所有数据,它会运行所有适当的插入、删除、更改和移动(移动被视为删除和插入)动画。
  • FragmentActivity 和 Fragment 现在实现了 ViewModelStoreOwner 接口,现在可以与 ViewModelProvider 构造函数一起使用,作为使用 ViewModelProviders.of() 的替代方案。
  • Fragments 现在具有 requireContext()requireActivity()requireHost()requireFragmentManager() 方法,这些方法返回相应 get 方法的 NonNull 对象,或抛出 IllegalStateException
  • requireViewById()findViewById()@NonNull 兼容版本,已添加到 WindowCompatActivityCompatViewCompat 中,当找不到目标时会抛出 IllegalArgumentException
  • LoaderCallbacks 方法现在具有适当的 @Nullable@NonNull 注解。
  • FileProvider 现在通过新的 <external-media-path> 元素支持在 API 21 及更高版本的设备上使用 getExternalMediaDirs()

错误修复

  • 在 onCreate 中初始化 Loader 的 Fragment 在 ViewPager 中生命周期异常
  • LoaderManager 在 onLoadFinished 中抛出 IllegalStateException
  • LoaderViewModel 在 onCleared 中不清除其 Loaders
  • 未找到 android.arch.lifecycle.ViewModelStoreOwner 的类文件
  • DialogFragment 的 onDismiss 在 dismiss() 后未立即调用
  • 使用可下载字体时,国家/地区旗帜表情符号在发布密钥设备上不起作用
  • Preferences 库使用在旧版本 Android 上不起作用的属性
  • MediaCompat 的 testlib artifact 类型文档错误 (AOSP 问题 71559905)
  • TypefaceCompatUtil 中的 Google Sans 崩溃
  • 暴露接受 Collection 的 ArraySet 构造函数。
  • updateApi 移除了应该保留的 .ignore 文件
  • 在 BrowseFragment 中创建了多余的 MainFragments
  • 从 CarRecyclerView 中移除反射的使用
  • java.lang.IllegalStateException 在 FragmentManagerImpl.checkStateLoss 处
  • 使用 android.support.v4.content.PermissionChecker.checkSelfPermission 时收到(未记录的)java.lang.SecurityException
  • RecyclerView IndexOutOfBoundsException 因为 setAdapter 中未清除 State.mPreviousLayoutItemCount (AOSP 问题 37657125)
  • 在 onCreate 中初始化 Loader 的 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 添加可为 null 的注解,包括以下内容:这可能导致 Kotlin 编译错误,如果未正确处理可为 null 的返回类型。
  • Fragment 可以使用支持库版本的 Transition 进行 fragment 过渡,包括共享元素过渡。
  • 内容分页库 (android.support.content.ContentPager) 提供通过 ContentProvider 暴露的内容的分页支持。使用此库可以让客户端避免在 UI 线程上进行昂贵的进程间“游标窗口交换”,从而为 Android 8.0 功能提供兼容性库。
  • ViewCompat 现在添加了 autofill 方法的包装器,包括 getImportantForAutofill()isImportantForAutofill()setAutofillHints()setImportantForAutofill()
  • Leanback 获得了新特性和改进,并移除了一些已弃用的类,例如:
    • Picker 现在可以使用 setSeparators() 方法在每列之间使用不同的分隔符。
    • 已添加 DiffCallback,以便 ArrayObjectAdapter 可以利用 DiffUtil 提供的输出。
    • 添加了基础架构,以支持具有可变控制的媒体播放器,添加了快进、重复、随机播放、下一首、上一首和倒带的可选控制。
    • 移除 MediaControllerGlue、PlaybackControlGlue、PlaybackControlSupportGluePlaybackOverlayFragment
  • 为了进行测试,PollingCheck 工具从 AOSP CTS 移植而来。它在超时窗口内轮询某个条件是否发生。
  • 添加了基础架构,以支持使用 PermissionCompatDelegate 在 Android 5.0 的 Instant Apps 上进行运行时权限。
  • 现在支持受信任的自定义标签页,同时支持定义应用程序和源 URI 之间的关系。
  • 通过使用 AmbientMode 无头 fragment,Android Wear 环境模式支持得到简化,这也使得支持环境模式与使用 Architecture Components 兼容。
  • 由于我们逐渐淘汰旧的 pre-V14 API,一些已弃用的类已被移除,例如 android.support.v7.NotificationCompat(请改为使用 v4 NotificationCompat)、KeyEventCompatParallelExecutorCompat SearchViewCompat
  • 迁移后的 Wear Manifest 元数据常量现在都可以通过 android.support.wear.utils.MetadataConstants 获得。
  • 环境模式支持现在可用于所有 Activity,而不仅仅是 WearableActivity。更多信息请参阅 AmbientMode 参考文档。
  • RoundedDrawable 现在支持 XML 通胀。

错误修复

  • 使用 Support Library 27 和可下载字体时应用崩溃
  • 更新 SDK 后创建的新项目无法使用可下载字体
  • 最新升级中 SpeechRecognizer API 损坏
  • 移除动画 View 后,在绘制期间发生 Fragment 相关崩溃
  • support-leanback-demos 媒体播放全部损坏
  • Android Support Library 将 <meta-data> 添加到 manifest 中
  • FontResourcesParserCompat 应该理解 android: attrs
  • Leanback Glue 不支持暂停输入键
  • 当多个包共享相同的 artifact id 时,IDE 中出现未解析的符号。
  • CarExtender 中出现 Null Pointer Exception
  • 创建 MediaController 后 PlaybackState 设置了错误的随机播放/重复模式
  • 在导航时,Library 集群默认海报运行到下一个集群
  • 推荐卡片元数据被截断
  • IllegalArgumentException 在 RecyclerView.attachViewToParent() 处
  • 反序列化 SavedState 时出现 ClassNotFoundException (AOSP 问题 37133281)
  • 焦点卡在 RecyclerView 中
  • 修复 Leanback LayoutManager 中的 ANR

修订版 26.1.0 发布

(2017 年 9 月)

这是一个特殊版本,用于将 Support Library 与 Architecture ComponentsLifecycles 集成。如果您未使用 Lifecycles 库,则无需从 26.0.2 更新。有关更多信息,请参阅 Architecture Components 发布说明

重要变更

修订版 26.0.2 发布

(2017 年 8 月)

错误修复

  • 在 Support Library 26.0.0 上,菜单图标被压平
  • GuidedAction.multilineDescription 在 Leanback 中无法正常工作

修订版 26.0.1 发布

(2017 年 8 月)

错误修复

  • FontCompat 26.0.0 在 O-MR1 设备上崩溃
  • 26.0.0 Design Support Library 不应包含 multidex 支持(问题 63999442
  • 从 26.0.0 起,AppBarLayout 现在有 300px 的左内边距
  • PlaybackTransportControl 导航损坏
  • Fragment.onCreateView 有时在 onCreate 完成之前调用
  • android.os.BadParcelableException: 解封时出现 ClassNotFoundException: android.support.v4.media.MediaMetadataCompat

修订版 26.0.0 发布

(2017 年 7 月)

重要提示:Support Library 现在可以通过 Google 的 Maven 存储库获取。您无需从 SDK 管理器下载支持存储库。有关更多信息,请参阅 Support Library 设置

重要变更

  • 最低 SDK 版本已提高到 14。因此,许多仅用于兼容 pre-14 API 级别的 API 已被弃用。这些 API 的客户端应迁移到其框架等效项,具体请参阅每个已弃用 API 的参考页面。
  • Wear UI Library 包含帮助您实现可在 Wear 设备上运行的模式和布局的类。有关更多信息,请参阅 使用 Wear UI Library
  • Percent Support module 已弃用。此模块的客户端应迁移到新的 ConstraintLayout 小部件,该小部件作为单独的 artifact 在 SDK Manager 中提供。
  • android.support.v7.app.NotificationCompat 及其包含的类已弃用,并将在未来版本中移除。

新 API

  • RecyclerView 的新 fastScrollEnabled 布尔标志。如果启用,必须设置 fastScrollHorizontalThumbDrawablefastScrollHorizontalTrackDrawablefastScrollVerticalThumbDrawablefastScrollVerticalTrackDrawable

API 差异

错误修复

  • RecyclerView.toString() 中出现无限循环
  • 升级到 Canary 6 后,在 API 16 AVD 上运行 Kotlin 项目时出现 ResourceNotFoundException
  • design view 中使用 support library 26.0.0-beta2 时出现 java.lang.AssertionError
  • Android Studio 布局预览对 Support Library 小部件无效
  • 如果 Preference 不是通过属性创建的,则 Preference.setSingleLineTitle() 会被忽略
  • DAC "Since" 注解对于 Support Library 的 25.3.0 / 25.4.0 修订版是错误的
  • ResourcesCompat.getFont() 抛出异常
  • Toolbar 标题非粗体字体
  • 使用 maxLines 自动调整大小会产生意外结果
  • TextView.checkForRelayout() 中出现 NullPointerException
  • AppCompatTextViewAutoSizeHelper.setRawTextSize() 在布局期间调用 requestLayout()
  • EmojiAppCompatTextView 崩溃
  • 文本更改时,Autosize TextView 不会自动调整
  • Instacart 中屏幕损坏
  • MenuItemCompat 中出现 UnsupportedOperationException
  • NotificationCompat 无法完全提取 API 24 或更高版本上的操作
  • 布局更新时 CoordinatorLayout 定位问题