開發人員專用的 Android 7.0

Android 7.0 Nougat 為使用者和開發人員推出了多項新功能。本文件將介紹開發人員新增的新功能。

請務必查看 Android 7.0 行為變更,瞭解平台變更可能會對應用程式造成影響的哪些方面。

如要進一步瞭解 Android 7.0 的消費者功能,請前往 www.android.com

多視窗模式支援

在 Android 7.0 中,我們將在平台中推出眾所期盼的全新多工處理功能,也就是支援多視窗模式。

使用者現在可以在畫面上彈出兩個應用程式,

  • 在搭載 Android 7.0 的手機和平板電腦上,使用者可以在分割畫面模式下,並排執行兩個應用程式。使用者可以拖曳應用程式之間的分隔線,藉此調整應用程式大小。
  • 在 Android TV 裝置上,應用程式可以將其設為子母畫面模式,以便在使用者瀏覽其他應用程式或與其他應用程式互動時繼續顯示內容。
在分割畫面模式下執行行動應用程式

圖 1 在分割畫面模式中執行的應用程式。

特別是在平板電腦和其他大螢幕裝置上,多視窗模式支援讓您以全新方式吸引使用者。此外,您還可在應用程式中啟用拖曳功能,讓使用者輕鬆拖曳內容,或將其拖曳至您的應用程式中,這是提升使用者體驗的絕佳方法。

您可以輕鬆為應用程式新增多視窗模式支援,並設定其處理多視窗顯示的方式。例如,您可以指定活動的最小允許尺寸,避免使用者調整小於該大小的活動大小。您也可以停用應用程式的多視窗顯示功能,確保系統僅以全螢幕模式顯示應用程式。

詳情請參閱「多視窗模式支援」開發人員說明文件。

通知強化

在 Android 7.0 中,我們重新設計了通知,讓通知使用起來更加輕鬆快速。這些變更包括:

  • 範本更新:我們正在更新通知範本,著重在主頁橫幅和顯示圖片。開發人員只要對程式碼稍加調整,就能使用新範本。
  • 訊息樣式自訂:您可以使用 MessagingStyle 類別自訂更多與通知相關的使用者介面標籤。您可以設定訊息、對話標題和內容檢視畫面。
  • 組合通知:系統可以依訊息主題將訊息分組,並顯示群組。使用者可以對這些項目執行動作,例如「關閉」或「封存」。如果您已實作 Android Wear 通知,就應該已經熟悉這個模式。
  • 直接回覆:如果是即時通訊應用程式,Android 系統支援內嵌回覆,方便使用者直接在通知介面中回應簡訊或簡訊。
  • 自訂檢視畫面:透過兩個新 API,您可以在通知中使用自訂檢視畫面時,利用系統裝飾,例如通知標頭和動作。
行動裝置顯示搭售訊息通知
行動裝置顯示單一訊息通知
行動裝置在通知介面中顯示內嵌訊息回覆

圖 2. 整合通知與直接回覆。

如要瞭解如何實作新功能,請參閱通知指南。

設定檔指引 JIT/AOT 編譯

在 Android 7.0 中,我們在 ART 中新增了提供程式碼剖析功能的 Just in Time (JIT) 編譯器,持續改善 Android 應用程式執行時的效能。JIT 編譯器與 ART 目前的預先 (AOT) 編譯器相輔相成,可協助改善執行階段效能、節省儲存空間,以及加快應用程式更新和系統更新的速度。

透過設定檔引導編譯,ART 會根據實際使用情形以及裝置上的條件,管理每個應用程式的 AOT/JIT 編譯作業。舉例來說,ART 會維護各個應用程式熱方法的設定檔,並預先編譯及快取這些方法,以達到最佳效能。這樣應用程式的其他部分就不會實際使用,直到實際使用為止。

除了改善應用程式主要部分的效能外,設定檔引導編譯也有助於降低應用程式的整體 RAM 用量,包括相關二進位檔。這項功能在低記憶體裝置上尤其重要。

ART 會管理設定檔引導編譯作業,盡可能降低對裝置電池的影響。系統只會在裝置處於閒置和充電狀態時預先編譯,可預先完成工作以節省時間和電池。

應用程式安裝快速路徑

ART 的 JIT 編譯器最顯著優點之一,就是應用程式安裝和系統更新的速度。即使是需要幾分鐘才能最佳化及安裝 Android 6.0 的大型應用程式,現在也能在幾秒內完成安裝。系統更新速度也更快,因為沒有最佳化步驟。

