Android 10 發行說明

本頁總結了 Android 10 版本的主要功能,並提供了更多信息的鏈接。這些功能摘要是根據此站點上功能的文檔位置組織的。

建造

java_sdk_library

Android 10 引入了java_sdk_library ,這是一個新的構建規則,用於修復共享 Java 庫的兼容性問題。設備製造商可以將這種機制用於他們自己的共享 Java 庫,以保持其 API 的向後兼容性。

建築學

模塊化系統組件

Android 10 對一些 Android 系統組件進行了模塊化,使它們能夠在正常的 Android 發布週期之外進行更新。一些模塊包括:

硬件抽象層 (HAL)

Android 10 添加了對 HAL 在沒有客戶端時自動關閉的支持。

核心

ABI

Android 10 支持新的ABI 監控實用程序,以幫助比較、跟踪和緩解影響與內核模塊兼容性的內核 ABI 更改。

Android 10 還引入了基於符號的ABI 使用檢查器。檢查器可以在構建時檢測過時的預構建二進製文件,以便共享庫開發人員可以知道哪些預構建的二進製文件可能會因更改而損壞,以及哪些預構建的二進製文件必須重新構建。

Android Live-Lock 守護進程

Android 10 包含Android Live-Lock Daemon (llkd) ,旨在捕獲和緩解內核死鎖。

ARM64 上的 vDSO32

Android 10 支持在 64 位內核上使用 vDSO32 ,這可將電池壽命延長 0.4% 並提高其他性能。

早期掛載分區的 fstab 條目

Android 10 要求設備使用第一階段 ramdisk 中的fstab文件為早期掛載的分區指定fstab條目。

HIDL

卸載廣播隊列

Android 10 包含一個新的卸載BroadcastQueue到現有的後台前台隊列。卸載隊列與後台隊列具有相同的優先級和超時行為。為了防止阻塞後台隊列(可能會發生更有趣或用戶可見的廣播),卸載隊列會處理BOOT_COMPLETED廣播,許多應用程序會收聽該廣播,並且可能需要很長時間才能完成。卸載隊列當前僅處理BOOT_COMPLETED廣播,但可能會處理其他長廣播。

系統暫停服務

Android 10 將libsuspend中負責啟動系統掛起的線程替換為SystemSuspend HIDL 服務。此實現提供與以前版本相同的功能,同時利用 Android HIDL 基礎架構的優勢。

HIDL 中的安全聯合

Android 10 在 HIDL 中引入了safe_union ,這是一種顯式標記的聯合類型。

配置

配置存儲 HAL

Android 10 因內存消耗大、使用困難而棄用了ConfigStore HAL ,並將 HAL 替換為系統屬性

配置文件架構 API

Android 平台包含大量用於存儲配置數據的 XML 文件。許多 XML 文件位於vendor分區中,但它們是在system分區中讀取的。在這種情況下,XML 文件的模式用作跨兩個分區的接口,因此必須明確指定模式並且必須以向後兼容的方式發展。在 Android 10 之前,該平台沒有提供機制來要求指定和使用 XML 架構,或者防止架構中的不兼容更改。 Android 10 提供了這種機制,稱為Config File Schema API

作為 API 的系統屬性

跨分區訪問的系統屬性被模式化為sysprop描述文件,訪問屬性的 API 生成為 C++ 的具體函數和 Java 的類。

供應商接口 (VINTF) 對象

VINTF

Android 10 中對 VINTF 的更改包括:

引導加載程序

內存盤

在 Android 10 中,根文件系統不再包含在ramdisk.img中,而是合併到system.img中。

構建 ODM 分區

Android 10 支持使用 Android 構建系統構建odm分區。您可以使用單獨的/odm分區進行自定義,這使您能夠將單個供應商映像用於多個硬件 SKU。這使原始設計製造商 (ODM) 能夠為他們的特定設備(他們的板)定製片上系統 (SoC) 供應商板支持包 (BSP)。他們可以為特定於板子的組件、特定於板子的守護進程或他們自己在硬件抽象層 (HAL) 上的功能實現內核模塊。他們還可以替換或定制 SoC 組件。

引導映像頭版本控制

