天天看點

Android 7.0新特性

Android7.0釋出已經有一段時間了,目前越來越穩定了,有些廠商已經在新機子裡開始應用了。今天我來專門就7.0中的新功能、新特性做一下總結。首先看一下7.0新LOGO哈!

Android 7.0新特性

Android 7.0 Nougat!

是不是覺得這個logo有點小清新!

重要的開發者功能

  • 多視窗支援
  • 通知
  • JIT/AOT 編譯
  • 快速的應用安裝
  • 随時随地低電耗模式
  • 背景優化
  • 資料存儲器
  • 新3D渲染 API
  • Quick Settings Tile API
  • 号碼屏蔽
  • 來電過濾
  • 區域設定和語言設定
  • 新增的表情
  • Android 中的 ICU4J API
  • OpenGL ES 3.2 API
  • Android TV 錄制
  • Android for Work
  • 無障礙輔助功能
  • 直接啟動引導
  • 密鑰認證
  • 網絡安全性配置
  • 預設受信任的 CA
  • APK Signature Scheme v2
  • 作用域目錄通路
  • 鍵盤快捷鍵輔助工具
  • 持續性能 API
  • VR 支援
  • 更新列印服務
  • 虛拟檔案
  • FrameMetricsListener API

多視窗支援

在 Android N 中,andrdoid平台引入了一個新的而且非常需要的多任務處理功能 — 多視窗支援。

現在,使用者可以一次在螢幕上打開兩個應用。

在運作 Android N 的手機和平闆電腦上,使用者可以并排運作兩個應用,或者處于分屏模式時一個應用位于另一個應用之上。 使用者可以通過拖動兩個應用之間的分隔線來調整應用。

在 Android TV 裝置上,應用可以将自身置于畫中畫模式,進而讓它們可以在使用者浏覽或與其他應用互動時繼續顯示内容。

Android 7.0新特性

圖 1. 在分屏模式下運作的應用。

多視窗支援為您提供新的吸引使用者方式,特别是在平闆電腦和其他更大螢幕的裝置上。 您甚至可以在您的應用中啟用拖放,進而使使用者可以友善地将内容拖放到您的應用或從其中拖出内容—這是一個非常好的增強使用者體驗的方式。

向您的應用添加多視窗支援并配置多視窗顯示的處理方式非常簡單。 例如,您可以指定您的 Activity 允許的最小尺寸,進而防止使用者将 Activity 調整到該尺寸以下。 您還可以為應用禁用多視窗顯示,這可確定系統将僅以全屏模式顯示應用。

如需了解詳細資訊,請參閱多視窗支援開發者文檔。

增強通知功能

在 Android N 中,我們重新設計了通知,使其更易于使用并且速度更快。 部分變更包括:

模闆更新:我們正在更新通知模闆,新強調了英雄形象和化身。 開發者将能夠充分利用新模闆,隻需進行少量的代碼調整。

消息樣式自定義:您可以自定義更多與您的使用 MessageStyle

類的通知相關的使用者界面标簽。 您可以配置消息、會話标題和内容視圖。

捆綁通知:系統可以将消息組合在一起(例如,按消息主題)并顯示組。 使用者可以适當地進行 Dismiss 或 Archive 等操作。 如果您已實作 Android Wear 的通知,那麼您已經很熟悉此模型。

直接回複:對于實時通信應用,Android 系統支援内聯回複,以便使用者可以直接在通知界面中快速回複短信。

自定義視圖:兩個新的 API 讓您在通知中使用自定義視圖時可以充分利用系統裝飾元素,如通知标題和操作。

Android 7.0新特性

圖 2. 綁定的通知和直接回複。

如需了解如何實作新功能的資訊,請參閱通知指南。

個人資料的 JIT/AOT 編譯

在 Android N 中,我們添加了 Just in Time (JIT) 編譯器,對 ART 進行代碼分析,讓它可以在應用運作時持續提升 Android 應用的性能。 JIT 編譯器對 Android 運作元件目前的 Ahead of Time (AOT) 編譯器進行了補充,有助于提升運作時性能,節省存儲空間,加快應用更新和系統更新速度。