隨時隨地打盹...

Android 6.0 推出了「打盹」功能,這是一種系統模式,可在裝置閒置時延遲應用程式的 CPU 和網路活動,例如當裝置位於表格或導覽匣中時,藉此節省電力。

現在,Android 7.0 的「打盹」功能可進一步節省電力,隨時隨地節省電力。 只要螢幕關閉一段時間,且裝置未接上電源,打盹功能就會對應用程式套用部分熟悉的 CPU 和網路限制。這表示即使隨身攜帶裝置,也可以節省電力。

插圖:打盹功能套用第一階系統活動限制以延長電池續航力

圖 3. 「打盹」功能現在會套用限制來延長電池續航力,即使裝置未處於靜止狀態也沒問題。

裝置開啟電池時,螢幕會關閉一小段時間,打盹功能會限制網路存取權並延後工作和同步處理作業。在短暫的維護期間,應用程式可以存取網路,並執行任何延遲的工作/同步處理。開啟裝置或插上裝置後,裝置就會退出「打盹」模式。

裝置再次靜止時,關閉螢幕並持續處於電池模式一段時間,「打盹」功能會對 PowerManager.WakeLockAlarmManager 鬧鐘和 GPS/Wi-Fi 掃描套用完整的 CPU 和網路限制。

無論裝置是否在移動,調整應用程式為打盹模式的最佳做法都相同,因此如果您已更新應用程式,以便妥善處理打盹功能,就不必再進行上述操作。如果沒有,請立即開始將應用程式調整為打盹模式

Svelte 專案:背景最佳化

Project Svelte 持續致力於降低生態系統中各種 Android 裝置的 RAM 用量。在 Android 7.0 中,Project Svelte 著重於最佳化應用程式在背景執行的方式。

背景處理是大多數應用程式不可或缺的一環。如果處理得宜,就能讓使用者享有立即、快速且具情境感知的使用者體驗。如果處理不當,背景處理功能可能會消耗不必要的 RAM (和電池),並且會影響其他應用程式的系統效能。

自 Android 5.0 起,JobScheduler 一直是推薦背景工作方式,以適合使用者的方式執行。應用程式可在排定工作時間,讓系統根據記憶體、電力和連線條件進行最佳化。JobScheduler 提供簡易的控管功能,並希望所有應用程式都能使用。

另一個好選擇是 Google Play 服務的 GCMNetworkManager,它提供類似的工作排程,與舊版 Android 的相容性類似。

我們會持續擴充 JobSchedulerGCMNetworkManager 以滿足更多用途。舉例來說,在 Android 7.0 中,您現在可以根據內容供應器的變更內容安排背景工作。同時,我們將開始淘汰某些可能會降低系統效能的舊模式,尤其是在低記憶體裝置上。

在 Android 7.0 中,我們移除了三個常用的隱含廣播 (CONNECTIVITY_ACTIONACTION_NEW_PICTUREACTION_NEW_VIDEO),因為這些廣播可能會一次喚醒多個應用程式的背景程序,並會限制記憶體和電池用量。如果您的應用程式收到這些 API,請改用 Android 7.0,並遷移至 JobScheduler 和相關 API。

詳情請參閱「背景最佳化」說明文件。

SurfaceView

Android 7.0 為 SurfaceView 類別導入同步動作,在特定情況下可提供比 TextureView 更好的電池效能:在轉譯影片或 3D 內容時,有捲動和動畫影片位置的應用程式在使用 SurfaceView 時耗用較少 SurfaceView 而非 TextureView

SurfaceView 類別會單獨整合至專屬硬體,與應用程式視窗內容分開,因此能更有效地在螢幕上進行合成。因此,與 TextureView 相比,中繼副本較少。

SurfaceView 物件的內容位置現在會與包含的應用程式內容同步更新。這項異動生效後,在 SurfaceView 中播放影片的簡易轉譯或縮放比例,不會再於檢視畫面移動時產生黑邊。

從 Android 7.0 開始,強烈建議您使用 SurfaceView 而非 TextureView 來節省電力。

數據節省模式

「設定」中的數據節省模式

圖 4. 你可以前往「設定」頁面查看數據節省模式。

使用行動裝置的期間,行動數據方案費用通常超出裝置本身的費用。對許多使用者來說,行動數據是一項昂貴的資源,就是他們想節省的成本。