Android 10 將啟動映像標頭更新為版本 2,其中包含一個用於存儲設備樹 blob (DTB) 映像的部分。 Android 10 VTS 測試驗證所有搭載 Android 10 的設備都使用啟動映像標頭版本 2,並在啟動/恢復映像中包含有效的 DTB 映像。

非 A/B 設備的恢復映像

在 Android 9 及更高版本中,設備的恢復圖像必須包含來自覆蓋圖像的信息。設備製造商可以使用 DeviceTree 或高級配置和電源接口 (ACPI) 來描述所有不可發現的設備。 Android 10 及更高版本支持使用 ACPI 而不是 DeviceTree blob 進行覆蓋 (DTBO) 的架構。

穩定的 AIDL

Android 10 增加了對穩定的Android 接口定義語言 (AIDL)的支持,這是一種跟踪 AIDL 接口提供的應用程序接口 (API)/應用程序二進制接口 (ABI) 的新方法。

將 fastboot 移至用戶空間

Android 10 通過將fastboot 實現從引導加載程序重新定位到用戶空間,增加了對可調整大小分區的支持。

展示

HDR視頻播放

Android 10 支持HDR10、VP9 和 HDR10+ 播放

文本分類

文本分類使用機器學習技術來幫助開發人員對文本進行分類。 Android 10 為 TextClassifier API 引入了兩種方法: suggestConversationActionsdetectLanguagesuggestConversationActions方法從給定的對話中生成建議的回復和操作,而detectLanguage方法檢測文本的語言。

支持 Zawgyi 字體渲染

Zawgyi 是緬甸最受歡迎的字體。 Android 9 及更低版本不支持渲染 Zawgyi,因為它不兼容 Unicode 。 Android 10 通過包含能夠同時呈現 Unicode Burmese 和 Zawgyi 的 Unicode 字體來解決這個問題。在搭載 Android 10 的設備上支持 Zawgyi 字體渲染無需任何實現工作。如果您的設備具有支持 Zawgyi 的自定義實現,您可以:

  • 還原這些更改並使用平台支持的方法。
  • 在您的系統中保留常見的 Zawgyi 字體,並在您的fonts.xml中使用語言環境代碼my-qaag 。有關詳細信息,請參閱Zawgyi (Qaag) 上的 Unicode CLDR 發行說明

隱藏應用程序圖標的限制

Android 10 限制了應用隱藏其啟動器圖標的能力。如果應用沒有啟用啟動器 Activity,系統會在啟動器中顯示合成的 Activity ;此合成活動表示系統設置中的應用程序詳細信息頁面。

有關用於顯示應用圖標的邏輯的更多信息,包括未顯示應用圖標的應用類型,請參閱 API 參考中的getActivityList()文檔。

設置

為了提高可訪問性,Android 10 包含用戶可自定義的超時設置。 API 和設置更改隨 Android 10 一起提供。如果您自定義設置,請確保支持此功能。如果您的設備上有 UI 元素超時,請在這些元素上使用超時 API 。有關詳細信息,請參閱Android 開發人員無障礙指南

兼容性

Android 兼容性定義文檔 (CDD)

Android 10 兼容性定義文檔以前版本的基礎上進行了迭代,更新了新功能並更改了以前發布的功能的要求。

測試

兼容性測試套件 (CTS)

Android CTS 有一個單獨的發行說明頁面,其中列出了 Android 10 的許多重要更改。

CTS 下載

CTS下載頁面上提供了支持 Android 10 的 CTS 包。包含的測試的源代碼可以與開源樹中的android-cts-10_r1標籤同步。

CTS 墊片 APEX

Android 10 引入了一個名為CtsShimApex的包,必須在設備上預安裝該包才能為 APEX 管理編寫 CTS 測試。

測試線束模式

CTS 測試工具模式可幫助開發人員自動測試一個設備或一組設備。

即時應用模式

從 Android 10 開始,CTS 以Instant Apps 模式運行,這意味著將測試 APK 安裝為 Instant App 並運行測試。

除了即時應用的 CTS 模式外,Android 10 還包括即時應用的 CTS 驗證程序

CTS Verifier 專業音頻測試

Android 10 為專業音頻合規性添加了 CTS 驗證程序測試。

CTS 驗證程序 MIDI 測試