個人資料指導的編譯讓 Android 運作元件能夠根據應用的實際使用以及裝置上的情況管理每個應用的 AOT/JIT 編譯。 例如,Android 運作元件維護每個應用的熱方法的個人資料,并且可以預編譯和緩存這些方法以實作最佳性能。 對于應用的其他部分,在實際使用之前不會進行編譯。

除提升應用的關鍵部分的性能外,個人資料指導的編譯還有助于減少整個 RAM 占用,包括關聯的二進制檔案。 此功能對于低記憶體裝置非常尤其重要。

Android 運作元件在管理個人資料指導的編譯時,可最大程度降低對裝置電池的影響。 僅當裝置處于空閑狀态和充電時才進行編譯,進而可以通過提前執行該工作節約時間和省電。

快速部署應用

Android 運作元件的 JIT 編譯器最實際的好處之一是應用安裝和系統更新的速度。 即使在 Android 6.0 中需要幾分鐘進行優化和安裝的大型應用,現在隻需幾秒鐘就可以完成安裝。 系統更新也變得更快,因為省去了優化步驟。

簡便切換低電耗模式…

Android 6.0 推出了低電耗模式,即裝置處于空閑狀态時,通過推遲應用的 CPU 和網絡活動以實作省電目的的系統模式,例如,裝置放在桌上或抽屜裡時。

現在,在 Android N 中,低電耗模式又前進了一步,随時随地可以省電。隻要螢幕關閉了一段時間,且裝置未插入電源,低電耗模式就會對應用使用熟悉的 CPU 和網絡限制。這意味着使用者即使将裝置放入口袋裡也可以省電。

圖 3. 低電耗模式現在應用限制以延長電池壽命,即使裝置未處于靜止狀态。

螢幕關閉片刻後,裝置在使用電池時,低電耗模式将限制網絡通路,同時延遲作業和同步。 在短暫的維護時間範圍後,其允許應用通路網絡,并執行延遲的作業/同步。 打開螢幕或将裝置插入電源會使裝置退出低電耗模式。

當裝置再次處于靜止狀态時,螢幕關閉且使用電池一段時間,低電耗模式針對 PowerManager.WakeLock、AlarmManager 警報和 GPS/Wi-Fi 掃描應用完整 CPU 和網絡限制。

無論裝置是否處于運動狀态,将應用調整到低電耗模式的最佳做法均相同,是以,如果您已更新應用以妥善處理低電耗模式,則一切就緒。 如果不是,請立即開始将應用調整到低電耗模式。

Project Svelte:背景優化

Project Svelte 在持續改善,以最大程度減少生态系統中一系列 Android 裝置中系統和應用使用的 RAM。 在 Android N 中,Project Svelte 注重優化在背景中運作應用的方式。

背景處理是大多數應用的一個重要部分。處理得當,可讓您實作非常棒的使用者體驗 — 即時、快速和情境感覺。如果處理不得當,背景處理會毫無必要地消耗 RAM(和電池),同時影響其他應用的系統性能。

自 Android 5.0 釋出以來,JobScheduler 已成為執行背景工作的首選方式,其工作方式有利于使用者。 應用可以在安排作業的同時允許系統基于記憶體、電源和連接配接情況進行優化。 JobScheduler 可實作控制和簡潔性,我們想要所有應用都使用它。

另一個非常好的選擇是 GCMNetworkManager(Google Play 服務的一部分),其在舊版 Android 中提供類似的作業安排和相容性。

Android在繼續擴充 JobScheduler 和 GCMNetworkManager,以符合多個用例 — 例如,在 Android N 中,現在,您可以基于内容提供程式中的更改安排背景工作。 同時,我們開始棄用一些較舊的模式,這些模式會降低系統性能,特别是低記憶體裝置的系統性能。