Android 7.0 推出了數據節省模式,這項新的系統服務能減少應用程式使用的行動數據流量,包括漫遊、帳單週期的尾聲或小型預付數據方案。數據節省模式可讓使用者控管應用程式使用行動數據的方式,並讓開發人員在資料儲存器開啟時,提供更高效的服務。

使用者在「設定」中啟用數據節省模式,且裝置使用計量付費網路時,系統會封鎖背景數據用量,並通知應用程式盡可能減少前景數據用量,例如限制串流的位元率、降低圖片品質、延遲樂觀的預先快取等。即使啟用了數據節省模式,使用者還是可以允許特定應用程式允許特定應用程式使用背景計量付費數據用量。

Android 7.0 會擴充 ConnectivityManager,讓應用程式能夠擷取使用者的數據節省模式偏好設定,以及監控偏好設定變更。所有應用程式都應檢查使用者是否已啟用數據儲存工具,並盡量限制前景和背景的數據用量。

Vulkan API

Android 7.0 將全新的 3D 算繪 API VulkanTM 整合至平台。和 OpenGLTM ES 一樣,Vulkan 是 Khronos Group 維護的 3D 圖像和算繪開放標準。

Vulkan 的設計從零開始,將驅動程式的 CPU 負擔降至最低,讓應用程式能更直接地控制 GPU 作業。Vulkan 也能讓多個執行緒一次執行指令緩衝區建構等工作,藉此改善平行處理能力。

Vulkan 開發工具和程式庫已推出至 Android 7.0 SDK。包括:

  • 標頭
  • 驗證層 (偵錯程式庫)
  • SPIR-V 著色器編譯器
  • SPIR-V 執行階段著色器編譯程式庫

只有搭載支援 Vulkan 硬體的裝置 (例如 Nexus 5X、Nexus 6P 和 Nexus Player) 上的應用程式才能使用 Vulkan。我們正與合作夥伴密切合作,盡快將 Vulkan 導入更多裝置。

詳情請參閱 API 說明文件

快速設定方塊 API

通知欄中的快速設定方塊

圖 5. 通知欄中的快速設定圖塊。

「快速設定」是相當熱門且能直接從通知欄顯示主要設定和動作的常用方法。在 Android 7.0 中,我們擴展了「快速設定」的適用範圍,讓這個功能更加實用且方便。

我們已新增更多快速設定資訊方塊,使用者只要向左或向右滑動,即可在分頁的顯示區域中存取。我們也允許使用者控制「快速設定」圖塊的顯示方式和顯示位置,使用者只要拖曳圖塊即可新增或移動圖塊。

Android 7.0 也為開發人員加入新的 API,可讓您定義自己的「快速設定」資訊方塊,讓使用者輕鬆存取應用程式中的主要控制項和動作。

「快速設定」圖塊僅供緊急需要或經常使用的控制項或動作使用,不應做為啟動應用程式的捷徑。

定義圖塊後,即可向使用者顯示這些圖塊。使用者只要拖曳圖塊,就能新增至快速設定。

如要瞭解如何建立應用程式資訊方塊,請參閱 Tile 的參考說明文件。

號碼封鎖

Android 7.0 現在支援平台中的號碼封鎖功能,並提供架構 API,可讓服務供應商維護封鎖編號清單。預設訊息應用程式、預設手機應用程式和電信業者應用程式可以讀取及寫入已封鎖號碼清單。其他應用程式無法存取這份清單。

藉由讓數字封鎖平台的標準功能,Android 為應用程式提供一致的方法,支援在各種裝置上封鎖數字。應用程式還有許多優點,包括:

  • 系統也會一併封鎖通話中的號碼。
  • 已封鎖的號碼可透過「備份與還原」功能在重設及裝置時保留
  • 多個應用程式可以使用相同的封鎖號碼清單

此外,透過 Android 整合電信業者應用程式,表示電信業者可以讀取裝置上的封鎖號碼清單,並對使用者執行服務端封鎖,藉此阻止擾人的來電和簡訊,透過任何媒介 (例如 IP 端點或轉接電話) 觸及使用者。

詳情請參閱 BlockedNumberContract 的參考說明文件。

來電過濾

Android 7.0 允許預設的電話應用程式過濾來電。手機應用程式會實作新的 CallScreeningService,讓手機應用程式根據來電的 Call.Details 執行多項動作,例如:

  • 拒接來電
  • 不允許呼叫通話記錄
  • 不要向使用者顯示呼叫通知

詳情請參閱 CallScreeningService 的參考說明文件。