在 Android 10 中, CTS 驗證程序 MIDI 測試使用 USB MIDI 接口、藍牙 MIDI 接口和虛擬 MIDI 設備路徑測試 MIDI 功能。

CTS考試解讀

Android 10 更新了解釋 CTS 結果的機制。

供應商測試套件 (VTS)

使用調試 ramdisk 進行 VTS 測試

在 Android 10 中,用於運行 CTS-on-GSI/VTS 合規性測試的通用系統映像 (GSI) 從 userdebug 更改為 user build type,因為 GSI 是發布簽名的。但是,為被測 Android 設備授予主機 root 權限的adb root命令在用戶構建中不可用。這是一個問題,因為 VTS 需要adb root才能運行。

如果設備已解鎖,則引入調試 ramdisk以使adb root成為可能。這通過重用相同的用戶構建system.img (GSI 或 OEM 的system.img )來簡化測試流程。

硬件作曲家驗證

Android 10 通過IComposerClient.hal中的readback接口為 Hardware Composer 驗證添加了一個新的 VTS 測試類。如果供應商不實施readback ,測試會自動通過。

調試

使用不同的類加載器加載共享庫

在 Android 9 及更低版本中,應用會在應用的類加載器中加載其鏈接的 Java 共享庫。在 Android 10 中,框架使用與應用的類加載器不同的類加載器來加載通過uses-libraryuses-static-library鏈接的 Java 共享庫。

一般來說,應用程序不應依賴於使用特定的類加載器,因此此更改不應破壞應用程序的行為。但是,如果應用程序依賴於使用單個類加載器,則該行為會被破壞。此外,仍然支持同一包中的類的包私有可見性,但在共享庫中不支持。

設備製造商在測試運行 Android 10 的設備時可能會遇到應用兼容性問題。

安全功能

有關僅與安全和隱私相關的增強功能的更完整列表,請參閱Android 10 安全和隱私增強頁面。

人臉認證

臉身份驗證允許用戶通過查看設備正面來解鎖設備。 Android 10 增加了對新的人臉身份驗證堆棧的支持,該堆棧可以安全地處理相機幀,在支持的硬件上進行人臉身份驗證期間保護安全性和隱私。 Android 10 還為符合安全要求的實施提供了一種簡單的方法,可以為網上銀行或其他服務等交易啟用應用集成。

擴展訪問

信任代理(Smart Lock 等三級身份驗證機制使用的底層機制)只能在 Android 10 中延長解鎖時間。信任代理無法再解鎖鎖定的設備,並且最多只能使設備保持解鎖狀態四個小時。

加密

OEM加密

Android 10 使用 OEMCrypto API 版本 15。

測試

邊界消毒劑

Android 10 在藍牙和編解碼器中部署了 BoundsSanitizer (BoundSan) 。 BoundSan 使用 UBSan 的邊界消毒劑。此緩解在每個模塊級別啟用。它有助於確保 Android 的關鍵組件安全且不應被禁用。 BoundSan 在以下編解碼器中啟用:

  • libFLAC
  • libavcdec
  • libavcenc
  • libhevcdec
  • libmpeg2
  • libopus
  • libvpx
  • libspeexresampler
  • libvorbisidec
  • libaac
  • libxaac

整數溢出清理

Android 10 在軟件編解碼器中啟用整數溢出清理 (IntSan) 。確保設備硬件不支持的任何編解碼器都可以接受播放性能。 IntSan 在以下編解碼器中啟用:

  • libFLAC
  • libavcdec
  • libavcenc
  • libhevcdec
  • libmpeg2
  • libopus
  • libvpx
  • libspeexresampler
  • libvorbisidec

只執行內存

默認情況下,AArch64 系統二進製文件的可執行代碼部分被標記為只執行(不可讀),作為針對即時代碼重用攻擊的強化緩解措施。將數據和代碼混合在一起的代碼以及有目的地檢查這些部分的代碼(沒有首先將內存段重新映射為可讀)不再起作用。如果應用程序嘗試讀取內存中啟用了僅執行內存 (XOM)的系統庫的代碼段,而沒有先將該段標記為可讀,則目標 SDK 為 Android 10(API 級別 29 或更高)的應用程序會受到影響。

飛毛腿