在 Android N 中,谷歌删除了三個常用隐式廣播 — CONNECTIVITY_ACTION、ACTION_NEW_PICTURE 和 ACTION_NEW_VIDEO — 因為這些廣播可能會一次喚醒多個應用的背景程序,同時會耗盡記憶體和電池。 如果您的應用收到這些廣播,請充分利用 N Developer Preview 以遷移到 JobScheduler 和相關的 API。

是以7.0上你想程序保護越來越難

如需了解詳情,請檢視背景優化文檔。

Data Saver

Android 7.0新特性

圖 4. 設定中的 Data Saver

在移動裝置的整個生命周期,蜂窩資料計劃的成本通常會超出裝置本身的成本。 對于許多使用者而言,蜂窩資料是他們想要節省的昂貴資源。

Android N 推出了 Data Saver 模式,這是一項新的系統服務,有助于減少應用使用的蜂窩資料,無論是在漫遊,賬單周期即将結束,還是使用少量的預付費資料包。 Data Saver 讓使用者可以控制應用使用蜂窩資料的方式,同時讓開發者打開 Data Saver 時可以提供更多有效的服務。

使用者在 Settings 中啟用 Data Saver 且裝置位于按流量計費的網絡上時,系統屏蔽背景流量消耗,同時訓示應用在前台盡可能使用較少的流量 — 例如,通過限制用于流媒體服務的比特率、降低圖檔品質、延遲最佳的預緩沖等方法來實作。 使用者可以将特定應用加入白名單以允許背景按流量的流量消耗,即使在打開 Data Saver 時也是如此。

Android N 擴充了 ConnectivityManager,以便為應用檢索使用者的 Data Saver 首選項并監控首選項變更提供一種方式。 所有應用均應檢查使用者是否已啟用 Data Saver 并努力限制前台和背景流量消耗。

Vulkan API

Android N 将一項新的 3D 渲染 API Vulkan 內建到平台中。就像 OpenGL ES 一樣,Vulkan 是 3D 圖形和渲染的一項開放标準,由 Khronos Group 維護。

Vulkan 是完全從零開始設計,以最小化驅動器中的 CPU 開銷,并能讓您的應用更直接地控制 GPU 操作。 Vulkan 還允許多個線程同時執行工作,如指令緩沖區建構,以獲得更好的并行化。

Vulkan 開發工具和庫都已卷入 Android NDK。它們包括:

  • 驗證層(調試庫)
  • SPIR-V 着色程式編譯器
  • SPIR-V 運作時着色器編譯庫

Vulkan 僅适用于已啟用 Vulkan 硬體的裝置上的應用,如 Nexus 5X、Nexus 6P 和 Nexus Player。 我們正在與合作夥伴密切合作,以盡快使 Vulkan 能面向更多的裝置。

如需要了解更多資訊,請參閱 API 文檔。

快速便捷的設定欄

Android 7.0新特性

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

“快速設定”通常用于直接從通知欄顯示關鍵設定和操作,非常簡單。 在 Android N 中,我們已擴充“快速設定”的範圍,使其更加有用更友善。

我們為額外的“快速設定”圖塊添加了更多空間,使用者可以通過向左或向右滑動跨分頁的顯示區域通路它們。 我們還讓使用者可以控制顯示哪些“快速設定”圖塊以及顯示的位置 — 使用者可以通過拖放圖塊來添加或移動圖塊。

對于開發者,Android N 還添加了一個新的 API,進而讓您可以定義自己的“快速設定”圖塊,使使用者可以輕松通路您應用中的關鍵控件和操作。

對于急需或頻繁使用的控件和操作,保留“快速設定”圖塊,且不應将其用作啟動應用的快捷方式。

定義圖塊後,您可以将它們顯示給使用者,使用者可通過拖放将圖塊添加到“快速設定”。

如需建立應用圖塊的更多資訊,請參閱可下載下傳的 API 參考中的檔案 android.service.quicksettings.Tile。

号碼屏蔽