支援多語言代碼、更多語言

Android 7.0 現在可讓使用者在「設定」中選取多個語言代碼,更有效地支援雙語用途。應用程式可以使用新的 API 取得使用者選擇的地區,然後為多語言代碼的使用者提供更複雜的使用者體驗,例如以多種語言顯示搜尋結果,以及不要以使用者熟悉的語言翻譯網頁。

除了支援多語言代碼,Android 7.0 也擴大使用者可用的語言範圍。這項功能針對常用語言 (例如英文、西班牙文、法文和阿拉伯文) 提供超過 25 個變化版本。同時也新增超過 100 種新語言的部分支援。

應用程式可呼叫 LocaleList.GetDefault(),取得使用者設定的語言代碼清單。為了支援擴大的語言代碼數量,Android 7.0 正在變更解析資源的方式。請務必使用新的資源解析邏輯進行測試,並確認應用程式如預期運作。

如要瞭解新的資源解析行為和您應遵循的最佳做法,請參閱「多語言支援」。

全新表情符號

Android 7.0 推出了其他表情符號和表情符號相關功能,包括膚色表情符號,並支援變化版本選取器。如果您的應用程式支援表情符號,請遵循下列規範,善用這些表情符號相關功能。

  • 請先確認裝置內含表情符號,再插入表情符號。 如要查看系統字型中有哪些表情符號,請使用 hasGlyph(String) 方法。
  • 確認表情符號支援變化版本選取器。變化版本選取器可讓您以顏色或黑白顯示特定表情符號。在行動裝置上,應用程式應呈現彩色的表情符號,而非黑白。不過,如果您的應用程式顯示內嵌在文字中的表情符號,則應使用黑白變化版本。如要判斷表情符號是否有變化版本,請使用變化版本選取器。如需完整的字元清單,請參閱「 萬國碼 (Unicode) 變化版本說明文件」中的「表情符號變化序列」一節。
  • 檢查表情符號是否支援膚色。Android 7.0 可讓使用者依據自己的偏好修改表情符號轉譯的膚色。鍵盤應用程式應為採用多種膚色的表情符號提供視覺指標,並讓使用者選擇自己偏好的膚色。如要判斷哪些系統表情符號具有膚色修飾詞,請使用 hasGlyph(String) 方法。如要判斷哪些表情符號使用膚色,請參閱 Unicode 說明文件

Android 中的 ICU4J API

Android 7.0 現在在 Android 架構中,提供 android.icu 套件下的部分 ICU4J API。遷移作業相當簡單,通常只需要從 com.java.icu 命名空間變更為 android.icu。如果您已在應用程式中使用 ICU4J 套件,改用 Android 架構中提供的 android.icu API 可以大幅縮減 APK 大小。

如要進一步瞭解 Android ICU4J API,請參閱 ICU4J 支援

WebView

Chrome + WebView 功能

從 Android 7.0 以上版本的 Chrome 51 以上版本開始,裝置上的 Chrome APK 會用來提供及呈現 Android System WebView。這個方法可改善裝置本身的記憶體用量,並減少讓 WebView 保持在最新狀態所需的頻寬 (因為只要 Chrome 保持啟用,獨立的 WebView APK 就不會再更新)。

啟用開發人員選項並選取「WebView 實作」,即可選擇 WebView 供應商。您可以使用裝置上安裝的任何相容 Chrome 版本 (開發人員版、Beta 版或穩定版),或獨立的 WebView APK 做為 WebView 實作。

多重處理程序

從 Android 7.0 的 Chrome 51 版開始,啟用「Multiprocess WebView」開發人員選項時,WebView 會以獨立的沙箱程序執行網路內容。

我們希望在日後的 Android 版本中啟用多程序 WebView 前,針對 N 的相容性和執行階段效能提供意見。在這個版本中,啟動時間的迴歸、記憶體總用量和軟體轉譯效能是正常現象。

如果在多程序模式下發現未預期的問題,請告訴我們。請使用 Chromium 錯誤追蹤工具與 WebView 團隊聯絡。

在載入網頁前執行 JavaScript

從指定 Android 7.0 為目標版本的應用程式開始,系統會在載入新頁面時重設 JavaScript 結構定義。目前,系統會沿用新 WebView 執行個體中載入的第一個頁面。

開發人員想要將 JavaScript 插入 WebView 中,應在網頁開始載入後執行指令碼。

不安全來源的地理位置