Scudo是一種動態用戶模式內存分配器,旨在更靈活地抵禦與堆相關的漏洞。它提供標準的 C 分配和釋放原語,以及 C++ 原語。

ShadowCallStack

ShadowCallStack (SCS)是一種LLVM 檢測模式,通過將函數的返回地址保存到非葉函數的函數序言中單獨分配的ShadowCallStack實例並從ShadowCallStack實例加載返回地址來防止返回地址覆蓋(如堆棧緩衝區溢出)功能結語。

聲音的

音頻 HAL

Android 10 包括以下針對音頻 HAL的新功能。

  • AudioSource
  • AudioFormat
  • AudioChannelMask

為音頻 HAL 和子系統實施添加了其他要求。

預處理效果

Android 提供了預處理效果,例如聲學迴聲消除、自動增益控制和噪聲抑制。 Android 10 包含使用VOICE_COMMUNICATION進行捕獲的新要求。

音頻策略管理器

Android 10 對音頻策略管理器進行了重大重構,以提供更大的靈活性來支持複雜的汽車用例。

高分辨率音頻

Android 10 包括以下針對高分辨率音頻的改進。

  • 浮動支持
  • 192 KHz頻率支持
  • 八通道支持
  • 包含時間信息

並發捕獲

Android 10 改進了需要同時進行多個活動音頻捕獲的並發捕獲用戶體驗。

音頻回放捕獲

Android 10 包含一個名為AudioPlaybackCapture的新 API,它使應用能夠複製其他應用正在播放的音頻。此功能類似於屏幕捕獲,但用於音頻。主要用例是使流媒體應用程序能夠捕獲遊戲正在播放的音頻。

捕獲 API 不會影響正在捕獲其音頻的應用程序的延遲。

MIDI

Android 10 使使用 MIDI 的專業音頻應用程序更容易移植到使用AMidi NDK API的 Android 平台。

相機

有關 Android 10 中引入的相機 API、相機 HAL 和相機模塊的更改摘要,請參閱Android 10 相機更新

相機框架隱私改進

Android 10 為相機框架引入了隱私增強功能。為避免在未經用戶同意的情況下在CameraCharacteristics中暴露可能敏感的靜態相機信息,應用程序必須獲得CAMERA權限才能使用getCameraCharacteristics方法檢索帶有隱私敏感標籤的靜態元數據。

要獲取需要CAMERA權限的相機特徵鍵列表,請調用getKeysNeedingPermission方法。

會話重配置查詢

Android 10 添加了會話重新配置查詢功能,該功能可以通過對內部會話參數重新配置邏輯的更多控制來提高性能。

相機 HAL3 緩衝區管理 API

Android 10 引入了可選的相機 HAL3 緩衝區管理 API ,允許您實現緩衝區管理邏輯,以在相機 HAL 實現中實現不同的內存和捕獲延遲權衡。

Camera HAL 動態物理相機開關

Android 10 引入了一個動態元數據標籤ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID ,它指示邏輯相機設備的活動底層物理相機。有關詳細信息,請參閱多相機支持

支持隱藏物理相機

在 Android 10 中,攝像頭 HAL 可以減少應用可以直接打開的物理攝像頭數量。有關更多詳細信息,請參閱多相機支持

Camera2 VNDK API

在 Android 10 中,供應商模塊可以通過兩個新的標準 HIDL 接口android.frameworks.cameraservice.service@2.0android.frameworks.cameraservice.device@2.0訪問和控制攝像頭設備。為了更方便地使用 HIDL 接口,Android 10 還引入了供應商可用的庫libcamera2_vendor 。這個庫類似於Camera NDK 庫,只是做了一些小的修改。

流配置

Android 10 添加了一些功能,允許相機供應商向相機客戶端宣傳推薦的相機流,並支持API 來查詢流組合

相機碼流組合要求

運行 Android 10 的設備不再需要支持與物理子攝像頭流的流組合。但是,運行 Android 10 和攝像頭 HAL 設備版本 3.5 的設備必須支持isStreamCombinationSupported()以允許應用查詢是否支持包含物理流的流組合。

有關詳細信息,請參閱多相機支持

HEIF 成像