Android N 現在支援在平台中進行号碼屏蔽,提供架構 API,讓服務提供商可以維護屏蔽的号碼清單。 預設短信應用、預設手機應用和提供商應用可以對屏蔽的号碼清單進行讀取和寫入操作。 其他應用則無法通路此清單。

通過使号碼屏蔽成為平台的标準功能,Android 為應用提供一緻的方式來支援廣泛的裝置上的号碼屏蔽。 應用可以利用的其他優勢包括:

屏蔽已屏蔽的來電号碼發出的短信

通過 Backup & Restore(備份和還原)功能可以跨重置和裝置保留屏蔽的号碼

多個應用可以使用相同的屏蔽号碼清單

此外,通過 Android 的營運商應用內建表示營運商可以讀取裝置上屏蔽的号碼清單,并為使用者執行服務端屏蔽,以阻止不需要的來電和短信通過任何媒體(如 VOIP 端點或轉接電話)到達使用者。

如需了解詳細資訊,請參閱可下載下傳的 API 參考中的 android.provider.BlockedNumberContract。

來電攔截

Android N 允許預設的手機應用過濾來電。手機應用執行此操作的方式是實作新的 CallScreeningService,該方法允許手機應用基于來電的 Call.Details 執行大量操作,例如:

  • 拒絕來電
  • 不允許來電到達通話記錄
  • 不向使用者顯示來電通知

    如需了解詳細資訊,請參閱可下載下傳的 API 參考中的 android.telecom.CallScreeningService。

多區域設定、多語言

Android N 現在允許使用者在設定中選擇多個區域設定,以更好地支援雙語用例。 應用可以使用新的 API 擷取使用者選擇的區域設定,然後為多區域設定使用者提供更成熟的使用者體驗 — 如以多個語言顯示搜尋結果,并且不會以使用者了解的語言翻譯網頁。

除多區域設定支援外,Android N 還擴充了使用者可用的語言範圍。 它針對常用語言提供超過 25 種的變體,如英語、西班牙語、法語和阿拉伯語。 它還針對 100 多種新語言添加了部分支援。

應用可以通過調用 LocaleList.GetDefault() 擷取使用者設定的區域設定清單。 為支援擴充的區域設定數量,Android N 正在改變其解析資源的方式。 請務必使用新的資源解析邏輯測試和驗證您的應用是否能如期運作。

如需有關新資源解析行為和應遵循的最佳做法的更多資訊,請參閱多語言支援。

新增的表情

Android N 引入更多表情符号和表情符号相關功能,包括膚色表情符号和支援變量選擇符。 如果您的應用支援表情符号,請遵循以下準則,以便能充分利用這些表情符号相關功能優勢。

在插入之前,檢查裝置是否包含表情符号。 若要檢查系統字型中有哪些表情符号,使用 hasGlyph(String) 方法。

檢查表情符号是否支援變量選擇符。 變量選擇符使您能夠呈現一些彩色或黑白的表情符号。 在移動裝置上,應用應呈現彩色的表情符号,而不是黑白的。但是,如果您的應用顯示嵌入在文本中的表情符号,那應使用黑白變量。 若要确定表情符号是否有變量,使用變量選擇符。 如需有關支援變量的字元的完整清單,請參閱變量的 Unicode 文檔中的 表情符号變量序列部分。

檢查表情符号是否支援膚色。Android N 允許使用者按照他們的喜好修改表情符号呈現的膚色。 鍵盤應用應為有多個膚色的表情符号提供可視化的訓示,并應允許使用者選擇他們喜歡的膚色。 若要确定哪些系統表情符号有膚色修改器,使用 hasGlyph(String) 方法。 您可以通過讀取 Unicode 文檔來确定哪些表情符号使用膚色。

Android 中的 ICU4J API

Android N 目前在 Android 架構(位于 android.icu 軟體包下)中提供 ICU4J API 的子集。 遷移很簡單,主要是需要從 com.java.icu 命名空間更改為 android.icu。 如果您已在您的應用中使用 ICU4J 捆綁包,切換到 Android 架構中提供的 android.icu API 可以大量節省 APK 大小。

