page.title=適用於開發人員的 Android N meta.tags="preview", "androidn" page.tags="preview", "developer preview" page.image=images/cards/card-n-apis_2x.png @jd:body
Android N 仍在開發中,但是您現在可以透過「N Developer Preview」來試用。下面各節重點說明適用於開發人員的一些新功能。
請務必查看行為變更以瞭解哪些平台變更部分會影響您的應用程式、閱讀開發人員指南以瞭解主要功能,以及下載 API 參考資料以深入瞭解新 API 的詳細資訊。
在 Android N 中,我們將許多人要求的新多工功能引進到平台 — 多視窗支援。
使用者現在可以一次在螢幕上開啟兩個應用程式。
圖 1. 在分割畫面模式中執行的應用程式。
特別是平板電腦與其他螢幕較大的裝置,多視窗支援為您提供吸引使用者的新方式。您甚至可以在應用程式中啟用拖放功能,讓使用者便利地從應用程式拖放內容 — 這是增強您的使用者體驗的絕佳方式。
將多視窗支援新增到您的應用程式並設定它處理多視窗顯示的方式是很直接的作法。例如,您可以指定活動的最小可允許尺寸,避免使用者將活動的尺寸調整到低於該尺寸。您也可以停用應用程式的多視窗顯示,以確保系統只以全螢幕模式顯示您的應用程式。
如需詳細資訊,請參閱多視窗支援開發人員文件。
我們已重新設計 Android N 中的通知,讓它們更易於使用、速度更快。一些變更包括:
圖 2. 整合式通知與直接回覆。
如果要瞭解如何實作新的功能,請參閱通知指南。
在 Android N 中,我們新增了 Just in Time (JIT) 編譯器搭配程式碼分析工具到 ART,讓 Android 應用程式在執行時能夠持續改善其效能。JIT 編譯器補充了 ART 目前的 Ahead of Time (AOT) 編譯器,協助改善執行階段效能、節省儲存空間以及加速應用程式更新和系統更新。
設定檔指引編譯讓 ART 根據每個應用程式的實際用情形與裝置上的情況來管理其 AOT/JIT 編譯。例如,ART 會維護每個應用程式常用方法的設定檔,而且可以預先編譯和快取那些方法以獲得最佳效能。它不會編譯應用程式的其他部分,直到實際要使用這些部分時才會編譯。
除了改善應用程式關鍵部分的效能以外,設定檔指引編譯還有助於降低應用程式的整體 RAM 使用量,包括關聯的二進位檔案。此功能對於低記憶體裝置特別重要。
ART 透過對裝置電池產生最小影響的方式來管理設定檔指引編譯。它只會在裝置閒置和充電時預先編譯,這種預先工作的方式可以節省時間和電池電力。
ART JIT 編譯器的最實質好處之一是加速應用程式安裝和系統更新。即使是在 Android 6.0 上需要數分鐘來最佳化和安裝的大型應用程式,現在只需幾秒鐘就可以安裝。系統更新也會變得更快,因為不再需要最佳化步驟。
Android 6.0 引進休眠功能,這是可節省電池電力的系統模式,它會在裝置閒置時 (例如放在桌子上或抽屜中) 延後應用程式的 CPU 與網路活動。
現在 Android N 中的休眠功能更進一步進展,可在移動時節省電池電力。只要螢幕關閉一段時間且裝置拔除電源的情況下,休眠功能就會將熟悉的 CPU 與網路限制的子集套用到應用程式。這表示即使使用者將裝置放在口袋內時也可以節省電池電力。
圖 3. 休眠功能現在可套用限制,即使裝置沒有固定在一處時,也能改善電池使用時間。
當裝置使用電池時,在螢幕關閉短時間後,休眠功能會限制網路存取並延遲工作與同步處理。在短暫的維護時段中,應用程式可存取網路並執行延遲的工作/同步處理。裝置螢幕開啟或插上電源可讓裝置離開休眠狀態。
當裝置再次固定不動,且螢幕關閉並使用電池一段時間後,休眠功能會在 {@link android.os.PowerManager.WakeLock}, {@link android.app.AlarmManager} 鬧鐘和 GPS/Wi-Fi 掃描上套用完整的 CPU 與網路限制。
讓應用程式適應休眠功能的最佳做法,無論裝置在移動中或固定不動都是一樣的,所以如果您已經更新應用程式使其能夠處理休眠,就完全沒問題。如果沒有,現在就讓您的應用程式適應休眠功能。
專案 Svelte 一直努力在生態系統中讓各種 Android 裝置上系統與應用程式使用最少的 RAM。在 Android N 中,「專案 Svelte」專注於最佳化應用程式在背景執行的方式。
背景處理是大多數應用程式的必要部分。如果正確地處理,它可讓您擁有令人驚歎的使用者體驗 — 立即、快速、內容感知。如果沒有適當處理,背景處理就會不必要地耗用 RAM (與電池電力),而且影響其他應用程式的系統效能。
自 Android 5.0 開始,{@link android.app.job.JobScheduler} 就以適合使用者的偏好方式來執行背景工作。應用程式可以排程工作,同時讓系統根據記憶體、電源和連線狀況進行最佳化。JobScheduler 提供控制權和簡潔性,我們希望所有應用程式都使用它。
另一個好用的選項是 GCMNetworkManager
,它屬於 Google Play 服務的一部分,提供類似的工作排程功能,可與舊版 Android 相容。
我們會繼續擴充 JobScheduler
和 GCMNetworkManager
以滿足您的更多使用案例 — 例如,在 Android N 中,現在您可以根據內容提供者中的變更來排程背景工作。同時,我們也開始取代一些會降低系統效能 (特別是低記憶體裝置) 的較舊模式。
在 Android N 中,我們移除了三個常用的隱含廣播 — {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}、{@link
android.hardware.Camera#ACTION_NEW_PICTURE} 和 {@link
android.hardware.Camera#ACTION_NEW_VIDEO} — 因為它們會一次喚醒多個應用程式的背景處理程序,而耗盡記憶體與電池電力。如果您的應用程式收到這些廣播,請改為使用「N Developer Preview」遷移到 JobScheduler
與相關的 API。
看看背景最佳化文件,以瞭解詳細資訊。
圖 4. [設定] 中的 Data Saver。
在行動裝置的使用壽命期間,行動數據方案的費用通常會超過裝置本身的費用。對於許多使用者而言,行動數據是他們想要節省的昂貴資源。
Android N 引進 Data Saver 模式,這是一個新的系統服務,有助於降低應用程式的行動數據用量,無論是漫遊、接近帳單週期結束時或小量預付數據包。Data Saver 讓使用者控制應用程式如何使用行動數據,也讓開發人員在 Data Saver 開啟時提供更有效率的服務。
當使用在 [設定] 中啟用 Data Saver 且裝置使用計量付費網路時,系統會封鎖背景數據使用量,並指示前景的應用程式盡量使用較少的數據 — 例如,限制串流的位元率、降低影像品質、延遲開放式預先快取等等。使用者可以將特定應用程式新增到允許清單,以便即使在 Data Saver 為開啟狀態時,這些應用程式仍可在背景使用計量付費的數據使用量。
Android N 擴充 {@link android.net.ConnectivityManager} 為應用程式提供擷取使用者的 Data Saver 喜好設定與監視喜好設定變更的方法。所有應用程式應該檢視使用者是否已啟用 Data Saver 並努力限制前景與背景的數據使用量。
圖 5. 通知欄中的快速設定磚。
快速設定是直接從通知欄顯示關鍵設定與動作的常用簡單方式。在 Android N 中,我們擴充了快速設定的範圍,讓它變得更實用、更便利。
我們也為額外的快速設定磚增加了更多空間,使用者可以透過向左或向右撥動存取分頁顯示區域。我們也讓使用者能夠控制要顯示的快速設定磚與顯示位置 — 使用者只需拖放磚,即可新增或移除它們。
對於開發人員,Android N 也加入了新的 API,讓您定義自己的快速設定磚,以便使用者輕鬆存取您應用程式中的關鍵控制項與動作。
快速設定磚是專為急需或常用的控制項或動作而保留的,它不應該做為啟動應用程式的捷徑。
定義磚之後,您即可將它們顯示給使用者,使用者只需拖放這些磚,即可將它們新增到快速設定中。
如需建立應用程式磚的相關資訊,請參閱可下載之 API 參考資料中的 android.service.quicksettings.Tile
。
Android N 現在在平台中支援拒接號碼,並提供一個架構 API,讓服務提供者維護一份拒接號碼清單。預設的簡訊應用程式、預設的電話應用程式與提供者應用程式可以讀取及寫入拒接號碼清單。其他應用程式無法存取該清單。
透過讓拒絕號碼成為平台上的標準功能,Android 為應用程式提供一個一致的方式,讓它們在各種裝置上都能支援拒接號碼。應用程式可以利用的其他好處包括:
此外,透過 Android 整合行動通訊業者應用程式,表示行動通訊業者可以讀取裝置上的拒接號碼清單並為使用者執行服務端的拒接號碼,因此停止拒接號碼的來電和簡訊透過任何媒體 (例如 VOIP 端點或來電轉接) 連絡到使用者。
如需詳細資訊,請參閱可下載之 API 參考資料中的 android.provider.BlockedNumberContract
。
Android N 能讓預設電話應用程式過濾來電。電話應用程式執行的方法是實作新的CallScreeningService
,它可以讓電話應用程式根據來電的 {@link android.telecom.Call.Details Call.Details} 來執行數個動作,例如:
如需詳細資訊,請參閱可下載之 API 參考資料中的 android.telecom.CallScreeningService
。
Android N 現在可讓使用者在 [設定] 中選取多個地區設定,以便以更好的方式支援雙語言使用案例。應用程式可以使用新的 API 取得使用者選取的地區設定,然後為多地區設定使用者提供更精細的使用者體驗 — 例如以多語言顯示搜尋結果,以及不為使用者已經熟知語言的網頁提供翻譯。
除了多地區設定支援,Android N 也擴充了供使用者選用的語言選項。它為每種常用語言 (例如英文、西班牙文、法文與阿拉伯文) 提供 25 種變體。它也增加了對 100 種以上新語言的支援。
應用程式呼叫 LocaleList.GetDefault()
即可取得使用者設定的地區設定清單。為了支援擴充的地區設定數目,Android N 變更了它解析資源的方式。請務必測試並確認您的應用程式使用新的資源解析邏輯時可正常運作。
如果要深入瞭解新的資源解析行為與應該遵循的最佳做法,請參閱多語言支援。
Android N 現在在 android.icu
套件下的 Android 架構中提供一個 ICU4J API 子集。遷移很容易,大部分要承擔只是從 com.java.icu
命名空間變更為 android.icu
即可。如果您已經在應用程式中使用 ICU4J 套件組合,只要切換到 Android 架構中提供的 android.icu
API,即可顯著縮減 APK 的大小。
如果要深入瞭解 Android ICU4J API,請參閱 ICU4J 支援。
Android N 針對 OpenGL ES 3.2 新增架構介面與平台支援,包括:
EXT_texture_sRGB_decode
除外。
Android N 上 OpenGL ES 3.2 的架構 API 提供 GLES32
類別。使用 OpenGL ES 3.2 時,請務必在宣示說明檔案中使用 <uses-feature>
標籤與 android:glEsVersion
屬性宣告需求。
如需使用 OpenGL ES (包括如何在執行階段檢查裝置支援的 OpenGL ES 版本) 的詳細資訊,請參閱 OpenGL ES API 指南。
Android N 透過新的錄製 API,新增了錄製和播放 Android TV 輸入服務內容的功能。以現有的時間位移 API 為建置基礎,TV 輸入服務可以控制要錄製哪個頻道的資料、如何儲存已錄製的時段,以及管理使用者與錄製內容的互動。
如需詳細資訊,請參閱 Android TV 錄製 API。
Android for Work 為執行 Android N 的裝置增加了許多新的功能與 API。一些亮點如下所示 — 如需與 Android N 相關之 Android for Work 更新的完整清單,請參閱「Android for Work 變更」。
設定檔擁有者可以為以工作設定檔執行之應用程式指定個別的安全性查問。當使用者嘗試開啟任何工作應用程式時會顯示工作查問。成功完成安全性查問可將工作設定檔解鎖並在必要時將它解密。對於設定檔擁有者而言,ACTION_SET_NEW_PASSWORD
會提示使用者設定工作查問,而且 ACTION_SET_NEW_PARENT_PROFILE_PASSWORD
會提示使用者設定裝置鎖定。
設定檔擁有者可以使用 setPasswordQuality()
、setPasswordMinimumLength()
與相關方法,為工作查問設定各自的密碼原則 (例如,需要 PIN 的時間長度,或是否使用指紋來將設定檔解鎖)。設定檔使用者也可以使用新的 getParentProfileInstance()
方法傳回的 DevicePolicyManager
執行個體來設定裝置鎖定。此外,設定檔擁有者還可以使用新的 setOrganizationColor()
與 setOrganizationName()
方法,為工作查問自訂認證畫面。
在具有工作設定檔的裝置上,使用者可以切換工作模式。當工作模式關閉時,受管理的使用者會暫時關機,因此而停用工作設定檔應用程式、背景同步與通知。這也包括設定檔擁有者應用程式。當工作模式關閉時,系統會顯示持續的狀態圖示,提醒使用者他們無法啟動工作應用程式。啟動器會指出工作應用程式和小工具無法存取。
裝置擁有者和設定檔擁有者可確保工作應用程式一律透過指定的 VPN 連線。系統會自動在裝置開機時啟動該 VPN。
新的 DevicePolicyManager
方法是 setAlwaysOnVpnPackage()
與 getAlwaysOnVpnPackage()
。
因為系統無需透過應用程式互動即可直接連結 VPN 服務,所以 VPN 用戶端需要為「一律開啟的 VPN」處理新的進入點。正如以往,透過符合動作 android.net.VpnService
的意圖篩選器向系統指明服務。
使用者也可以使用 [設定] > [更多] > [VPN] 手動設定「一律開啟的 VPN」用戶端,這些用戶端在主要使用者中實作 VPNService
方法。
Android N 現在為新的裝置設定在歡迎畫面上直接提供「視覺設定」。這讓使用者更易於在自己的裝置上探索及設定協助工具功能,包括放大手勢、字型大小、顯示大小和 TalkBack。
將這些協助工具功能放置在更為顯眼的地方,您的使用者較可能在啟用它們的情況下試用您的應用程式。請務必儘早在啟用這些設定的情況下測試您的應用程式。您可以從 [設定] > [協助工具] 啟用它們。
此外,在 Android N 中,協助工具服務現在也可以協助行動不便的使用者觸控螢幕。新的 API 允許使用臉部追蹤、眼睛追蹤、點掃描等功能來建置服務,以滿足這些使用者的需要。
如需詳細資訊,請參閱可下載之 API 參考資料中的 android.accessibilityservice.GestureDescription
。
直接開機可加速裝置啟動時間,並讓已註冊的應用程式只能使用有限的功能 (即使在未預期的重新開機之後)。例如,如果一個加密裝置在使用者睡覺時重新開機,已註冊的鬧鐘、訊息與來電現在可以持續如常通知使用者。這也表示協助工具服務在重新啟動之後可立即使用。
直接開機利用 Android N 中以檔案為基礎的加密,能夠為系統與應用程式資料使用更精細的加密原則。系統為特定系統資料與明確註冊的應用程式資料使用裝置加密存放區。在預設情況下,所有其他系統資料、使用者資料、應用程式與應用程式資料都會使用認證加密存放區。
開機時,系統會以限制模式啟動,它只能存取裝置加密的資料,而無法對應用程式或資料進行一般存取。如果您有想要在這個模式下執行的元件,可以在宣示說明中設定旗標來註冊這些元件。重新啟動之後,系統會透過廣播 LOCKED_BOOT_COMPLETED
意圖來啟用已註冊的元件。系統會確保已註冊的裝置加密應用程式資料可供使用之後才會解除鎖定。所有其他資料都無法使用,直到使用者確認他們的鎖定畫面認證之後,才會將這些資料解密。
硬體支援的金鑰存放區為 Android 裝置上密碼編譯金鑰的建立、儲存及使用提供更安全的方法。它們可保護金鑰不受 Linux 核心、可能的 Android 弱點和從已解鎖裝置擷取的傷害。
為了讓使用硬體支援的金鑰存放區更易於使用且更安全,Android N 引進金鑰證明。應用程式與裝置外部服務可以使用金鑰證明,毫不懷疑地判斷 RSA 或 EC 金鑰組是否有硬體支援、金鑰組的屬性是哪些以及它的用法和有效性上套用哪些限制條件。
應用程式與裝置外部服務可以透過 X.509 證明憑證 (必須以有效的證明金鑰簽署) 來要求有關金鑰組的資訊。證明金鑰是 ECDSA 簽署金鑰,它在裝置出廠時就已內嵌到其中的硬體支援金鑰存放區。因此,以有效證明金鑰簽署的證明憑證可確認裝置上有硬體支援的金鑰存放區,以及該金鑰儲存區中包含之金鑰組的詳細資訊。
為了確保裝置使用安全的官方 Android 出廠映像,金鑰證明要求裝置的開機載入器對信任執行環境 (TEE) 提供下列資訊:
如需硬體支援的金鑰存放區功能的詳細資訊,請參閱硬體支援的金鑰存放區指南。
除了金鑰證明之外,Android N 還引進連結指紋的金鑰,在註冊指紋時並不會撤銷。
在 Android N 中,應用程式可以安全地自訂其安全 (HTTPS、TLS) 連線的行為,無需修改任何程式碼,方法是使用宣告式的網路安全性設定,而不是使用容易出錯的傳統程式設計 API (例如 X509TrustManager)。
支援的功能:
如需詳細資訊,請參閱網路安全性設定。
根據預設,以 Android N 為目標的應用程式只信任系統提供的憑證,而不再信任使用者新增的憑證授權單位 (CA)。以 Android N 為目標且想要信任使用者新增之 CA 的應用程式,應該使用網路安全性設定來指定信任使用者 CA 的方法。
PackageManager 類別現在支援使用 APK 簽章配置第 2 版來驗證應用程式。APK 簽章配置第 2 版是全檔案簽章配置,可透過偵測對 APK 檔案所做的任何未授權變更,大幅改善驗證速度並增強完整性保證。
為了維持回溯相容性,APK 必須先以第 1 版簽章配置 (JAR 簽章配置) 簽署,然後再用第 2 版簽章配置簽署。有了第 2 版簽章配置,如果以第 2 版配置簽署之後,以其他憑證簽署 APK,驗證會失敗。
「N Developer Preview」稍後將提供對 APK 簽章配置第 2 版的支援。
在 Android N 中,應用程式可以使用新的 API 來要求存取特定外部儲存空間目錄,包括抽取式媒體 (例如 SD 卡) 上的目錄。新的 API 大幅簡化應用程式存取標準外部儲存空間目錄 (例如 Pictures
目錄) 的方法。相片應用程式之類的應用程式可以使用這些 API 而非使用 READ_EXTERNAL_STORAGE
,這樣能夠授予對所有儲存空間目錄的存取權,或是使用「儲存空間存取架構」,讓使用者可以瀏覽到目錄。
此外,新的 API 也簡化了使用者授予外部儲存空間存取權給您的應用程式時所需採取的步驟。當您使用新的 API 時,系統會使用簡單的權限 UI,清楚地詳細說明應用程式要求存取的目錄。
如需詳細資訊,請參閱限定範圍目錄存取開發人員文件。