Android 10 為高效圖像文件格式 (HEIF) 圖像提供本機相機支持,與 JPEG 圖像相比,它提供了更高的圖像質量和更小的尺寸。設備必須具有 HEIC 或 HEVC 編碼器才能支持 HEIF 圖像。

單色相機

Android 10 為 Y8 流格式、單色和近紅外 (NIR) 濾色器陣列靜態元數據以及單色相機DngCreator函數提供了額外支持。

連接性

通話和短信

緊急號碼和緊急呼叫

Android 10 改進了對緊急呼叫的支持。在緊急情況下,支持 IRadio HAL v1.4 的設備可以使用從 SIM 卡、網絡信號或 Android 數據庫等來源檢索到的緊急號碼發起緊急呼叫。號碼可以根據緊急服務類別進行分類,例如警察、消防和救護車。

群呼 API

群組通話 API 是 Android 9 中添加的 eMBMS API 的擴展。新的 API 定義了應用程序通過與 eMBMS 中間件包交互來加入和廣播小區廣播群組通話的標準。群呼需要芯片組供應商、中間件供應商和蜂窩運營商的支持才能正常運行。開發者文檔位於developer.google.com

遠程 SIM 功能

Android 10 引入了遠程 SIM 功能,允許 Android 主機設備上的消息應用程序使用藍牙等機制通過手機發送 SMS 消息。有關詳細信息,請參閱getSubscriptionType方法和SUBSCRIPTION_TYPE_REMOTE_SIM常量的參考文檔。

多個 eSIM

在 Android 10 中, EuiccManager類支持具有多個嵌入式 SIM (eSIM)或 eUICC 的設備。

eSIM 更新

對於運行支持 eSIM 的 Android 10 的設備,必須定義不可移動的 eUICC 插槽 ID 數組。設備還必須支持 IRadio HAL v1.4 和 IRadioConfig HAL v1.2。有關詳細信息,請參閱實施 eSIM調製解調器要求

5G 非獨立 (NSA)

Android 10 增加了對5G 非獨立 (NSA) 的支持。 5G NSA 是一種針對 5G 網絡的解決方案,其中網絡由現有的 4G 基礎設施提供支持。在 Android 10 上,當設備連接到 5G 網絡時,設備可以在狀態欄上顯示 5G 圖標。

電話帳戶建議

Android 10 引入了手機賬號建議服務,該服務允許在撥打電話時向用戶顯示手機賬號建議。

載體

遷移移動網絡設置

Android 10 重新架構了移動網絡設置 UI 代碼,並將其從電話堆棧移至設置堆棧。要支持遷移的代碼,請將以下移動網絡設置配置值從 Android 資源更改為CarrierConfig資源:

config_world_mode -> CarrierConfigManager#KEY_WORLD_MODE_ENABLED_BOOL

config_support_tdscdma -> CarrierConfigManager#KEY_SUPPORT_TDSCDMA_BOOL

config_support_tdscdma_roaming_on_networks -> CarrierConfigManager#KEY_SUPPORT_TDSCDMA_ROAMING_NETWORKS_STRING_ARRAY

config_enabled_lte -> CarrierConfigManager#KEY_LTE_ENABLED_BOOL

設備標識符

永久設備標識符(IMEI/MEID、IMSI 和構建序列號)由特權權限保護,該權限還授予設備和配置文件所有者應用程序的訪問權限。由於 IMSI 和 SIM 序列號是由運營商提供的,因此具有運營商權限的包裹可以訪問這些標識符。

無線上網

網絡選擇

Android 不斷評估連接網絡的質量並評估可用網絡的質量。 Android 10 更新了用於選擇和切換 Wi-Fi 網絡的算法和程序。

Wi-Fi 首選網絡卸載掃描

Android 10 在WifiManager中引入了一個名為setDeviceMobilityState()的可選 API 方法,該方法可在設備靜止時增加首選網絡卸載 (PNO)掃描之間的間隔以降低功耗。

運營商 Wi-Fi

在 Android 10 中,具有運營商 Wi-Fi 功能的設備會自動連接到配置的運營商 Wi-Fi 網絡(具有公鑰證書的網絡)。

Wi-Fi 輕鬆連接