如果要了解有關 Android ICU4J API 的更多資訊,請參閱 ICU4J 支援。

OpenGL ES 3.2 API

Android N 添加了架構接口和對 OpenGL ES 3.2 的平台支援,包括:

來自 Android 擴充包 (AEP) 的所有擴充(EXT_texture_sRGB_decode 除外)。

針對 HDR 的浮點幀緩沖和延遲着色。

BaseVertex 繪圖調用可實作更好的批處理和流媒體服務。

強大的緩沖區通路控制可減少 WebGL 開銷。

Android N 上适用于 OpenGL ES 3.2 的架構 API 與 GLES32 類一起提供。 使用 OpenGL ES 3.2 時,請務必通過 标記和 android:glEsVersion 屬性在您的清單中聲明要求。

如需了解有關使用 OpenGL ES 的資訊,包括如何在運作時檢查裝置支援的 OpenGL ES 版本,請參閱 OpenGL ES API 指南。

Android TV 節目 錄制

Android N 通過新的錄制 API 添加了從 Android TV 輸入服務錄制和播放内容的功能。 建構在現有時移 API 之上,TV 輸入服務可以控制能夠錄制的管道資料、儲存錄制的會話的方式,同時可通過錄制的内容管理使用者互動。

如需了解詳細資訊,請參閱 Android TV 錄制 API。

Android for Work

Android for Work 針對運作 Android N 的裝置添加了許多新功能和 API。部分重要内容如下— 有關變更的完整清單,請參閱 Android for Work 更新。

工作資料安全性加密

面向 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 用戶端必須針對 Always on VPN 處理新的入口點。 和以前一樣,由與操作比對的 Intent 過濾器将服務訓示給系統。android.net.VpnService。

使用者還可以使用 Settings>More>Vpn 在主要使用者中手動設定實作 VPNService 方法的 Always on VPN 用戶端。

自定義配置

應用可以用企業顔色和徽标來自定義個人資料所有者和裝置所有者配置流程。DevicePolicyManager.EXTRA_PROVISIONING_MAIN_COLOR 自定義流程顔色。DevicePolicyManager.EXTRA_PROVISIONING_LOGO_URI用企業徽标自定義流程。

無障礙增強功能

Android N 現在針對新的裝置設定直接在歡迎螢幕上提供“Vision Settings”。 這使使用者可以更容易發現和配置他們裝置上的無障礙功能,包括放大手勢、字型大小、顯示屏尺寸和 TalkBack。

随着這些無障礙功能更為突出,在啟用這些功能後,您的使用者更可能試用您的應用。 請務必提前啟用這些設定測試您的應用。 您可以通過 Settings > Accessibility 啟用它們。

還是在 Android N 中,無障礙服務現在可以幫助具有動作障礙的使用者觸摸螢幕。 全新的 API 允許使用人臉追蹤、眼球追蹤、點掃描等功能建構服務,以滿足這些使用者的需求。

如需了解詳細資訊,請參閱可下載下傳的 API 參考 中的 android.accessibilityservice.GestureDescription 。

直接啟動

直接啟動可以縮短裝置啟動時間,讓注冊的應用具有有限的功能,即使在意外重新開機後。例如,如果當使用者睡覺時加密的裝置重新開機,那麼注冊的警報、消息和來電現在可以和往常一樣繼續通知使用者。 這也意味着重新開機後無障礙服務會立即可用。

在 Android N 中,直接啟動充分利用基于檔案的加密,以針對系統和應用資料啟用細化的加密政策。為系統和應用資料。系統針對標明的系統資料和顯式注冊的應用資料使用裝置加密的存儲。 預設情況下,憑據加密的存儲可用于所有其他系統資料、使用者資料、應用及應用資料。