自指定 Android 7.0 為目標版本的應用程式起,地理位置 API 只能在安全來源 (透過 HTTPS) 上使用。這項政策的設計宗旨是在使用者使用不安全的連線時保護私人資訊。

使用 WebView Beta 版進行測試

WebView 會定期更新,因此建議您經常使用 WebView 的 Beta 版測試與應用程式的相容性。如要開始在 Android 7.0 上測試 WebView 的預先發布版,請下載並安裝 Chrome 開發人員版或 Chrome Beta 版,然後依照上述開發人員選項,選取此版本做為 WebView 實作項目。請透過 Chromium 錯誤追蹤工具回報問題,協助我們在新版 WebView 發布前修正問題。

OpenGLTM ES 3.2 API

Android 7.0 為 OpenGL ES 3.2 新增架構介面和平台支援,包括:

  • Android Extension Pack (AEP) 中的所有擴充功能 (EXT_texture_sRGB_decode 除外)。
  • HDR 和延遲陰影的浮點影格緩衝區。
  • BaseVertex 繪製呼叫可提升批次與串流品質。
  • 健全的緩衝區存取控管機制,可降低 WebGL 負擔。

Android 7.0 上 OpenGL ES 3.2 適用的架構 API 附有 GLES32 類別。使用 OpenGL ES 3.2 時,請務必在資訊清單檔案中使用 <uses-feature> 標記和 android:glEsVersion 屬性宣告必要要求。

如要進一步瞭解如何使用 OpenGL ES,包括如何在執行階段檢查裝置支援的 OpenGL ES 版本,請參閱 OpenGL ES API 指南

Android TV 錄製內容

Android 7.0 新增了錄製及播放 Android TV 輸入服務內容的功能。電視輸入服務是以現有的時間轉移 API 為基礎,可控管可記錄的頻道資料、記錄工作階段的儲存方式,以及管理使用者與錄製內容之間的互動。

詳情請參閱「Android TV Recording API」。

Android for Work

Android for Work 為搭載 Android 7.0 的裝置新增許多新功能和 API。以下列舉部分重點功能;如需完整功能清單,請參閱「Android Enterprise 功能清單」。

工作資料夾安全性驗證

指定 N SDK 的設定檔擁有者可以為在工作資料夾中執行的應用程式指定專屬的安全性驗證。當使用者嘗試開啟任何工作應用程式時,系統會顯示工作挑戰。安全性驗證問題順利完成後,系統就會解鎖工作資料夾,並在必要時解密。如果是設定檔擁有者,ACTION_SET_NEW_PASSWORD 會提示使用者設定工作驗證問題,而 ACTION_SET_NEW_PARENT_PROFILE_PASSWORD 會提示使用者設定裝置鎖定。

設定檔擁有者可以使用 setPasswordQuality()setPasswordMinimumLength() 和相關方法,為工作驗證問題設定不同的密碼政策,例如 PIN 碼的效期,或者是否可使用指紋將設定檔解鎖。設定檔擁有者也可以使用新 getParentProfileInstance() 方法傳回的 DevicePolicyManager 執行個體設定裝置鎖定。此外,設定檔擁有者也可以使用新的 setOrganizationColor()setOrganizationName() 方法自訂工作驗證的憑證畫面。

關閉工作資料夾

如果裝置設有工作資料夾,使用者就能切換工作模式。關閉工作模式後,受管理使用者會暫時關閉,這樣會停用工作資料夾應用程式、背景同步處理和通知功能。包括設定檔擁有者應用程式。當工作模式關閉時,系統會顯示持續性狀態圖示,提醒使用者無法啟動工作應用程式。啟動器表示無法存取工作應用程式和小工具。

永久連線的 VPN

裝置擁有者和設定檔擁有者可確保工作應用程式一律透過指定的 VPN 連線。系統會在裝置啟動後自動啟動 VPN。

新的 DevicePolicyManager 方法為 setAlwaysOnVpnPackage()getAlwaysOnVpnPackage()

由於 VPN 服務可以直接由系統繫結,不需要應用程式互動,因此 VPN 用戶端需要為永久連線的 VPN 處理新的進入點。和先前一樣,會透過符合動作 android.net.VpnService 的意圖篩選器向系統指示服務。

使用者也可以前往「設定」>「更多」>「Vpn」,手動設定實作 VPNService 方法的「永久連線的 VPN 用戶端」。只有在 VPN 用戶端指定 API 級別 24 時,才能透過「設定」啟用永久連線的 VPN。

