blob: 05c55a7696426383c3c2d7357f44dd1d5d26b0fc [file] [log] [blame]
<html devsite><head>
<meta name="book_path" value="/_book.yaml"/>
<meta name="project_path" value="/_project.yaml"/>
</head>
<body>
<!--
Copyright 2018 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<h1 id="android_release_notes" class="page-title">Android 9 版本说明</h1>
<p>Android 9 现已发布!本页面总结了此版本中的主要功能,并提供了其他信息的链接(若有)。这些功能摘要按照功能文档在该网站上的位置进行整理。有关章节迁移和重命名的指南,请参阅 <a href="/setup/start/site-updates#Aug-2018">2018 年 8 月网站更新</a></p>
<h2 id="build">版本</h2>
<h3 id="generic_system_image_gsi">常规系统映像 (GSI)</h3>
<p><a href="/setup/build/gsi">常规系统映像 (GSI)</a> 介绍了适用于 Android 9 的常规系统映像 (GSI),并详细介绍了适用于搭载 Android 9 设备的 GSI 与适用于升级到 Android 9 设备的 GSI 之间的差异。</p>
<h2 id="architecture">架构</h2>
<h3 id="hardware_abstraction_layer">硬件抽象层</h3>
<h4 id="hidl_framework_backwards_compatibility">HIDL 框架向后兼容性</h4>
<p><a href="/devices/architecture/hal/framework-testing">HIDL 框架向后兼容性验证</a>是一种验证框架向后兼容性的方法。</p>
<h4 id="dynamically_available_hals">动态可用的 HAL</h4>
<p><a href="/devices/architecture/hal/dynamic-lifecycle">动态可用的 HAL</a> 支持在不使用或不需要 Android 硬件子系统时动态关闭这些子系统。</p>
<h3 id="hidl">HIDL</h3>
<h4 id="hidl_memory_block">HIDL 内存块</h4>
<p><a href="/devices/architecture/hidl/memoryblock">HIDL 内存块</a>是一个在 <code>hidl_memory</code><code>HIDL @1.0::IAllocator</code><code>HIDL @1.0::IMapper</code> 上编译的抽象层。它专为具有多个内存块以共享单个内存堆的 HIDL 服务而设计。</p>
<h3 id="device_tree_overlays">设备树叠加层</h3>
<h4 id="compressed_overlays">经过压缩的叠加层</h4>
<p>此版本增加了以下支持:在使用第 1 版设备树表格表头时,在设备树 Blob 叠加层 (DTBO) 映像中使用<a href="/devices/architecture/dto/optimize#compressed-overlays">经过压缩的叠加层</a></p>
<h4 id="dto_updates">DTO 更新</h4>
<p>此版本要求在将统一设备树 blob 传递给内核之前,引导加载程序不得修改<a href="/devices/architecture/dto/#p-update">设备树叠加层</a>中定义的属性。</p>
<h4 id="dto_image_header_versioning">DTO 映像标头版本控制</h4>
<p>此版本在 DTBO 映像标头中引入了一个<a href="/devices/architecture/dto/partitions">新的版本字段</a></p>
<h4 id="dtbo_verification">DTBO 验证</h4>
<p>此版本需要 DTBO 分区。要向 SoC DT 中添加节点或更改其中的属性,引导加载程序必须在 SoC DT 之上动态叠加特定于设备的 DT。有关详情请参阅<a href="/devices/architecture/dto/compile">编译和验证</a></p>
<h4 id="kernel_compliance">内核合规性</h4>
<p>此版本对影响内核、其接口和使用 DTBO 的要求进行了更改。有关详情请参阅以下页面:</p>
<ul>
<li><a href="/devices/architecture/kernel/releases">稳定的内核版本和更新</a></li>
<li><a href="/devices/architecture/kernel/android-common">Android 通用内核</a></li>
<li><a href="/devices/architecture/kernel/modular-kernels">模块化内核要求</a></li>
<li><a href="/devices/architecture/kernel/reqs-interfaces">接口要求</a></li>
<li><a href="/devices/architecture/dto/">设备树叠加层</a></li>
</ul>
<h3 id="vendor_ndk">供应商 NDK</h3>
<h4 id="vndk_design">VNDK:设计</h4>
<p>要了解此版本中的 VNDK 设计变更,请参阅以下页面:</p>
<ul>
<li><a href="/devices/architecture/vndk/index">供应商原生开发套件 (VNDK)</a></li>
<li><a href="/devices/architecture/vndk/build-system">VNDK 编译系统支持</a></li>
<li><a href="/devices/architecture/vndk/deftool">VNDK 定义工具</a></li>
<li><a href="/devices/architecture/vndk/dir-rules-sepolicy">目录、规则和 sepolicy</a></li>
<li><a href="/devices/architecture/vndk/extensions">VNDK 扩展</a></li>
<li><a href="/devices/architecture/vndk/linker-namespace">链接器命名空间</a></li>
</ul>
<h4 id="vndk_abi_checker">VNDK:ABI 检查工具</h4>
<p><a href="/devices/architecture/vndk/abi-stability">ABI 稳定性</a>描述了确保对供应商原生开发套件 (VNDK) 中的库所做的更改保持应用二进制接口 (ABI) 合规性的过程。</p>
<h4 id="vndk_snapshots">VNDK 快照</h4>
<p>即使系统和供应商映像是从不同版本的 Android 编译的,系统映像也可以使用 <a href="/devices/architecture/vndk/snapshot-design">VNDK 快照</a>为供应商映像提供正确的 VNDK 库。</p>
<h3 id="vendor_interface_object">供应商接口对象</h3>
<p><a href="/devices/architecture/vintf/">供应商接口对象</a>一节中的以下页面描述了此版本中的供应商接口对象更新:</p>
<ul>
<li><a href="/devices/architecture/vintf/objects">清单</a></li>
<li><a href="/devices/architecture/vintf/fcm">FCM 生命周期</a></li>
<li><a href="/devices/architecture/vintf/dm">设备清单开发</a></li>
</ul>
<h4 id="hidl_deprecation_schedule">HIDL 弃用时间表</h4>
<p>以下页面介绍了 Android 如何弃用和移除 HIDL HAL:</p>
<ul>
<li><a href="/devices/architecture/vintf/fcm">FCM 生命周期</a></li>
<li><a href="/devices/architecture/vintf/dm">设备清单开发</a></li>
</ul>
<h3 id="bootloader">引导加载程序</h3>
<h4 id="product_partitions">产品分区</h4>
<p>此版本支持使用 Android 编译系统编译 <a href="/devices/bootloader/product-partitions"><code>/product</code> 分区</a>。以前,Android 8.x 强制将系统芯片 (SoC) 特定组件从 <code>/system</code> 分区分离到 <code>/vendor</code> 分区,而没有为从 Android 编译系统编译的 OEM 特定组件提供专用空间。</p>
<h4 id="canonical_boot_reason_compliance">规范启动原因合规性</h4>
<p><a href="/devices/bootloader/boot-reason">规范启动原因</a>描述了对此版本中引导加载程序启动原因规范的更改。</p>
<h4 id="system_as_root">系统作为 Root</h4>
<p>搭载此版本的所有设备均必须使用 <a href="/devices/bootloader/system-as-root">system-as-root</a>,以便将 <code>ramdisk.img</code> 合并到 <code>system.img</code>(亦称为 no-ramdisk),而后者会作为 <code>rootfs</code> 进行装载。</p>
<h4 id="boot_image_header_versioning">启动映像标头版本控制</h4>
<p>从此版本开始,启动映像标头包含一个<a href="/devices/bootloader/boot-image-header">表明标头版本的字段</a>。引导加载程序必须检查此标头版本字段并相应地解析标头。</p>
<h4 id="dtbo_in_recovery">在恢复映像中使用 DTBO</h4>
<p>为了防止由于非 A/B 设备上的恢复映像与 DTBO 分区之间不匹配而导致 OTA 失败,恢复映像必须包含<a href="/devices/bootloader/recovery-image">来自 DTBO 映像的信息</a></p>
<h3 id="display">显示</h3>
<h4 id="display_cutouts">刘海屏</h4>
<p><a href="/devices/tech/display/display-cutouts">刘海屏</a>使应用开发者能够打造沉浸式全面屏体验,同时继续为设备前侧的重要传感器留出空间。</p>
<h4 id="rotate_suggestions">旋转建议</h4>
<p>此版本中的<a href="/devices/tech/display/rotate-suggestions">屏幕旋转行为</a>更新包括支持一种面向用户的控件,使用户能够横向或纵向固定屏幕旋转。</p>
<h4 id="synchronized_app_transitions">同步应用转换</h4>
<p><a href="/devices/tech/display/synched-app-transitions">同步应用转换</a>允许使用新的应用转换动画。</p>
<h4 id="text_classification_formerly_textclassifier">文本分类(原 TEXTCLASSIFIER)</h4>
<p>此版本引入了<a href="/devices/tech/display/textclassifier">文本分类器服务</a>,现在是实现文本分类的推荐方法,也是默认服务实现。</p>
<h4 id="wide_gamut_color">宽色域色彩</h4>
<p>此版本引入了对宽色域色彩的支持,包括:</p>
<ul>
<li>高动态范围 (HDR)</li>
<li>处理 BT2020 颜色空间中的内容,但不作为最终目标数据空间</li>
</ul>
<p>要使用宽色域色彩,设备的完整显示堆栈(屏幕、硬件合成器、GPU 等)必须支持宽色域色彩或缓冲区格式。即使硬件支持宽色域色彩,设备也不需要声称支持宽色域内容。但是,应启用宽色域色彩以充分利用硬件。为了避免不一致的视觉体验,在运行时不应关闭宽色域色彩。</p>
<h2 id="compatibility">兼容性</h2>
<h3 id="android_compatibility_definition_document_cdd">Android 兼容性定义文档 (CDD)</h3>
<p><a href="/compatibility/android-cdd">Android 9 兼容性定义文档</a>是在<a href="/compatibility/cdd">之前版本</a>的基础上编写的,并进行了一些更新,以涵盖新功能,以及对之前已发布功能的要求进行的更改。</p>
<h2 id="settings">设置</h2>
<h3 id="better_app_widgets">更好的应用微件</h3>
<p>Android 应用微件框架现在可让您更清楚地了解用户交互情况,特别是在用户删除或手动添加微件时。Launcher3 默认自带此功能。</p>
<p>制造商需要更新启动器应用(随设备提供)才能支持此功能(如果不是基于 Launcher3)。原始设备制造商 (OEM) 需要在其默认的启动器中支持新的 <a href="https://developer.android.com/reference/android/appwidget/AppWidgetProviderInfo#widgetFeatures" class="external">widgetFeatures API</a></p>
<p>除非启动器按预期实现此 API,否则此 API 本身并不能保证它可端到端正常运行。AOSP 包含实现示例。要查看提供的示例代码,请参阅 AOSP Change-Id Iccd6f965fa3d61992244a365efc242122292c0ca。</p>
<h3 id="device_state_change_notifications_to_package_installers">关于软件包安装程序的设备状态更改通知</h3>
<p>现在,只要语言区域或显示密度等属性发生更改,就可以将受保护的系统广播发送到拥有 <code>INSTALL_PACKAGES</code> 权限的应用。接收器可以在清单中注册,并且将唤醒相关进程以接收广播。这对于希望在发生此类更改时安装应用其他组件的软件包安装程序非常有用,但这种情况很少发生,因为有资格触发此广播的配置更改很少见。</p>
<p>设备状态更改通知源代码位于 <code>platform/frameworks/base</code> 下的以下位置:</p>
<ul>
<li><code>api/system-current.txt</code></li>
<li><code>core/java/android/content/Intent.java</code></li>
<li><code>core/res/AndroidManifest.xml</code></li>
<li><code>services/core/java/com/android/server/am/ActivityManagerService.java</code></li>
</ul>
<h3 id="information_architecture">信息架构</h3>
<p><a href="/devices/tech/settings/info-architecture">设置应用信息架构</a>变更包括提供了更多设置功能并简化了实现。</p>
<h2 id="tests">测试</h2>
<h3 id="atest">Atest</h3>
<p><a href="/compatibility/tests/development/atest">Atest</a> 是一个新的命令行工具,可让用户在本地编译、安装并运行 Android 测试,同时可以大大加快重新运行测试的速度,而无需您了解 Trade Federation 自动化测试框架命令行选项。</p>
<h3 id="compatibility_test_suite_cts">兼容性测试套件 (CTS)</h3>
<h4 id="cts_downloads">CTS 下载</h4>
<p>支持 Android 9 的新 CTS 包已上传到 <a href="/compatibility/cts/downloads">CTS 下载</a>页面。随附测试的源代码可以与开放源代码树中的 <code>android-cts-9.0_r1</code> 标记同步。</p>
<h4 id="cts_options">CTS 选项</h4>
<p>对于 Android 9,CTS v2 添加了以下<a href="/compatibility/cts/run#ctsv2_reference">命令和参数</a></p>
<ul>
<li><code>run retry</code> - 重新尝试运行在以前的会话中失败或未执行的所有测试。</li>
<li><code>‘--shard-count</code> - 将 CTS 运行分为指定数量的独立块,以便在多台设备上并行运行。</li>
</ul>
<p>此外,先前未记录的命令“--retry-type”已添加到同一 <a href="/compatibility/cts/run#ctsv2_reference">CTS v2 控制台命令参考</a>中。</p>
<h4 id="secure_element">安全元件</h4>
<p><a href="/compatibility/cts/secure-element">安全元件服务</a>可检查平台支持的全局安全元件(实质上是检查设备是否具有 SE HAL 实现,以及有的话,究竟具有多少 SE HAL 实现)。您可以根据这项服务测试相关 API 和底层安全元件实现。</p>
<h4 id="sensor_fusion_box">传感器融合盒</h4>
<p>传感器融合盒用于 CameraITS sensor_fusion 测试和多摄像头同步测试。它可以为衡量 Android 手机的摄像头和其他传感器的时间戳准确度提供一致的测试环境。有关详情请参阅这些页面:</p>
<ul>
<li><a href="/compatibility/cts/sensor-fusion-quick-start">传感器融合盒快速入门指南</a>提供了有关如何首次设置传感器融合测试和传感器融合盒的分步说明。</li>
<li><a href="/compatibility/cts/sensor-fusion-box-assembly">传感器融合盒组件</a>提供了组装传感器融合盒的分步说明。</li>
</ul>
<h4 id="wide_field_of_view_its-in-a-box">宽视野盒装 ITS</h4>
<p><a href="/compatibility/cts/camera-wfov-box-assembly">宽视野盒装 ITS</a> 是相机图像测试套件 (ITS) 中的一种自动化系统,旨在测试宽视野 (WFoV) 和常规视野 (RFoV) 相机系统。</p>
<h3 id="vendor_test_suite">供应商测试套件</h3>
<h4 id="host_controller_architecture">主机控制器架构</h4>
<p><a href="/compatibility/vts/host-controller">VTS 主机控制器架构</a>描述了与其基于云的测试提供服务相集成的 VTS 测试框架的架构。</p>
<h4 id="service_name_aware_hal_testing">服务名称感知型 HAL 测试</h4>
<p><a href="/compatibility/vts/sna-hal-testing">VTS 服务名称感知型 HAL 测试</a>支持根据运行供应商测试套件 (VTS) 测试的设备来获取指定 HAL 实例的服务名称。</p>
<h4 id="hal_testability_check">HAL 可测试性检查</h4>
<p><a href="/compatibility/vts/hal-testability">VTS HAL 可测试性检查</a>包括一种利用设备配置识别应针对相应设备目标跳过哪些 VTS 测试的运行时方法。</p>
<h4 id="automated_testing_infrastructure">自动化测试基础架构</h4>
<p><a href="/compatibility/vts/automated-test-infra">自动化测试基础架构</a>页面介绍了在搭载 AOSP 常规系统映像 (GSI) 的合作伙伴设备上自动运行供应商测试套件 (VTS)、CTS 或其他测试的新 VTS 基础架构。</p>
<h3 id="debugging">调试</h3>
<h4 id="advanced_telemetry">高级遥测技术</h4>
<p>在 Android 中,遥测是自动收集有关设备、Android 系统和应用的使用情况与诊断信息的过程。在以前的 Android 版本中,遥测堆栈受到限制,并且无法捕获识别和解决系统可靠性以及设备或应用问题所需的信息。即使并非不可能,这也使得确定问题的根本原因变得很困难。</p>
<p>Android 9 包含一个新的遥测功能 <code>statsd</code>,它通过更快地收集更加有用的数据解决了这一缺陷。<code>statsd</code> 可收集应用使用情况、电池和进程统计信息以及崩溃数据。这些数据会经过分析并用于改进产品、硬件和服务。</p>
<p>更多详情请参阅 <code>frameworks/base/cmds/statsd/</code></p>
<h2 id="security_features">安全功能</h2>
<h3 id="application_signing">应用签名</h3>
<p><a href="/security/apksigning/v3">APK 签名方案 v3</a> 是新的 APK 签名方案,它支持 APK 密钥轮换。</p>
<h3 id="biometric_support">生物识别支持</h3>
<p>Android 9 包含一个 <a href="https://developer.android.com/preview/features/security#fingerprint-auth" class="external">BiometricPrompt API</a>,应用可以使用该 API 采用与设备和模态无关的方式集成生物识别身份验证支持。要详细了解如何集成生物识别堆栈以包含 <code>BiometricPrompt</code>,请参阅<a href="/security/biometric">生物识别</a></p>
<h3 id="dynamic_analysis">动态分析</h3>
<p>Android 9 支持更多<a href="/devices/tech/debug/fuzz-sanitize">漏洞攻击缓解和分析工具</a></p>
<h4 id="control_flow_integrity_cfi">控制流完整性 (CFI)</h4>
<p><a href="/devices/tech/debug/cfi">控制流完整性 (CFI)</a> 是一种安全机制,它不允许更改已编译二进制文件的原始控制流图,因而执行此类攻击变得异常困难。</p>
<h4 id="kernel_cfi">内核 CFI</h4>
<p>除了默认启用的系统 CFI 之外,此版本还支持<a href="/devices/tech/debug/kcfi">内核控制流完整性</a></p>
<h3 id="encryption">加密</h3>
<h4 id="file-based_encryption">文件级加密</h4>
<p><a href="/security/encryption/file-based">文件级加密</a>进行了更新,以支持<a href="/devices/storage/adoptable">可合并的存储设备</a>。对于新设备,我们建议使用文件级加密而不是全盘加密。</p>
<h4 id="metadata_encryption">元数据加密</h4>
<p>此版本引入了对<a href="/security/encryption/metadata">元数据加密</a>(如果存在硬件支持)的支持。对于元数据加密,启动时出现的单个密钥会加密未通过文件级加密进行加密的任何内容。</p>
<h3 id="keystore">密钥存储区</h3>
<p>Android 9 包括 <a href="https://android.googlesource.com/platform/hardware/interfaces/+/master/keymaster/4.0/" class="external">Keymaster 4</a>,它具有以下功能:</p>
<h4 id="strongbox">StrongBox</h4>
<p>Android 9 包括对 Android Keystore 密钥的支持,这些密钥在物理上独立且专为高安全性应用(例如嵌入式<a href="/compatibility/cts/secure-element">安全元件</a> (SE))而构建的 CPU 中存储和使用。StrongBox Keymaster 是独立安全硬件中的 Keymaster HAL 实现。StrongBox 具有:</p>
<ul>
<li>独立 CPU</li>
<li>整体安全存储空间</li>
<li>高品质的真随机数生成器</li>
<li>防篡改包装</li>
<li>防旁路攻击功能</li>
</ul>
<h4 id="secure_key_import">安全密钥导入</h4>
<p>为了将密钥安全地导入 Keymaster 4,在设备外创建的密钥使用授权规范进行加密,这些授权定义了密钥的使用方式。</p>
<h5 id="3des_support">3DES 支持</h5>
<p>Keymaster 4 包含 3DES,可与使用 3DES 的旧版系统兼容。</p>
<h4 id="version_binding">版本绑定</h4>
<p>为了支持 Treble 的模块化结构并取消 <code>system.img</code><code>boot.img</code> 的绑定,Keymaster 4 对<a href="/security/keystore/version-binding">密钥版本绑定</a>模式进行了更改,使每个分区都有单独的补丁程序级别。这允许每个分区独立更新,同时仍提供回滚保护。</p>
<h4 id="android_protected_confirmation">Android 受保护的确认</h4>
<p>在搭载 Android 9 的受支持设备上,开发者可以使用 <a href="https://developer.android.com/preview/features/security#android-protected-confirmation" class="external">Android Protected Confirmation API</a>。通过使用这个新 API,应用可以利用 <code><a href="https://developer.android.com/reference/android/security/ConfirmationPrompt.html">ConfirmationPrompt</a></code> 的实例向用户显示提示,以提醒他们批准一条简短声明。此声明允许应用重新确认用户希望完成敏感交易,例如进行付款。</p>
<h3 id="selinux">SELinux</h3>
<h4 id="per-app_selinux_sandbox">按应用划分的 SELinux 沙盒</h4>
<p><a href="/security/app-sandbox">应用沙盒</a>提供了新的保护和测试用例,以确保面向 Android 9 及更高版本的所有非特权应用均可运行单独的 SELinux 沙盒。</p>
<h4 id="treble_selinux_changes">Treble SELinux 变更</h4>
<p><a href="/security/selinux">SELinux 一节</a>的几个页面记录了此版本对 Treble SELinux 的更新。</p>
<h4 id="vendor_init">Vendor_init</h4>
<p><a href="/security/selinux/vendor-init">供应商 init</a> 中介绍了相关更新,这些更新旨在使用单独的 SELinux 域,利用供应商专属权限运行 <code>/vendor</code> 命令来填补 Treble 系统/供应商拆分中存在的 init 进程访问漏洞。</p>
<h4 id="system_properties">系统属性</h4>
<p>Android 9 禁止在非必要时在 <code>system</code><code>vendor</code> 分区之间共享<a href="/security/selinux/compatibility#system-property-and-process-labeling-ownership">系统属性</a>,并提供了一种用于确保在共享系统属性之间保持一致性的方法。</p>
<h5 id="selinux_attribute_tests">SELinux 属性测试</h5>
<p>Android 9 包含一些新的<a href="https://android.googlesource.com/platform/system/sepolicy/+/master/tests/sepolicy_tests.py" class="external">编译时测试</a>,旨在确保特定位置的所有文件都具有<a href="/security/selinux/compatibility#compatibility-attributes">适当的属性</a>。例如,<code>sysfs</code> 中的所有文件都具有所需的 <code>sysfs_type</code> 属性。</p>
<h2 id="audio">音频</h2>
<h3 id="high-resolution_audio_effects">高解析度音效</h3>
<p><a href="/devices/audio/highres-effects">高解析度音效</a>的更新包括将音效处理从 int16 转换为浮动格式,并增加了同步客户端输出轨道、最大客户端/服务器内存和总混合轨道。</p>
<h2 id="camera">摄像头</h2>
<h3 id="external_usb_cameras">外接 USB 摄像头</h3>
<p>此版本支持使用采用标准 Android Camera2 API 和相机 HIDL 接口的<a href="/devices/camera/external-usb-cameras">即插即用 USB 摄像头</a>(即网络摄像头)。</p>
<h3 id="motion_tracking">运动追踪</h3>
<p>摄像头设备可以<a href="/devices/camera/motion-tracking">通告运动跟踪功能</a></p>
<h3 id="multi-camera_support">多摄像头支持</h3>
<p><a href="/devices/camera/multi-camera">多摄像头支持</a>通过一个新的逻辑摄像头设备(由两个或更多个指向同一方向的物理摄像头设备组成)引入了对多摄像头设备的 API 支持。</p>
<h3 id="session_parameters">会话参数</h3>
<p>作为拍摄会话初始化阶段的一部分,<a href="/devices/camera/session-parameters">实现会话参数</a>可以通过使摄像头客户端主动配置成本高的请求参数的子集来减少延迟。</p>
<h3 id="single_producer_multiple_consumer_buffer">单一生产方、多个消费方缓冲区</h3>
<p><a href="/devices/camera/singleprod-multiconsum">单一生产方、多个消费方摄像头缓冲区传输</a>是一组新方法,允许摄像头客户端在拍摄会话处于活动状态且摄像头流式传输正在进行时动态地添加和移除输出 Surface。</p>
<h2 id="connectivity">连接</h2>
<h3 id="calling_and_messaging">通话和短信</h3>
<h4 id="implementing_data_plans">实现流量套餐</h4>
<p>此版本可以更好地为使用 <code>SubcriptionPlan</code> API <a href="/devices/tech/connect/data-plans">实现流量套餐</a>的运营商提供支持。</p>
<h4 id="third-party_calling_apps">第三方通话应用</h4>
<p>此版本提供了允许<a href="/devices/tech/connect/third-party-call-apps">第三方通话应用</a>处理并发传入的运营商呼叫,并在系统呼叫日志中记录呼叫的 API。</p>
<h3 id="carrier">运营商</h3>
<h4 id="carrier_identification">运营商识别号</h4>
<p>在 Android 9 中,AOSP 添加了运营商 ID 数据库以帮助<a href="/devices/tech/config/carrierid">识别运营商</a>。该数据库通过提供识别运营商的通用方法,最大限度地减少了重复逻辑和分散的应用体验。</p>
<h4 id="esim">eSIM 卡</h4>
<p>嵌入式 SIM 卡(eSIM 卡或 eUICC 卡)是允许移动用户在没有物理 SIM 卡的情况下,下载运营商配置文件并激活运营商服务的最新技术。在此版本中,Android 框架提供了用于访问 eSIM 卡和管理 eSIM 卡上的订阅配置文件的标准 API。有关详情请参阅:</p>
<ul>
<li><a href="/devices/tech/connect/esim-overview">实现 eSIM 卡</a></li>
<li><a href="/devices/tech/connect/esim-modem-requirements">调制解调器要求</a></li>
<li><a href="/devices/tech/connect/esim-euicc-api">eUICC API</a></li>
</ul>
<h4 id="multi-sim_support_for_ims_settings">对 IMS 设置的多 SIM 卡支持</h4>
<p>此版本改进了 <a href="/devices/tech/connect/ims">IMS</a> 用户设置。用户可以按单个订阅设置 LTE 语音通话 (VoLTE)、视频通话和 WLAN 通话,而不是在所有订阅中共享这些设置。</p>
<h4 id="sim_state_broadcasts">SIM 状态广播</h4>
<p>此版本弃用了 <code>Intent.ACTION_SIM_STATE_CHANGED</code>,并针对卡状态和卡应用状态添加了两个单独的广播:<code>TelephonyManager.ACTION_SIM_CARD_STATE_CHANGED</code><code>TelephonyManager.ACTION_SIM_APPLICATION_STATE_CHANGED</code></p>
<p>通过此项变更,仅需要知道卡是否存在的接收器不再需要监听应用状态改变,并且仅需要知道卡应用是否准备好的接收器不需要监听卡状态改变。</p>
<p>这两个新的广播均 @SystemApis 并且不具有粘性。只有具有 <code>READ_PRIVILEGED_PHONE_STATE</code> 权限的接收器可以接收广播。</p>
<p>当用户解锁设备时,intent 不会重新广播。依赖于在用户解锁之前发送的广播的接收器必须是 <code>directBootAware</code>,或者必须在用户解锁后查询状态。可以使用 TelephonyManager 中的相应 API 查询状态:<code>getSimCardState()</code><code>getSimApplicationState()</code></p>
<h3 id="wi-fi">WLAN</h3>
<h4 id="carrier_wi-fi">运营商 WLAN</h4>
<p><a href="/devices/tech/connect/carrier-wifi">运营商 WLAN</a> 允许设备自动连接到运营商实现的 WLAN 网络。在人群拥挤或信号不足的区域(如体育场或地铁站),运营商 WLAN 可用于改善用户的连接体验和分载流量。</p>
<h4 id="mac_randomization">随机分配 MAC 地址</h4>
<p><a href="/devices/tech/connect/wifi-mac-randomization">随机分配 MAC 地址</a>允许设备在探测新网络时使用随机 MAC 地址,而当前未与网络相关联。在此版本中,可以启用相关开发者选项,使设备在连接到 WLAN 网络时使用随机分配的 MAC 地址。</p>
<h4 id="turn_on_wi-fi_automatically">自动开启 WLAN</h4>
<p>借助<a href="/devices/tech/connect/wifi-infrastructure#turn_on_wi-fi_automatically">自动开启 WLAN</a> 功能,只要设备靠近已保存且接收信号强度指示器 (RSSI) 相对较高的 WLAN 网络,便会自动重新启动 WLAN。</p>
<h4 id="wi-fi_round_trip_time_rtt">WLAN 往返时间 (RTT)</h4>
<p><a href="/devices/tech/connect/wifi-rtt">WLAN 往返时间 (RTT)</a> 允许设备测量与其他支持设备的距离:无论是接入点 (AP) 还是 WLAN 感知对等设备(如果设备支持 WLAN 感知)。此功能基于 IEEE 802.11mc 协议,使应用能够使用准确性更高的定位功能和增强的感知功能。</p>
<h4 id="wi-fi_scoring_improvements">WLAN 评分改进</h4>
<p>经过改进的 WLAN 评分模型可以快速准确地确定设备何时应退出连接的 WLAN 网络或进入新的 WLAN 网络。这些模型通过避免连接缺口为用户提供可靠而无缝的体验。</p>
<p>您应该查看并调整 config.xml 资源中的 RSSI 值,尤其是以下几项:</p>
<ul>
<li><code>config_wifi_framework_wifi_score_bad_rssi_threshold_5GHz</code></li>
<li><code>config_wifi_framework_wifi_score_entry_rssi_threshold_5GHz</code></li>
<li><code>config_wifi_framework_wifi_score_bad_rssi_threshold_24GHz</code></li>
<li><code>config_wifi_framework_wifi_score_entry_rssi_threshold_24GHz</code></li>
</ul>
<aside class="note"><strong>注意</strong><span>:Android 8.1 中引入了“entry”值,并且会根据“bad”阈值的默认值来为其选择默认值,以实现兼容性。理想情况下,进入阈值应比相应的退出(“差”)阈值高 3 分贝或更多。</span></aside>
<h4 id="wi-fi_staap_concurrency">WLAN STA/AP 并发</h4>
<p><a href="/devices/tech/connect/wifi-sta-ap-concurrency">WLAN STA/AP 并发</a>可以让设备同时在电台 (STA) 和接入点 (AP) 模式下运行。对于支持同步双频段 (DBS) 的设备,此功能开启了新功能,例如,当用户想要启用热点 (softAP) 时不会中断 STA WLAN。</p>
<h4 id="wifistatemachine_improvements">WiFiStateMachine 改进</h4>
<p><code>WifiStateMachine</code> 是用于控制 WLAN 活动、协调用户输入(操作模式:热点、扫描、连接或关闭)以及控制 WLAN 网络操作(例如,扫描、连接)的主类。</p>
<p>在此版本中,<code>WifiStateMachine</code> 的 WLAN 框架代码和实现经过了重新设计,减小了代码大小,使 WLAN 控制逻辑更易于遵循,改进了控制粒度并提高了单元测试的覆盖范围和质量。</p>
<p>概括地讲,<code>WifiStateMachine</code> 允许 WLAN 处于以下四种状态之一:</p>
<ol>
<li>客户端模式(可以连接和扫描)</li>
<li>仅扫描模式</li>
<li>SoftAP 模式(WLAN 热点)</li>
<li>已停用(WLAN 完全关闭)</li>
</ol>
<p>每种 WLAN 模式对运行服务都有不同的要求,并且应以一致的方式设置,从而只处理与其操作相关的事件。新实现将代码限制为与该模式相关的事件,缩短了调试时间并降低了由于复杂性而引入新错误的风险。除了对模式功能的显式处理之外,线程管理以一致的方式处理,并且消除了使用异步信道作为同步机制这一行为。</p>
<h4 id="wi-fi_permission_updates">WLAN 权限更新</h4>
<p>在此版本中,系统会动态检查 <code>CHANGE_WIFI_STATE</code> 应用权限,并且用户可以关闭该权限。用户可以通过<strong>设置 &gt; 应用和通知 &gt; 特殊应用权限 &gt; WLAN 控制</strong>中的特殊设置页面停用任何应用的权限。</p>
<p>应用必须能够处理未授予 <code>CHANGE_WIFI_STATE</code> 权限的情况。</p>
<p>要验证此行为,请运行 roboelectric 和手动测试。</p>
<p>在以下位置运行 roboelectric 测试:<a href="https://android.googlesource.com/platform/packages/apps/Settings/+/master/tests/robotests/src/com/android/settings/wifi/" class="external">/packages/apps/Settings/tests/robotests/src/com/android/settings/wifi/AppStateChangeWifiStateBridgeTest.java</a> </p>
<p>对于手动测试:</p>
<ol>
<li>依次转到“设置”&gt;“应用和通知”&gt;“特殊应用权限”&gt;“WLAN 控制”。</li>
<li>选择并关闭应用的权限。</li>
<li>验证应用是否可以处理未授予 <code>CHANGE_WIFI_STATE</code> 权限的情形。</li>
</ol>
<h4 id="wps_deprecation">WPS 弃用</h4>
<p>由于安全问题,此版本已弃用和停用 <code>WiFiManager</code> WLAN 保护设置 (WPS)。但是,<code>WiFiDirect</code> 仍然在 WPA 客户端中使用 WPS。</p>
<h2 id="graphics">图形</h2>
<h3 id="implementation">实现</h3>
<h4 id="vulkan_11_api">Vulkan 1.1 API</h4>
<p>此版本支持实现 <a href="/devices/graphics/implement-vulkan">Vulkan 1.1 图形 API</a></p>
<h4 id="winscope_tool_for_window_transition_tracing">用于窗口转换跟踪的 WinScope 工具</h4>
<p>此版本引入了用于跟踪窗口转换的 WinScope 工具。WinScope 提供了用于在转换期间和转换后记录和分析窗口管理器状态的基础架构和工具。它允许记录和单步调试窗口转换,同时将所有相关窗口管理器状态记录到跟踪文件中。您可以使用此数据重播并单步调试转换。</p>
<p>WinScope 工具源代码位于 <code>platform/development/tools/winscope</code></p>
<h2 id="interaction">交互性</h2>
<h3 id="automotive_audio">车载音频</h3>
<p><a href="/devices/automotive/audio">车载音频</a>一节描述了汽车相关 Android 实现的音频架构。</p>
<p><a href="/devices/interaction/neural-networks">神经网络</a> (NN) HAL 定义了各种加速器的概念。这些加速器的驱动程序必须符合此 HAL。</p>
<h3 id="vehicle_hal">车载 HAL</h3>
<p><a href="/devices/automotive/properties">车辆属性</a>描述了对车载 HAL 接口的更改。</p>
<h3 id="gnss_satellite_selection">GNSS 卫星选择</h3>
<p>使用新的全球导航卫星系统 (GNSS) HAL(1.1 版及更高版本)时,Android 框架会监控 Android 设置。合作伙伴可以通过 Google Play 服务或其他系统更新来更改这些设置。这些设置可告知 GNSS HAL 是否不应使用某些 GNSS 卫星。在持续出现 GNSS 卫星或星群错误时,或者为了更快地响应使用不同的时制和外部事件(例如闰秒和/或日或周数滚动增加)混合星群时可能发生的 GNSS HAL 实现问题时,这些设置非常有用。</p>
<h3 id="gnss_hardware_model">GNSS 硬件型号</h3>
<p>在 Android 9 中,GNSS HAL 1.1 或更高版本可以将有关硬件 API 的信息传递给平台。平台需要实现 <code>IGnssCallback</code> 接口并向 HAL 传递一个句柄。GNSS HAL 通过 <a href="https://developer.android.com/reference/android/location/LocationManager#getGnssHardwareModelName()" class="external"><code>LocationManager#getGnssHardwareModelName()</code></a> API 传递硬件型号信息。设备制造商应与其 GNSS HAL 提供商合作,以尽可能提供相关信息。</p>
<h2 id="permissions">权限</h2>
<h3 id="configuring_discretionary_access_control_dac_updates">配置自主访问控制 (DAC) 更新</h3>
<p><a href="/devices/tech/config/filesystem">配置自主访问控制 (DAC)</a> 更新了用于扩展文件系统功能的 Android ID (AID) 机制。</p>
<h3 id="update_on_the_privileged_apps_permissions_whitelisting">更新特权应用权限白名单</h3>
<p>从 Android 9 开始,如果有权限应该被拒绝,请修改 XML 以使用 <code>deny-permission</code> 标记,而不是先前版本中使用的 <code>permission</code> 标记。</p>
<h2 id="data">数据</h2>
<h3 id="bandwidth_estimation_improvements">带宽估测改进</h3>
<p>Android 9 改进了对带宽估测的支持。如果 Android 应用知道可用的数据带宽,则可以更好地决定用于视频通话和视频串流的分辨率。</p>
<p>在运行 Android 6.0 及更高版本的设备上,想获得移动网络带宽估算值的调用程序会调用 <a href="https://developer.android.com/reference/android/net/ConnectivityManager.html#requestBandwidthUpdate(android.net.Network)" class="external"><code>ConnectivityManager.requestBandwidthUpdate()</code></a>,并且框架可以提供下行链路带宽估算值。<em></em></p>
<p>但是,在运行 Android 9 或更高版本的设备上,当带宽估算值发生显著变化时,<a href="https://developer.android.com/reference/android/net/ConnectivityManager.NetworkCallback.html#onCapabilitiesChanged(android.net.Network,%20android.net.NetworkCapabilities)" class="external"><code>onNetworkCapabilitiesChanged()</code></a> callback 会自动触发,并且调用 <code>requestBandwidthUpdate()</code> 是空操作;系统会为关联的 <a href="https://developer.android.com/reference/android/net/NetworkCapabilities#getlinkdownstreambandwidthkbps" class="external"><code>getLinkDownstreamBandwidthKbps()</code></a><a href="https://developer.android.com/reference/android/net/NetworkCapabilities#getlinkupstreambandwidthkbps" class="external"><code>getLinkUpstreamBandwidthKbps()</code></a> 填入由物理层提供的已更新信息。</p>
<p>此外,设备可以通过 <a href="https://developer.android.com/reference/android/telephony/ServiceState#getcellbandwidths" class="external"><code>ServiceState.getCellBandwidths()</code></a> 检查 LTE 单元带宽。这使应用可以确切地知道给定单元上可用的带宽(频率)有多少。通过隐藏菜单可以获得单元带宽信息,以便现场测试人员可以检查最新信息。</p>
<h3 id="ebpf_traffic_monitoring">eBPF 流量监控</h3>
<p><a href="/devices/tech/datausage/ebpf-traffic-monitor">eBPF 网络流量工具</a>使用内核和用户空间实现的组合来监控自上次设备启动以来设备上的网络使用情况。它提供了额外的功能,例如套接字标记、分离前台/后台流量,以及按 UID 划分的防火墙,以根据设备状态阻止应用访问网络。</p>
<h3 id="restore_to_lower_apis">恢复到较低版本的 API</h3>
<p>设备现在可以从操作系统的未来版本进行恢复。当用户升级手机之后将手机丢失或损坏时,此功能特别有用。</p>
<p>如果 OEM 修改其中任何系统软件包(Android、系统、设置)的备份代理,那么这些代理应该执行在较新版平台中进行的备份集恢复,而不会出现崩溃并至少恢复一些数据。</p>
<p>建议您使用验证程序检查给定备份数据是否存在无效值,并仅恢复有效数据(如 <code>core/java/android/provider/SettingsValidators.java</code>)。</p>
<p>此功能在默认情况下处于启用状态。可以通过 <code>Settings.Global.OVERRIDE_SETTINGS_PROVIDER_RESTORE_ANY_VERSION</code> 停止支持 SettingsBackupAgent(用于从未来版本进行恢复)。除非设备制造商扩展了 ROM 中包含的某个备份代理(或添加了自定义代理),否则无需进行任何额外的实现。</p>
<p>此功能允许系统从平台的未来版本进行恢复;不过,恢复后的数据可能会不完整,这一点是可以理解的。以下说明适用于下述备份代理:</p>
<ul>
<li><p><strong>PackageManagerBackupAgent</strong>:通过格式版本控制为未来版本的备份数据提供支持;此处的扩展程序必须与当前的恢复代码兼容,或遵循类中的指令(包括递增适当的常量)。</p></li>
<li><p><strong>SystemBackupAgent</strong>:在此版本及更高版本的 Android 中,<code>restoreAnyVersion = false</code>。不支持从更高版本的 API 进行恢复。</p></li>
<li><p><strong>SettingsBackupAgent</strong>:从此版本开始,<code>restoreAnyVersion = true</code>
通过验证程序提供部分支持。如果目标操作系统中存在某项设置的验证程序,则可以从更高版本的 API 恢复该设置。添加任何设置都应附带该设置的验证程序。请查看相关类以了解详情。</p></li>
<li><p>ROM 中包含的任何<strong>自定义备份代理</strong>都应做到以下两点:一旦备份数据格式发生不兼容的更改,就应递增其版本号;如果其代理未做好准备,无法根据未来版本的代码处理备份数据,则应确保 <code>restoreAnyVersion = false</code>(默认值)。</p></li>
</ul>
<h2 id="enterprise">企业</h2>
<h3 id="managed_profile_improvements">托管配置文件改进</h3>
<p><a href="/devices/tech/admin/managed-profiles">托管配置文件</a>用户体验更改使用户可以更轻松地识别、访问和控制托管配置文件。</p>
<h3 id="pause_otas">暂停 OTA</h3>
<p>新的 @SystemApi 允许设备所有者<a href="/devices/tech/admin/ota-updates">无限期地暂停 OTA 更新</a>,包括安全更新。</p>
<h2 id="performance">性能</h2>
<h3 id="health_20">Health 2.0</h3>
<p>此版本引入了从 health@1.0 HAL 升级的主要版本 android.hardware.health HAL 2.0。有关详情请参阅以下页面:</p>
<ul>
<li><a href="/devices/tech/health/">运行状况</a></li>
<li><a href="/devices/tech/health/implementation">实现“运行状况”</a></li>
<li><a href="/devices/tech/health/deprecation">弃用 health@1.0</a></li>
</ul>
<h3 id="apk_caching">APK 缓存</h3>
<p>Android 9 包含一个 <a href="/devices/tech/perf/apk-caching">APK 缓存</a>解决方案,以在支持 A/B 分区的设备上快速安装预加载应用。OEM 可以将预加载和热门应用放置在新 A/B 分区设备上的 APK 缓存(存储在通常为空的 B 分区)中,而且这种操作不会对面向用户的任何数据空间产生影响。</p>
<h3 id="profile_guided_optimization_pgo">配置文件引导的优化 (PGO)</h3>
<p>此版本支持在具有蓝图编译规则的原生 Android 模块上使用 <a href="/devices/tech/perf/pgo">Clang 的配置文件引导优化</a> (PGO)。</p>
<h3 id="write-ahead_logging">预写日志</h3>
<p><a href="/devices/tech/perf/compatibility-wal">应用的兼容性 WAL(预写日志记录)</a>是 SQLiteDatabase 的一种新的特殊模式,称为兼容性 WAL(预写日志记录),它可让数据库使用 <code>journal_mode=WAL</code>,同时保留每个数据库最多保持一个连接的行为。</p>
<h3 id="boot_times">启动时间</h3>
<p><a href="/devices/tech/perf/boot-times">优化启动时间</a>描述了对启动时优化的更改。</p>
<h2 id="power">电源</h2>
<h3 id="background_restrictions">后台限制</h3>
<p>Android 9 引入了<a href="/devices/tech/power/app_mgmt">后台限制</a>,允许用户限制可能会耗尽设备电池电量的应用。系统还可能建议停用其检测到对设备的运行状况产生负面影响的应用。</p>
<h3 id="batteryless_devices">无电池设备</h3>
<p>Android 9 能够比以前的版本更得体地处理<a href="/devices/tech/power/batteryless">无电池设备</a>。Android 9 移除了以前的一些针对无电池设备的代码,这些代码在默认情况下会假装电池存在、已充满电且运行状况良好(其热敏电阻的温度读数正常)。</p>
</body></html>