啟動時,系統在受限的模式中啟動,僅通路裝置加密的資料,不會對應用或資料進行正常通路。如果您有想要在此模式下運作的元件,您可以通過在清單檔案中設定标記注冊它們。 重新開機後,系統通過廣播LOCKED_BOOT_COMPLETED Intent 激活注冊的元件。 系統確定注冊的裝置加密的應用資料在解鎖前可用。 所有其他資料在使用者确認鎖定螢幕憑據進行解密前均不可用。

如需了解詳細資訊,請參閱直接啟動。

密鑰認證

使用硬體支援的密鑰庫,可更安全地在 Android 裝置上建立、存儲和使用加密密鑰。 它們可保護密鑰免受 Linux 核心、潛在的 Android 漏洞的攻擊,也可防止從已取得根權限的裝置提取密鑰。

為了讓硬體支援的密鑰庫使用起來更簡單和更安全,Android N 引入了密鑰認證。 應用和關閉的裝置可使用密鑰認證以堅決地确定 RSA 或 EC 密鑰對是否受硬體支援、密鑰對的屬性如何,以及其使用和有效性有何限制。

應用和關閉的裝置服務可以通過 X.509 認證證書(必須由有效的認證密鑰簽署)請求有關密鑰對的資訊。 認證密鑰是一個 ECDSA 簽署密鑰,其在出廠時被注入裝置的硬體支援的密鑰庫。是以,有效的認證密鑰簽署的認證證書可确認硬體支援的密鑰庫是否存在,以及該密鑰庫中密鑰對的詳細資訊。

為確定裝置使用安全的官方 Android 出廠鏡像,密鑰認證要求裝置 bootloader 向可信執行環境 (TEE) 提供以下資訊:

裝置上安裝的作業系統版本和更新檔級别

驗證的啟動公鑰和鎖定狀态。

如需了解有關硬體支援的密鑰庫功能的詳細資訊,請參閱硬體支援的密鑰庫指南。

除密鑰認證外,Android N 還推出了指紋綁定密鑰,在指紋注冊時不會撤銷。

網絡安全性配置

在 Android N 中,通過使用說明性“網絡安全性配置”(而不是使用傳統的易出錯的程式設計 API(例如,X509TrustManager)),應用可以安全地自定義其安全(HTTPS、TLS)連接配接的行為,無需任何代碼修改。

支援的功能:

自定義信任錨。讓應用可以針對安全連接配接自定義哪些證書頒發機構 (CA) 值得信賴。 例如,信任特定的自簽署證書或限制應用信任的公共 CA 集。

僅調試重寫。讓應用開發者可以安全調試其應用的安全連接配接,而不會增加安裝基礎的風險。

明文流量選擇退出。讓應用可以防止自身意外使用明文流量。

證書固定。這是一項進階功能,讓應用可以針對安全連接配接限制哪些伺服器密鑰受信任。

如需了解詳細資訊,請參閱網絡安全性配置。

預設受信任的證書頒發機構

預設情況下,面向 Android N 的應用僅信任系統提供的證書,且不再信任使用者添加的證書頒發機構 (CA)。 如果面向 Android N 的應用希望信任使用者添加的 CA,則應使用網絡安全性配置以指定信任使用者 CA 的方式。

APK 簽名政策v2

Android N 引入一項新的應用簽名方案 APK Signature Scheme v2,它能提供更快的應用安裝時間和更多針對未授權 APK 檔案更改的保護。 在預設情況下,Android Studio 2.2 和 Android Gradle 2.2 插件會使用 APK Signature Scheme v2 和傳統簽名方案來簽署您的應用。

雖然我們建議您對您的應用采用 APK Signature Scheme v2,但這項新方案并非強制性的。 如果您的應用在使用 APK Signature Scheme v2 時不能正确建構,您可以停用這項新方案。 禁用過程會導緻 Android Studio 2.2 和 Android Gradle 2.2 插件僅使用傳統簽名方案來簽署您的應用。 若要僅用傳統方案簽署,打開多層 build.gradle 檔案,然後将行 v2SigningEnabled false 添加到您的版本簽名配置中:

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