自訂佈建

應用程式可以使用公司顏色和標誌自訂設定檔擁有者和裝置擁有者佈建流程。DevicePolicyManager.EXTRA_PROVISIONING_MAIN_COLOR 可自訂流程顏色。DevicePolicyManager.EXTRA_PROVISIONING_LOGO_URI 使用公司標誌自訂流程。

無障礙功能強化

Android 7.0 現在會在歡迎畫面中直接提供 Vision 設定,方便您進行新裝置設定。讓使用者更輕鬆地在裝置上探索及設定無障礙功能,包括放大手勢、字型大小、顯示大小和 TalkBack。

這些無障礙功能會更醒目地顯示,在啟用這些功能的情況下,使用者更有可能試用您的應用程式。請務必啟用這些設定,並盡快測試應用程式。您可以依序前往「設定」>「無障礙設定」來啟用這些設定。

此外,在 Android 7.0 中,無障礙服務現在可協助行動不便的使用者輕觸螢幕。這個新的 API 可讓您建構具有臉部追蹤、眼動追蹤、點掃描等功能的服務,以滿足使用者的需求。

詳情請參閱 GestureDescription 的參考說明文件。

直接啟動

直接啟動可縮短裝置啟動時間,讓已註冊的應用程式即使在非預期的重新啟動後,功能仍受限。舉例來說,如果加密的裝置在使用者休眠時重新啟動,註冊的鬧鐘、訊息和來電現在就能照常通知使用者。也就是說,在重新啟動後,無障礙服務也能立即使用。

直接啟動運用 Android 7.0 中的檔案型加密功能,針對系統和應用程式資料提供精細的加密政策。系統會使用裝置加密存放區來儲存特定系統資料,並明確註冊應用程式資料。根據預設,系統會將憑證加密的儲存庫用於所有其他系統資料、使用者資料、應用程式和應用程式資料。

啟動時,系統會以受限模式啟動,僅存取裝置加密資料,且無法存取應用程式或資料的一般存取權。如果您希望在這個模式下執行元件,可以在資訊清單中設定標記來註冊這些元件。重新啟動後,系統會廣播 LOCKED_BOOT_COMPLETED 意圖來啟用已註冊的元件。系統會確保在解鎖前可取得已註冊的裝置加密應用程式資料。必須等到使用者確認螢幕鎖定憑證解密後,才能使用所有其他資料。

詳情請參閱「直接啟動」。

金鑰認證

Android 7.0 推出了「金鑰認證」這項全新的安全性工具,可協助您確保儲存在裝置硬體支援 KeyStore 中的金鑰組正確保護應用程式使用的機密資訊。有了這項工具,您就能放心讓應用程式與安全硬體中的金鑰互動,即使執行應用程式的裝置具備 Root 權限也一樣。如果您在應用程式中使用硬體支援的 KeyStore 的金鑰,就應該使用這項工具,特別是當您使用金鑰驗證應用程式中的機密資訊時。

金鑰認證可讓您驗證 RSA 或 EC 金鑰組是否已建立完成,並儲存在裝置的硬體支援 KeyStore 中,位於裝置的可信任執行環境 (TEE)。這項工具還可讓您使用裝置外部服務 (例如應用程式後端伺服器),判斷金鑰組的用途和有效性。即使有人取得裝置的 Root 權限,或是 Android 平台在裝置上執行的 Android 平台安全性遭駭,這項功能也能為金鑰組提供額外一層安全防護。

注意: 少數搭載 Android 7.0 的裝置支援硬體層級金鑰認證,所有搭載 Android 7.0 的裝置都會改用軟體層級的金鑰認證。在正式版環境中,驗證裝置硬體支援的金鑰的屬性之前,應先確認裝置支援硬體層級金鑰認證。為此,您應檢查認證憑證鏈結包含由 Google 認證根金鑰簽署的根憑證,且金鑰說明資料結構中的 attestationSecurityLevel 元素已設為「TrustedEnvironment」安全性等級。

詳情請參閱金鑰認證開發人員說明文件。

網路安全性設定

在 Android 7.0 中,應用程式可以利用宣告式的網路安全性設定 (而非使用容易出錯的傳統 API,例如 X509TrustManager) 自訂安全 (HTTPS、TLS) 連線的行為,而不必修改任何程式碼。

