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