注意:如果您使用 APK Signature Scheme v2 簽署您的應用,并對應用進行了進一步更改,則應用的簽名将無效。 出于這個原因,請在使用 APK Signature Scheme v2 之前、而非之後使用 zipalign 等工具。

如需更多資訊,請閱讀介紹如何在 Android Studio 中簽署一項應用以及如何使用 Android Gradle 插件來為簽署應用配置建構檔案。

作用域目錄通路

在 Android N 中,應用可以使用新的 API 請求通路特定的外部存儲目錄,包括可移動媒體上的目錄,如 SD 卡。 新 API 大大簡化了應用通路标準外部存儲目錄的方式,如 Pictures 目錄。 應用(如照片應用)可以使用這些 API(而不是使用 READ_EXTERNAL_STORAGE),其授予所有存儲目錄的通路權限或存儲通路架構,進而讓使用者可以導航到目錄。

此外,新的 API 簡化了使用者向應用授予外部存儲通路權限的步驟。 當您使用新的 API 時,系統使用一個簡單的權限 UI,其清楚地詳細介紹應用正在請求通路的目錄。

如需了解詳細資訊,請參閱作用域目錄通路開發者文檔。

鍵盤快捷鍵輔助工具

在 Android N 中,使用者可以按“Alt + /”觸發“鍵盤快捷鍵”螢幕,它會顯示的系統和對焦的應用中可用的所有快捷鍵。 這些是從應用菜單(如可用)中自動檢索到的,但開發者可以提供自己的螢幕微調快捷鍵。 您可以通過重寫新 Activity.onProvideKeyboardShortcuts() 的方法來進行這項操作,如可下載下傳的 API 參考 中所述。

若要在您的應用程式的任何地方觸發鍵盤快捷鍵輔助工具,為相關活動調用Activity.requestKeyboardShortcutsHelper()。

持續性能 API

長期運作的應用的性能可能會顯著波動,因為系統會阻止系統晶片在裝置元件達到溫度限制時啟動。 這種波動是建立高性能長期運作應用的應用開發者的移動目标。

為解決這些限制,Android N 包括了“持續性能模式”支援,幫助原始裝置制造商 (OEM) 提供關于長期運作應用的裝置性能能力的提示。 應用開發者可以使用這些提示來根據可預測的一緻裝置性能水準調整長期應用。

應用開發者隻能在 Nexus 6P 裝置的 N Developer Preview 上嘗試這項新的 API。 若要使用此功能,為您希望以持續性能模式運作的視窗設定持續性能視窗标記。 使用 Window.setSustainedPerformanceMode()方法設定此舉報。 當視窗不再對焦時,系統會自動停用此模式。

VR 支援

Android N 添加了新的 VR 模式的平台支援和優化,以使開發者能為使用者打造高品質移動 VR 體驗。 新版針對開發者提供了大量性能增強特性,包括單一緩沖區渲染以及允許 VR 應用通路某個專屬的 CPU 核心。在您的應用中,您可以享受到專為 VR 設計的平滑頭部跟蹤和立體聲通知功能。 最重要的是,Android N 的圖形延時非常低。 如需有關建構面向的 Android N 的 VR 應用的完整資訊,請參閱 面向 Android 的 Google VR SDK。

列印服務更新增強

在 Android N 中,列印服務開發者現在可以公開關于個别列印機和列印作業的其他資訊。

在列出各列印機時,列印服務現在可以通過兩種方式來設定按列印機的圖示:

您可以通過調用PrinterInfo.Builder.setResourceIconId() 設定源于資源 ID 的圖示

您可以通過調用PrinterInfo.Builder.setHasCustomPrinterIcon(),并針對使用 android.printservice.PrinterDiscoverySession.onRequestCustomPrinterIcon()請求圖示的情況設定回調來顯示源自網絡的圖示

此外,您還可以通過調用PrinterInfo.Builder.setInfoIntent() 提供按列印功能,以顯示其他資訊。

您可以通過分别調用 android.printservice.PrintJob.setProgress()和 android.printservice.PrintJob.setStatus()在列印任務通知中訓示列印任務的進度和狀态。