支援功能:

  • 自訂信任錨點。允許應用程式自訂受到安全連線信任的憑證授權單位 (CA)。例如,信任特定的自行簽署憑證或一組受限的公開 CA。
  • 僅供偵錯的覆寫。可讓應用程式開發人員安全地對應用程式進行安全連線,避免對安裝數增加風險。
  • 選擇不採用明文流量。可讓應用程式防止誤用明文流量。
  • 憑證綁定。這項進階功能可讓應用程式限制安全連線時信任的伺服器金鑰。

詳情請參閱網路安全性設定一文。

預設信任的憑證授權單位

根據預設,指定 Android 7.0 為目標版本的應用程式只會信任系統提供的憑證,不再信任使用者新增的憑證授權單位 (CA)。如果應用程式指定 Android 7.0 (API 級別 24) 版本,而希望信任使用者新增的憑證授權單位,應透過網路安全性設定,指定應如何信任使用者 CA。

APK 簽署配置 v2

Android 7.0 推出了 APK Signature Scheme v2,這是新的應用程式簽署配置,可加快應用程式安裝速度,並更有效地防止 APK 檔案在未經授權的情況下遭到修改。根據預設,Android Studio 2.2 和 Gradle 適用的 Android 外掛程式 2.2 版使用 APK Signature Scheme v2 和採用 JAR 簽署的傳統簽署配置來簽署應用程式。

雖然我們建議為應用程式套用 APK 簽名配置 v2,但這項新配置並非強制規定。如果應用程式在使用 APK Signature Scheme v2 時無法正確建構,您可以停用新配置。停用程序會導致 Android Studio 2.2 版和 Gradle 適用的 Android 外掛程式 2.2 版僅使用傳統簽署配置來簽署您的應用程式。如果只要以傳統配置進行簽署,請開啟模組層級的 build.gradle 檔案,然後在版本簽署設定中加入 v2SigningEnabled false 這一行:

  android {
    ...
    defaultConfig { ... }
    signingConfigs {
      release {
        storeFile file("myreleasekey.keystore")
        storePassword "password"
        keyAlias "MyReleaseKey"
        keyPassword "password"
        v2SigningEnabled false
      }
    }
  }

注意: 如果您使用 APK 簽署配置 v2 簽署應用程式,並對應用程式做出進一步變更,應用程式的簽名就會失效。因此,請先使用 zipalign 等工具,再使用 APK 簽名配置 v2 簽署應用程式,而不是在簽署之後。

詳情請參閱 Android Studio 文件,瞭解如何在 Android Studio 中 簽署應用程式,以及如何使用 Gradle 適用的 Android 外掛程式 設定用於簽署應用程式的建構檔案

限定範圍目錄存取權

在 Android 7.0 中,應用程式可以使用新的 API 要求特定外部儲存空間目錄的存取權,包括卸除式媒體 (例如 SD 卡) 的目錄。新的 API 可大幅簡化應用程式存取標準外部儲存空間目錄 (例如 Pictures 目錄) 的方式。相片應用程式等應用程式可以使用這些 API 取代使用 READ_EXTERNAL_STORAGE,以授予所有儲存空間目錄的存取權;或是為了讓使用者前往該目錄的儲存空間存取架構。

此外,新的 API 也能簡化使用者將外部儲存空間存取權授予應用程式的步驟。當您使用新的 API 時,系統會使用簡易的權限 UI,清楚展示應用程式要求存取的目錄。

詳情請參閱「範圍目錄存取權」開發人員說明文件。

鍵盤快速鍵說明

在 Android 7.0 中,使用者可以按下 Meta + / 鍵觸發「鍵盤快速鍵」畫面,顯示來自系統和焦點應用程式的所有快速鍵。如果捷徑存在,系統會從應用程式選單自動擷取這些捷徑。您也可以提供自訂的螢幕捷徑清單。只要覆寫 onProvideKeyboardShortcuts() 方法即可。

注意:所有鍵盤都不含 Meta 鍵,在 Macintosh 鍵盤上是 Command 鍵,Windows 鍵盤上的是 Windows 鍵,在 Pixel C 和 ChromeOS 鍵盤上則是 Search 鍵。

如要從應用程式的任何位置觸發鍵盤快速鍵輔助程式,請從相關活動中呼叫 requestShowKeyboardShortcuts()

自訂 Pointer API

Android 7.0 推出了 Custom Pointer API,可讓您自訂指標的外觀、瀏覽權限和行為。當使用者使用滑鼠或觸控板與 UI 物件互動時,這項功能特別實用。預設指標使用標準圖示。此 API 也包含進階功能,例如根據特定滑鼠或觸控板動作變更指標圖示的外觀。