在 Android 10 中,設備可以使用Wi-Fi Easy Connect ,它使用 Wi-Fi 聯盟 (WFA) 引入的設備配置協議 (DPP) 來配置和配置 Wi-Fi 設備。

Wi-Fi 低延遲模式

Android 10 引入了Wi-Fi 低延遲模式,可配置 Wi-Fi 芯片以減少延遲。

更新的 DHCP 服務器

作為“IP 服務器”服務繖形成的一部分,正在刪除dnsmasq 。 Android 10 將其 DHCPv4 服務器功能使用替換為一個單獨的組件,該組件主要用 Java 編寫,以更好地與 Java 框架控制平面集成。這提高了 DHCP 服務器的安全性和可更新性。有關更多詳細信息,請參閱packages/modules/NetworkStack/src/android/net/dhcp/DhcpServer.java

無需執行任何操作即可實施此更改:所有發布和升級到 Android 10 的設備默認使用DhcpServer 。如果您對 DHCP 服務器進行了自定義,則可以通過設置全局設置tether_enable_legacy_dhcp_server=1恢復為 Android 9 行為。新的DhcpServer包含在網絡組件模塊中,因此任何對 DHCP 服務器功能的自定義都應該在上游進行。

WPA3 和 Wi-Fi 增強開放

Android 10 增加了對Wi-Fi Protected Access 3 (WPA3) 和 Wi-Fi Enhanced Open安全標準的支持,以提供更好的隱私性和對已知攻擊的穩健性。

無線直連

Wi-Fi Direct ,也稱為 Wi-Fi P2P,允許支持設備使用 Wi-Fi Direct 協議直接發現並連接到彼此,而無需訪問 Internet 或蜂窩網絡。

MAC 隨機化增強

從 Android 10 開始,默認為客戶端模式、SoftAp 和 Wi-Fi Direct 啟用MAC 隨機化。設備必須為系統 UI 中的每個 SSID 提供啟用或禁用 MAC 隨機化的選項。

通行證 R2

Android 10 引入了對Passpoint R2 功能的支持。 Passpoint R2 實施在線註冊 (OSU),這是一種配置新 Passpoint 配置文件的標準方法。 Android 10 支持使用 SOAP-XML 配置 EAP-TTLS 配置文件。

NFC

安全 NFC

安全 NFC允許僅在設備屏幕解鎖時啟用脫離主機 NFC 卡仿真。實施此功能使用戶可以選擇啟用安全 NFC 以提高安全性。

Android Beam 已棄用

在 Android 10 中,不再需要 Android Beam,以下接口和方法已被棄用。

接口:

方法:

要使用 Android Beam,請報告android.sofware.nfc.beam功能常量。

圖形

A表面控制

Android 10 添加了ASurfaceControl ,這是SurfaceFlinger接受緩衝區的一種新方式。

圖形實現

OpenGL ES 層

Android 10 為 GLES 引入了分層系統

EGL 1.5

Android 10 實現了EGL 1.5 接口。有關 EGL 1.5 中新功能的信息,請查看Khronos 發布 EGL 1.5 規範

伏爾甘

Android 10 包括對 Vulkan 1.1 圖形的支持。該平台還支持VK_KHR_swapchain v70,因此 Vulkan 應用程序能夠創建由交換鏈內存支持的VkImage

性能刷新率

Android 10 增加了對性能刷新率的支持。此功能默認關閉。

相互作用

汽車

汽車音響

在 Android 10 中,Audio HAL 上下文映射到AudioAttributes.usage以識別聲音。 Android 支持每個上下文一個AUDIO_DEVICE_OUT_BUS實例。 IAudioControl HAL 為音頻 HAL 提供特定於車輛的擴展

手勢導航

Android 10 引入了一個完全手勢系統導航的選項。有關如何準備應用以使用此功能的信息,請參閱 Android 開發者網站上的手勢導航頁面。

神經網絡

Android 10 引入了對神經網絡 API 和神經網絡 HAL 的更新。有關更改的摘要,請參閱神經網絡

適用於 Android 10 的新的和更新的神經網絡文檔:

傳感器

傳感器 HAL 2.0

Sensors HAL 2.0支持使用快速消息隊列 (FMQ)將傳感器事件從 HAL 發送到 Android Sensors Framework。

傳感器關閉