如需有關這些方法的詳細資訊,請參閱可下載下傳的 API 參考。

FrameMetricsListener API

FrameMetricsListener API 允許應用監測它的 UI 渲染性能。 API 通過公開流式傳輸 Pub/Sub API 來提供此能力,以傳遞應用目前視窗的幀計時資訊。 傳回的資料相當于 adb shell dumpsys gfxinfo framestats 顯示的資料,但不限定于在過去的 120 幀内。

您可以使用 FrameMetricsListener 來衡量生産中的互動級 UI 性能,無需 USB 連接配接。 API 允許在比 adb shell dumpsys gfxinfo 更高的粒度上收集資料。 因為系統可以從應用中的特定互動中收集資料,是以更高的粒度變得可行;系統不需要采集關于完整應用性能的全局概要或清除任何全局狀态。 您可以使用這種能力來針對應用的真實使用案例收集性能資料和捕捉 UI 性能回歸。

若要監測一個視窗,實作 FrameMetricsListener.onMetricsAvailable() 回叫方法,并在視窗上注冊。 如需了解詳細資訊,請參閱可下載下傳的 API 參考 中的 FrameMetricsListener 類文檔。

API 提供了一個包含計時資料的 FrameMetrics 對象,其渲染子系統會在一幀長度内報告各種裡程碑。支援的名額有:UNKNOWN_DELAY_DURATION、INPUT_HANDLING_DURATION、ANIMATION_DURATION、LAYOUT_MEASURE_DURATION、DRAW_DURATION、SYNC_DURATION、COMMAND_ISSUE_DURATION、SWAP_BUFFERS_DURATION、TOTAL_DURATION 和 FIRST_DRAW_FRAME。

虛拟檔案

在較早的 Android 版本中,您的應用可以使用存儲通路架構來允許使用者從他們的雲存儲帳戶中選擇檔案,如 Google 雲端硬碟。 但是,不能表示沒有直接位元組碼表示的檔案;每個檔案都必須提供一個輸入流。

Android N 在存儲通路架構中增加了“虛拟檔案”的概念。 虛拟檔案功能可以讓您的 DocumentsProvider 傳回可與 ACTION_VIEWIntent 使用的檔案 URI,即使它們沒有直接位元組碼表示。 Android N 還允許您為使用者檔案(虛拟或其他類)提供備用格式。

為獲得您的應用中的虛拟檔案的 URI,首先您應建立一個 Intent 以打開檔案選擇器 UI。 由于應用不能使用 openInputStream() 方法來直接打開一個虛拟檔案,是以如果您包括了 CATEGORY_OPENABLE 類别,您的應用不會收到任何虛拟檔案。

在使用者選擇之後,系統調用onActivityResult()方法。 您的應用可以檢索虛拟檔案的URI,并得到一個輸入流,這表現在以下片段中的代碼。

// Other Activity code ...

  final static private int REQUEST_CODE = 64;

  // We listen to the OnActivityResult event to respond to the user's selection.
  @Override
  public void onActivityResult(int requestCode, int resultCode,
    Intent resultData) {
      try {
        if (requestCode == REQUEST_CODE &&
            resultCode == Activity.RESULT_OK) {

            Uri uri = null;

            if (resultData != null) {
                uri = resultData.getData();

                ContentResolver resolver = getContentResolver();

                // Before attempting to coerce a file into a MIME type,
                // check to see what alternative MIME types are available to
                // coerce this file into.
                String[] streamTypes =
                  resolver.getStreamTypes(uri, "*/*");

                AssetFileDescriptor descriptor =
                    resolver.openTypedAssetFileDescriptor(
                        uri,
                        streamTypes[0],
                        null);

                // Retrieve a stream to the virtual file.
                InputStream inputStream = descriptor.createInputStream();
            }
        }
      } catch (Exception ex) {
        Log.e("EXCEPTION", "ERROR: ", ex);
      }
  }