如要設定指標圖示,請覆寫 View 類別的 onResolvePointerIcon() 方法。這個方法使用 PointerIcon 物件繪製對應特定動作事件的圖示。

持續性 Performance API

長時間執行的應用程式效能可能會大幅波動,因為系統會在裝置元件達到溫度限制時,節制晶片引擎的效能。隨著這個波動,應用程式開發人員將建立可長期執行的高效能應用程式,成為常態。

為解決這些限制,Android 7.0 支援持續效能模式,讓原始設備製造商 (OEM) 針對長時間執行的應用程式提供裝置效能功能提示。應用程式開發人員可利用這些提示調整應用程式,以便長時間取得可預測且一致的裝置效能。

應用程式開發人員只能在 Nexus 6P 裝置上在 Android 7.0 中試用這個新的 API。如要使用這項功能,請為您要以持續效能模式執行的視窗設定持續效能期標記。請使用 Window.setSustainedPerformanceMode() 方法設定此標記。如果視窗不在焦點內,系統會自動停用這個模式。

VR 支援

Android 7.0 為全新的 VR 模式加入平台支援和最佳化功能,可讓開發人員為使用者打造優質的行動 VR 體驗。有多種效能強化功能,包括 VR 應用程式專屬 CPU 核心的存取權限。在應用程式中,您可以使用智慧型頭部追蹤和 VR 適用的立體聲通知。最重要的是,Android 7.0 提供非常低延遲的圖形。如需瞭解如何建構適用於 Android 7.0 的 VR 應用程式,請參閱 Android 專用 Google VR SDK

在 Android 7.0 中,列印服務開發人員現在可以顯示個別印表機和列印工作的其他相關資訊。

列出個別印表機時,列印服務現在可透過兩種方式設定每個印表機的圖示:

此外,您可以呼叫 setInfoIntent() 來提供個別印表機活動來顯示其他資訊。

您可以在列印工作通知中分別呼叫 setProgress()setStatus(),指出列印工作的進度和狀態。

Frame Metrics API

Frame Metrics API 可讓應用程式監控其 UI 轉譯效能。為提供這項功能,這個 API 會公開串流 Pub/Sub API,以便轉移應用程式目前視窗的影格時間資訊。傳回的資料等同 adb shell dumpsys gfxinfo framestats 顯示的資料,但不限於過去 120 個影格。

您可以在沒有 USB 連線的情況下,使用 Frame Metrics API 測量實際工作環境中的互動層級 UI 效能。這個 API 收集的資料精細程度比 adb shell dumpsys gfxinfo 更高。由於系統可以收集應用程式中特定互動的資料,因此資料精細程度可能會較高;系統不需要擷取整個應用程式效能的全域摘要,也不需要清除任何全域狀態。您可以使用這項功能收集效能資料,並擷取 UI 效能中的迴歸,以便在應用程式中使用實際用途。

如要監控視窗,請實作 OnFrameMetricsAvailableListener.onFrameMetricsAvailable() 回呼方法,並在該視窗中註冊。

API 提供 FrameMetrics 物件,其中包含轉譯子系統針對影格生命週期中各個里程碑回報的時間資料。支援的指標包括:UNKNOWN_DELAY_DURATIONINPUT_HANDLING_DURATIONANIMATION_DURATIONLAYOUT_MEASURE_DURATIONDRAW_DURATIONSYNC_DURATIONCOMMAND_ISSUE_DURATIONSWAP_BUFFERS_DURATIONTOTAL_DURATIONFIRST_DRAW_FRAME

虛擬檔案

在舊版 Android 中,應用程式可使用儲存空間存取架構,讓使用者可以從 Google 雲端硬碟等雲端儲存空間帳戶中選取檔案。不過,您無法代表沒有直接位元碼表示法的檔案;每個檔案都需要提供輸入串流。

Android 7.0 將「虛擬檔案」的概念新增至儲存空間存取架構。虛擬檔案功能可讓 DocumentsProvider 傳回可與 ACTION_VIEW 意圖搭配使用的文件 URI,即使這些 URI 沒有直接的位元碼表示法也一樣。Android 7.0 也可讓您為使用者檔案提供替代格式,無論是虛擬或其他格式。

如要進一步瞭解如何開啟虛擬檔案,請參閱「儲存空間存取架構」指南中的虛擬檔案