Android 10 包含一個開發者設置,用於關閉設備上的所有傳感器。此功能可幫助開發人員在這些傳感器不可用的情況下測試其應用程序的功能,並為用戶提供一種控制其設備中傳感器的方法。

如果您的設備使用SensorServiceCameraServiceAudioPolicyService的默認實現,則無需對參考設計進行額外定制。如果您有其他傳感器,請參閱自定義以了解有關支持此功能的更多詳細信息。

媒體

可更新的媒體組件

Android 10 提供了可更新的媒體組件,可以通過 Google Play 商店基礎架構或合作夥伴提供的無線 (OTA) 機制更新與媒體相關的模塊化系統組件

媒體數字版權管理

Android 10 改進了MediaDrm Java 和 NDK API 的實用性和可用性。

解碼

Android 10 支持 AV1 SW 解碼。

權限

Android 10 為透明度和用戶隱私提供了額外的權限配置。

聯繫人提供者和關聯信息

從 Android 10 開始,由Contacts Provider 組件管理的聯繫人相關性相關數據的訪問方式與 Android 9 及更低版本不同。這些關於數據可訪問性的更改改善了所有使用 Contacts Provider 組件的 Android 10 設備的用戶隱私。基礎數據庫不再包含聯繫人關聯數據。因此應用程序無法寫入或讀取它。

預計 Android 10 中的更改將對 API 產生重大影響。如果您的應用程序依賴於聯繫人提供程序和關聯信息中提到的已棄用功能,您可能需要更新您的應用程序以補償任何更改。此外,如果您使用聯繫人提供程序的分叉版本,則必須更新您的聯繫人提供程序。

三態位置權限

Android 10 中的三態位置權限讓用戶可以更好地控制應用訪問其設備位置的方式。

後台位置訪問提醒

Android 10 具有後台訪問位置提醒功能,可提高應用對設備位置訪問權限的透明度,並幫助用戶保持對此類訪問的控制。

限制機會主義位置

當應用程序請求設備的位置時,應用程序可以等待請求響應,或者通過使用活動位置偵聽器獲取機會性位置更新。從 Android 10 開始,要獲得機會性位置更新,開發人員必須指定他們需要來自FusedLocationProviderClient類的被動位置更新。

後台應用啟動

在 Android 10 中,沒有可見窗口的非特權應用無法自動啟動到前台。此更改抑制了廣告彈出和惡意接管。無需任何操作即可啟用此功能。

應用沙盒

在 Android 10 中,應用對文件系統的原始視圖有限,無法直接訪問/sdcard/DCIM等路徑。但是,應用程序保留對其包特定路徑的完全原始訪問權限,如Context.getExternalFilesDir()等任何適用方法返回的那樣。應用程序仍然可以完全訪問其特定於包的路徑。

使用應用程序沙盒指南來共享文件,以提供適當的數據共享粒度。

限制應用剪貼板訪問

在 Android 10 中,剪貼板訪問權限已更改,因此無法通過調用ClipboardManager.getPrimaryClip或添加onPrimaryClipChanged偵聽器以在剪貼板更改時進行通知來查看剪貼板內容。這增加了用戶隱私並禁止惡意應用程序修改剪貼板。

在 Android 10 中,僅允許對具有輸入焦點的當前應用或當前鍵盤進行讀取訪問。 ClipboardManager.onPrimaryClipChanged()偵聽器調用現在僅對滿足此類限制的應用程序觸發。如果請求應用程序不是默認輸入法編輯器 (IME) 或沒有輸入焦點,則ClipboardManager.getPrimaryClipClipboardManager.getPrimaryClipDescription將返回null

運行時權限包括活動識別

當應用程序在後台訪問設備位置時,用戶現在會看到一個活動識別對話框。嚴格限制的運行時權限必須在 Android 10 中正確列入白名單。

MANAGE_DEVICE_ADMINS 權限

Android 10 將MANAGE_DEVICE_ADMINS權限從簽名或特權更改為僅簽名。這意味著只有平台簽名的應用程序才能將其他應用程序設置為設備管理員。

分享 API 改進

Android 10 提供了許多與共享相關的新 Android 平台 API 功能。如果您在實現中修改了共享表代碼,請確保您的實現支持這些新功能。如果您沒有在實現中修改 Share Sheet 代碼,則無需執行任何操作來支持這些新功能。

