在上週的世界行動通訊大會 (Mobile World Congress) 上,我們看到由開發者、裝置廠商以及晶片合作伙伴組成的 Android 生態系統不斷為全球使用者創造美妙體驗。
今天,我們要向各位介紹下一個版本的作業系統 —— Android P 的首個開發者預覽版。該版本早期僅面向開發者釋出,每一位開發者都是我們最信任的測評人。及時獲取您的反饋意見對我們至關重要,我們會根據您的反饋優化平臺來更好地滿足您的開發需求。希望您可以儘早著手試用 Android P 預覽版的新功能和新 API,並把您的想法和建議通過留言的方式及時告訴我們。
預覽版的首發只是第一步 —— 我們在五月的 Google I/O 大會上將會有更多的分享,敬請關注!
值得在您的應用中嘗試的新功能
這裡簡要介紹一下這個開發者預覽版中幾項有趣的新功能,同時我們希望大家嘗試後提供反饋。
使用 WiFi RTT 進行室內定位
精確室內定位一直是應用開發者面臨的一個長期挑戰,但它為定位服務提供了新的機會。Android P 為 IEEE 802.11mc WiFi 協議新增了平臺支援 (也稱為 WiFi 往返時間,RTT),這可以讓您在應用中使用室內定位。
擁有硬體支援的 Android P 裝置可以讓您的應用使用 RTT API 測量與附近 WiFi 接入點 (AP) 的距離,裝置不需要連線到 AP 便可以使用 RTT。為了保持隱私,只有手機能夠確定距離,AP 無法做到這一點。
通過測量從裝置到三個或更多 AP 的距離,您可以以 1 到 2 米的精度確定裝置位置。這種精確度允許您建立更多新的體驗:室內導航、基於位置的細粒度服務,例如,模糊語音控制 ( “開啟這裡的燈” ) ;基於位置的資訊服務 ( “這些優惠是針對這個產品的嗎?” )。
凹口螢幕的支援
現在應用可以充分利用最新的全面屏裝置來展示內容。我們在 Android 平臺加入了對凹口螢幕的支援,並提供 API 供您使用,從而管理內容展示方式。
本功能可以在應用中無縫工作,系統會管理狀態列的高度從而將您的內容與裁切區域分開。如果您擁有重要的沉浸式內容,則還可以使用新的 API 檢視裁切形狀並建立全屏佈局。您可以呼叫 getDisplayCutout() 來判斷本地裝置是否具有凹口螢幕,然後再確定裁切區域的位置和形狀。平臺新增了一個新的視窗布局屬性 layoutInDisplayCutoutMode 讓您告訴系統如何以及何時將您的內容相對於裁剪區域進行佈局。
我們加入開發者選項來模擬任意裝置上的裁切畫面,從而簡化凹口螢幕支援在您應用上的構建以及測試流程。我們建議您針對畫面裁切功能進行應用測試以確保內容顯示無誤。
△ 內含沉浸式內容的應用可以使用帶裁切區域的全屏顯示功能。
訊息通知的改進
在 Android P 中,我們特別重視改進通知的可視性和功能性。全新的 MessagingStyle 通知突出強調了來信人以及您可採用的回覆方式。您可以顯示對話,附加照片和表情,甚至使用智慧回覆。具體細節請檢視文末相關連結。
△ 在 MessagingStyle 通知中,您可以顯示對話和智慧回覆 (左圖),甚至新增圖片和表情 (右圖)。
多攝像頭 API
現在,在執行 Android P 的裝置上您可以通過兩個或更多實體攝像頭同時訪問視訊流。所以您可以在具有雙前置或雙後置攝像頭的裝置上,實現單攝像頭無法實現的創新功能:如無縫變焦、散景和立體視覺。該 API 還允許您呼叫可以在兩臺或更多臺攝像頭之間自動切換的邏輯或混合攝像頭視訊流。支援多攝像頭的 Android P 裝置將在未來一年面市,我們期待您的令人振奮的新創意。
攝像頭的其他改進還包括:利用新的會話引數來有效減少初始捕捉時的延遲,表面共享技術讓攝像頭客戶端無須重啟視訊流便可處理各種使用情況。此外,我們還新增了基於顯示器的閃光燈支援以及 API 和 OIS 時間戳的訪問許可權,以實現應用層面的影像穩定和特效。
用於點陣圖和 drawable 的 ImageDecoder
Android P 引入了一種更簡單的方法來將影像解碼為點陣圖或 drawable,即用 ImageDecoder 替代了 BitmapFactory。ImageDecoder 允許您從位元組緩衝區、檔案或 URI 建立點陣圖或 drawable。它比 BitmapFactory 多出了幾個優勢,包括對精確縮放的支援,單步解碼至硬體儲存器,對解碼後處理的支援,以及對動畫影像的解碼。
通過呼叫 setResize() 時指定目標尺寸,您可以解碼並縮放到一個確切的大小。您還可以呼叫 getSampledSize() 以特定取樣率獲取影像尺寸,然後縮放到這些尺寸。如果您想要對影像進行後期處理 (例如應用圓角蒙版或更復雜的效果) ,您可以給 ImageDecoder 傳遞任何 android.graphics.PostProcessor。您也可以使用 ImageDecoder.decodeDrawable() 直接建立 drawable。如果編碼影像是動畫 GIF 或 WebP,則返回的 drawable 是新加入的 AnimatedImageDrawable 的一個例項。
HDR VP9 視訊、HEIF 以及媒體 APIs
Android P 增加了對 HDR VP9 Profile 2 的內建支援。現在,您可以在支援 HDR 的裝置上,把啟用 HDR 功能的視訊內容從 YouTube、Play Movies 等資源站點上分享給您的使用者。我們還新增了對 HEIF 影像編碼的支援,這種格式被廣泛使用,改善了照片壓縮效果,並減少了所需的儲存空間和網路流量。一旦確定您的應用與該資料格式相容,可用於分享或者顯示,不妨嘗試利用 HEIF 為影像儲存的格式。此外,您還可以通過 ImageDecoder 和 Bitmap Factory 將 jpeg 檔案轉化為 heic 檔案,從 jpeg 檔案中獲取點陣圖。您亦可使用新支援庫 alpha 版本中的 HeifWriter,從字 YUV 節緩衝區、表面以及點陣圖中寫入 HEIF 靜態影像。
同時,我們也正在加強和重構媒體 API,以使它們更易於開發和整合,請留意今年晚些時候更具體的釋出內容。
JobScheduler 中的資料費用敏感度
JobScheduler 是 Android 的核心服務,幫助您在Doze、App Standby 和 Background Limits 狀態更改時,更好地管理定時任務及工作。在 Android P 中,JobScheduler 可以更好地為使用者處理與網路相關的任務,並與運營商單獨提供的網路狀態訊號相協調。
任務現在可以宣告其估計的資料大小、訊號預取以及指定詳細的網路要求 —— 運營商可以報告網路狀況是擁塞還是不計量,然後,JobScheduler 會根據網路狀態管理工作。例如,當網路擁塞時,JobScheduler 可能推遲大型網路請求。而在網路可以不計量使用時,則可以執行多種預載入作業 (例如,預讀標題) 來改進使用者體驗。
新增任務時,嘗試使用 setEstimatedNetworkBytes()、setIsPrefetch() 和 setRequiredNetwork() 來幫助 JobScheduler 妥善處理工作。執行作業時,請務必使用 JobParameters.getNetwork() 返回的 Network 物件,否則您將隱式地使用裝置的預設網路,該網路可能不符合您的要求,從而導致意外的資料使用。
神經網路 API 1.1
我們在 Android 8.1 中引入了神經網路 API ,以加速 Android 上裝置內建的機器學習。在 Android P 中,我們對這個 API 進行了擴充套件和改進,增加了對 9 個新操作的支援,它們分別是 Pad、BatchToSpaceND、SpaceToBatchND、Transpose、Strided Slice、Mean、Div、Sub 和 Squeeze。如果您擁有 Pixel 2 裝置,則 DP1 版本現在包含一個帶加速的 Qualcomm Hexagon HVX 驅動程式,可用於量化模型。
自動填充的改進
在 Android P 中,我們繼續根據使用者和開發者的反饋改進自動填充框架。除了主要的 Bug 修正之外,此版本還包含新的 API,允許密碼管理程式 (Password Manager) 改進 Autofill 使用者體驗,例如更好的資料集過濾,輸入清理和相容模式。尤其值得一提的是,相容性模式對使用者體驗作出了很大的改善,因為在還沒有完全自動填充支援的應用程式中它允許密碼管理員採用基於輔助功能的方法,並且不會對效能或安全性造成影響。 所有新功能的詳細資訊請檢視文末相關連結。
用於 NFC 支付和安全交易的 Open Mobile API
Android P 將 GlobalPlatform Open Mobile API 的實現新增到 Android 中。在支援的裝置上,應用可以使用 OMAPI API 訪問 Android 裝置上的安全元素 (SE) ,以啟用智慧卡支付等安全服務。硬體抽象層 (HAL) 提供了必要的 API,用於列舉多種可用的 SE (如 eSE,、UICC 等) 。
不斷加強 Android 的基礎
在 Android P 中,我們將一如既往地致力於把 Android 打造成為最佳的開發平臺。
應用安全
在 Android P 中,我們正在轉向更一致的使用者介面 (UI),以便跨應用和裝置進行指紋驗證。Android 現在提供了一個標準系統對話方塊,以提示使用者觸控指紋感測器,並且在文案和位置管理方面會根據不同的裝置做相應的匹配。同時,應用可以使用新的 FingerprintDialog API 觸發系統指紋對話方塊。我們建議您儘快切換到這個新的系統對話方塊。
我們一直致力於將所有網路流量從明文 (未加密的 HTTP) 轉向 TLS,我們還將更改網路安全性配置 (Network Security Configuration) 的預設值,以阻止所有明文流量。如果您正在使用網路安全性配置,請通過 TLS 建立連線,除非您明確選擇在特定域名使用明文傳輸。
使用者隱私
為了更好地保證隱私,Android P 限制所有處於空閒狀態的應用對話筒、攝像頭和所有 SensorManager 感測器的訪問。當一個應用的 UID 空閒時,麥克風將會報告系統 “無音訊訊號”,感測器將會停止報告事件。應用使用的攝像頭也會斷開連線,如果應用嘗試使用它們,則會生成錯誤。在大多數情況下,這些限制不會為現有應用帶來新的問題,但我們仍然建議您從應用中移除此類感測器請求。
從長遠來看,我們正在努力為每個網路中對應的 MAC 地址隨機化提供支援。 在有支援的 Android P 裝置上,您可以通過新的開發者選項啟用此功能的實驗版,以進行測試。
Android P 還讓使用者控制是否允許訪問平臺 build.serial 識別碼 (它被放在 READ_PHONE_STATE 許可權裡) 。自 Android 8.0 以來,直接訪問此識別碼的功能已被棄用。想要訪問 build.serial 識別碼的話,您可以使用 Build.getSerial() 方法。
ART 效能提升
我們將繼續致力於通過 ART 執行時改善應用效能和效率提升。我們擴充套件了 ART 對執行配置檔案的使用,以優化應用並減少已編譯應用程式碼的記憶體佔用量。ART 現可使用配置檔案資訊在裝置上重寫 DEX 檔案,在多個人氣的應用中記憶體佔用減少高達 11%。我們期望這樣藉此減少系統 DEX 記憶體使用量並加快應用啟動時間。
Kotlin 優化
Kotlin 以經成為一流的 Android 開發語言。 如果您還未嘗試,還在等什麼呢?我們還在 Kotlin 效能方面進行長期投入,同時繼續加大對 Kotlin 的支援,包括優化 Kotlin 程式碼效能。在 Android P 中,您會看到這項工作的第一個成果:我們已經改進了一些編譯器優化,尤其是那些針對迴圈的編譯器優化,以實現更好的效能。我們還將繼續與 JetBrains 合作,優化 Kotlin 生成的程式碼。只需保持更新 Android Studio 上的 Kotlin 外掛,您就能獲得所有最新的 Kotlin 效能更新。
電耗優化
在 Android P 中我們繼續優化 Doze、App 待命模式以及後臺限制,進一步改善電池壽命。請務必以這些模式為應用進行測試並分享反饋。
針對現代 Android
Android P 由我們的長期戰略所塑造,以實現 Android 平臺基礎和執行在其上的應用的現代化。正如我們最近宣佈的那樣 ,Google Play 將要求所有應用在 2018 年 11 月之前針對 Android Oreo (targetSdkVersion 26 或更高版本) 進行更新,並支援將在 2019 年提供 64 位支援。
在做出這些改變的同時,Android P 將在安裝針對 Android 4.2 之前的平臺 (targetSdkVersion 小於17) 的應用時通過對話方塊向使用者發出警告,未來平臺將會繼續提高版本下限。我們鼓勵每一個 Android 開發者現在就著手計劃遷移至 API 26,並儘快開始遷移工作。我們期待著您的應用能夠充分利用現代 Android,併為使用者帶來更好的體驗。
通過公開 API 增強應用相容性
使用者和開發者面臨的一個關鍵問題是應用相容性 —— 確保應用從一開始就支援新平臺,並讓使用者遠離崩潰風險,以及開發者不再需要針對相容性問題做緊急更新。從 SDK 到 NDK 都使用 Android 公開 API 的應用擁有較好的相容性,而使用私有 Android 介面和庫的應用則相容性較差。
因此,隨著 Android P 的到來,我們開始逐步限制對特定非 SDK 介面的訪問許可權,並要求開發者 (包括 Google 內部的應用團隊) 使用公開 API 裡的替代介面。如果您沒有公開的替代介面可用,請在文章下方留言 “【無公開 API 替代介面】+ 問題描述 “,我們希望確保開發者儘量流暢地走完這個過程,所以我們會根據您的反饋,確保新版本釋出時隻影響那些可以輕鬆被開發者遷移到公共替代介面的 API。
簡單幾步開始使用
首先, 使您的應用相容,讓您的使用者無縫過渡到 Android P。只需下載裝置系統映像或模擬器系統映像,安裝您當前的應用並測試。您的應用應該能夠流暢執行,並妥善處理應用行為變動。在做出必要更新後,我們建議您立即釋出到 Google Play,不必更改應用的平臺版本。
請記住,您不須要擁有受支援的 Pixel 裝置即可針對 Android P 進行測試或開發。對於大多數情況,我們強烈建議在 Android 模擬器上設定 Android 虛擬裝置作為測試環境。如果您最近沒有嘗試過模擬器,請務必試試。您會發現它速度非常快,可以在 6 秒內啟動,使用方便,甚至可以模擬下一代螢幕。例如,長螢幕和帶攝像頭裁切區域的異型全面屏。
接下來, 將您應用的目標平臺更改為 “P”,並使用完整的 Android P 體驗執行。將應用的 targetSdkVersion 設定為 “P” 和 compileSdkVersion 設定為 “android-P”,構建並測試。請務必閱讀針對 P 的應用行為變更,以查詢您想要測試並可能需要調整的地方。
準備就緒後,深入 Android P 並瞭解在您的應用中可使用的諸多新功能和 API 。為了更方便地探索新的 API,請檢視 API 差異報告以及 Android P API 參考。有關預覽版的時間線和支援資源的詳細資訊,請檢視文末 “Android P 開發者預覽版” 連結。
要開始圍繞 Android P 進行開發工作,請將 P Developer Preview SDK 和工具下載到 Android Studio 3.1 或使用最新的 Android Studio 3.2 Canary 版本。此外,我們還會發布 28.0.0 支援庫的 alpha 版本供您試用。
接下來會有什麼?
本次推出的 Android P 開發者預覽版包含一個帶有系統映像的更新 SDK,用於在官方 Android 模擬器、Pixel、Pixel XL、Pixel 2 和 Pixel 2 XL 裝置上進行測試。
我們計劃在整個預覽階段中定期更新預覽系統映像和 SDK。此初始版本僅供開發者使用,不適用於日常或終端使用者,因此僅限手動下載和安裝 (請檢視文末 “Android P 開發者預覽版” 連結)。
隨著我們逐步接近推出最終產品,也將會邀請消費者前來嘗試,屆時我們將通過 Android Beta 開放註冊。請繼續關注我們釋出的細節,但請注意,Android Beta 目前不適用於 Android P。
您的反饋意見對我們來說非常重要,所以熱切歡迎您留言聯絡我們,分享您的想法、建議或問題。