開發人員專用的 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 這三個常用的隱式廣播訊息,因為這些廣播功能可能會一次喚醒多個應用程式的背景處理程序,造成記憶體和電池電量耗盡。如果您的應用程式收到這些功能,請改用 Android 7.0 遷移至 JobScheduler 和相關 API。

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

SurfaceView

Android 7.0 將同步動作導入 SurfaceView 類別,在某些情況下,其電池效能比 TextureView 更佳。在某些情況下,相較於 TextureView,採用捲動和動畫影片位置的應用程式在轉譯影片或 3D 內容時,耗電量會較低。SurfaceView

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 僅適用於搭載 Vulkan 硬體的裝置應用程式,例如 Nexus 5X、Nexus 6P 和 Nexus Player。我們正與合作夥伴密切合作,盡快將 Vulkan 引進更多裝置。

詳情請參閱 API 說明文件

快速設定 Tile API

通知欄中的快速設定方塊

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

「快速設定」是常用簡單的方式,可讓您直接從通知欄查看主要設定和動作。在 Android 7.0 中,我們擴大了快速設定的範圍,讓設定更加實用且便利。

我們新增了更多快速設定圖塊的空間,使用者只要向左或向右滑動,即可在分頁的顯示區域存取該圖塊。我們還提供讓使用者控制「快速設定」方塊的顯示位置和顯示位置,使用者只要拖曳圖塊即可新增或移動資訊方塊。

對開發人員來說,Android 7.0 也新增了 API,可讓您定義自己的「快速設定」資訊方塊,讓使用者輕鬆存取應用程式中的按鍵控制項和動作。

快速設定方塊會保留給緊急或經常使用的控制項或動作,而不應當成啟動應用程式的捷徑。

定義資訊方塊後,你就能向使用者顯示這些資訊方塊,使用者只要拖曳資訊方塊即可將資訊加入「快速設定」。

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

封鎖號碼

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

透過將號碼封鎖平台的標準功能,Android 可讓應用程式以一致的方式,在各種裝置上封鎖號碼。應用程式還有下列優點:

  • 封鎖來電號碼後,對方也會收到訊息
  • 透過「備份與還原」功能,已封鎖的號碼在重設及裝置後仍可持續存在
  • 多個應用程式可使用相同的封鎖號碼清單

此外,透過 Android 整合電信業者應用程式後,電信業者可以讀取裝置上的已封鎖號碼清單,並執行服務端封鎖,避免使用者不想接到擾人的來電或簡訊,無法透過任何媒介 (例如網路語音傳遞 (VOIP) 端點或轉接電話) 觸及使用者。

詳情請參閱 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.icu 套件下的 Android 架構中,提供一部分的 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 會在獨立的沙箱程序中執行網頁內容。

我們希望先確認 N 的相容性和執行階段效能,再於日後的 Android 版本中啟用多重處理程序 WebView。在這個版本中,啟動時間會出現迴歸、記憶體總用量和軟體轉譯效能。

如果您在多程序模式中發現非預期的問題,請告訴我們。請透過 Chromium 錯誤追蹤工具與 WebView 團隊聯絡。

JavaScript 在載入網頁前執行

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

開發人員如果想將 JavaScript 插入 WebView,應在頁面開始載入後執行指令碼。

不安全來源上的地理位置

自指定 Android 7.0 版本的應用程式起,Geolocation 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 擴充功能套件 (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 新增了透過新的錄製 API,錄製與播放 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 現在直接在歡迎畫面中提供「視覺設定」,方便使用者設定新裝置。讓使用者更容易在裝置上探索及設定無障礙功能,包括放大手勢、字型大小、顯示大小和 TalkBack。

這些無障礙功能會更顯眼,方便使用者試用啟用後的應用程式。請務必在啟用這些設定的情況下及早測試應用程式。您可以依序前往「設定」>「無障礙設定」加以啟用。

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

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

直接啟動

直接啟動可縮短裝置啟動時間,即使已註冊的應用程式在意外重新啟動後,其功能會受到限制。舉例來說,如果加密裝置在使用者處於休眠狀態時重新啟動,已註冊的鬧鐘,訊息和來電現在可以繼續照常通知使用者。這也表示在重新啟動後立即提供無障礙服務。

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

啟動時,系統會進入受限模式,只能存取裝置加密資料,而且無法存取應用程式或資料。如果想要在此模式中執行元件,請在資訊清單中設定標記來註冊這些元件。重新啟動後,系統會廣播 LOCKED_BOOT_COMPLETED 意圖來啟用已註冊的元件。系統會確保在解鎖前提供已註冊裝置加密的應用程式資料。除非「使用者」確認螢幕鎖定憑證來解密,否則無法使用所有其他資料。

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

金鑰認證

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

透過金鑰認證功能,您可以驗證 RSA 或 EC 金鑰組是否已建立,並儲存在裝置的受信任執行環境 (TEE) 中,裝置的硬體支援 KeyStore 中。此外,這項工具也可讓您使用裝置外的服務 (例如應用程式的後端伺服器) 判斷及嚴格驗證金鑰組的用途和有效性。即便有人取得裝置 Root 權限,或對裝置上執行的 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,則應使用網路安全性設定,指定應如何信任使用者 CA。

APK 簽署配置 v2

Android 7.0 導入了 APK 簽署配置 v2,這是新的應用程式簽署配置,能加快應用程式安裝速度,並提供更多防護機制,防止他人未經授權修改 APK 檔案。根據預設,Android Studio 2.2 和 Gradle 2.2 適用的 Android 外掛程式會同時透過 APK Signature Scheme v2 及使用 JAR 簽署的傳統簽署配置來簽署您的應用程式。

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

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

注意: 如果您使用 APK Signature Scheme v2 簽署應用程式,並在之後變更應用程式,應用程式的簽名就會失效。因此,請使用 zipalign 等工具,再使用 APK Signature Scheme 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()

自訂指標 API

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

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

持續性效能 API

對於長時間執行的應用程式,效能可能會大幅波動,因為裝置元件達到溫度限制時,系統會限制晶片系統上的系統。這種波動對應用程式開發人員來說是相當不錯的目標,能夠建立長時間執行的高效能應用程式。

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

應用程式開發人員只能在 Android 7.0 中試用這個 API,僅適用於 Nexus 6P 裝置。如要使用這項功能,請針對您要以持續效能模式執行的視窗,設定持續效能視窗標記。請使用 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 個影格。

您可以使用 Frame Metrics API,在不使用 USB 連線的情況下,評估實際工作環境中的互動層級 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 也可讓您為使用者檔案、虛擬或其他格式提供替代格式。

如要進一步瞭解如何開啟虛擬檔案,請參閱「在 Storage Access Framework 指南中開啟虛擬檔案」。