Android 運行時 (ART)

簽名配置

簽名配置功能允許在 APK 中嵌入非 SDK 接口限制的配置。這可以從黑名單中刪除特定的非 SDK 接口,以便 AndroidX 可以安全地使用它們。通過此更改,AndroidX 可以在舊版 Android 上添加對新功能的支持。

表現

Cgroup 抽象層

Android 10 includes a cgroup abstraction layer and task profiles, which developers can use to describe a set of restrictions to apply to a thread or a process.

Low Memory Killer Daemon (lmkd)

Android 10 supports a new lmkd mode that uses kernel pressure stall information (PSI) monitors for memory pressure detection.

Power

Platform power management

In Android 10, Doze mode can be enabled on always-on devices as well as on battery-powered devices.

Routine battery saver

Android 10 introduces a new battery saver schedule option called based on routine . Routine battery saver allows an app chosen by the OEM to provide signals to the system for more intelligent battery saver scheduling. This option requires configuration, and is optional to implement.

Power stats HAL

In Android 10, IPowerStats.hal replaces the power stats collection APIs in IPower.hal . While the power HAL still supports the APIs, they'll be migrated exclusively to the power stats HAL in the future.

The power stats HAL includes new APIs to support the collection of data from on-device power measurement, for supported devices. The existing power stats collection APIs are also updated to improve flexibility. The power hinting APIs remain in power HAL and aren't changing.

Thermal mitigation

The thermal framework in Android 10 abstracts device interfaces for the thermal subsystem temperature sensor, including CPU, GPU, battery, skin, and cooling device. The framework introduces a polling interface to query thermal status to initiate throttling, and a callback interface to send a message to the user when a threshold is exceeded.

Android 10 provides the new data types through the IThermalService interface using these three new methods:

Apps add and remove listeners and access temperature status in the PowerManager class. Only a trusted system service such as an Android API or device manufacturer API can access information about associated causal events. Device manufacturers or SoC makers must implement thermal HAL 2.0 to enable the full functionality of the new thermal framework.

For a thermal mitigation implementation example, see the Reference implementation .

Updates

APEX file format

Android Pony EXpress (APEX) is a new container format used in the install flow for modular system components.

Dynamic partitions

Dynamic partitions introduce a userspace partitioning system to Android, allowing partitions to be created, resized, or destroyed during OTA updates. Device makers don't have to worry about the individual sizes of partitions, such as system , vendor , and product . Instead, one big super partition is allocated, and subpartitions can be sized dynamically within it.

Dynamic system updates

Dynamic system updates (DSU) allows you to make an Android system image that users can download from the internet and try out without the risk of corrupting the current system image.

Multiuser backup and restore

Android 10 supports backup and restore functionality for all users on a device. Previously, backup and restore was only available for the system user. Backup and restore for nonsystem users is turned off by default as it has only partial coverage for settings, wallpaper, and system components.

Overlayfs

Users working with userdebug or eng builds expect to be able to efficiently remount the system partition as read-write and then add or modify any number of files without reflashing the system image. You can use Overlayfs , which automatically sets up backing storage for a writable file system as an upper reference, and mounts over the lower. These actions happen in the adb disable-verity and adb remount requests. For more details, see the Overlayfs README in AOSP.

Shared library support in recovery mode

In Android 10, shared libraries are available in the recovery partition, which eliminates the need for all recovery mode executables to be static. The shared libraries are located under the /system/lib (or /system/lib64 for 64-bit devices) directory in the partition.

To add a new shared library to the recovery partition, add recovery_available: true or recovery: true to Android.bp of the shared library. The former installs the library to both the system and recovery partitions, while the latter installs it only to the recovery partition.

Shared library support can't be built with Android's make-based build system. To convert an existing static executable for the recovery mode to a dynamic one, remove LOCAL_FORCE_STATIC_EXECUTABLE := true in Android.mk or static_executable: true (in Android.bp ).

User Data Checkpoint (UDC)

Android 10 introduces the User Data Checkpoint (UDC) feature , which allows Android to roll back to its previous state when an Android over-the-air (OTA) update fails.