Android P 新特性大起底 - 李寄超 | JTalk 第六期

JTalk發表於2018-05-25

編者按:本文系 Google 的李寄超講師,在掘金技術社群主辦的《中美技術人才矽谷大講堂 | JTalk 掘金線下活動第六期》 活動上的分享整理。掘金 JTalk 目前已舉辦6期,每期 JTalk 會邀請垂直行業的優秀工程師來分享優秀的實踐經驗,技巧方法。旨在為開發者提供線下技術交流互動機會,幫助開發者成長。

李寄超現就職於 Android 開發團隊。畢業於弗吉尼亞大學,從事 Android 系統及軟體開發多年,曾在 Google Play 、 Search 和 Payment 負責多個專案,並多次參加展會推廣 Android 以及 Google Play 。熱衷於瞭解開發者以及推廣 Android 生態。

What's new in Android

Android P 新特性大起底 - 李寄超 | JTalk 第六期

我們先來簡單回顧一下今年 I/O Keynote 都講了什麼?

  • Android Jetpack 完美相容 Kotlin 語言,可利用 Android KTX 大幅節省程式碼量,幫助開發者加快應用開發速度。
  • Android App Bundle 在 Android Studio 中,現在可以構建包含任何裝置上應用所需一切的應用軟體包 — 支援所有語言、每種裝置螢幕尺寸以及每種硬體架構。然後,當使用者下載應用時,Google Play 全新動態交付將會交付與使用者裝置匹配的程式碼和資源。
  • Slices 是一種 Google 平臺上適用於各種不同 Android 版本的介面模板,可在您的應用中顯示一組豐富的動態互動內容。
  • Actions 是 Android P 當中的新功能,可以提供一些很細微的關於 App 內部功能的提示。
  • Android Studio 3.2 Canary 現已上線,大家有興趣的話可以試一下,包含了 Android App Bundle
  • ML Kit

接下來,我們說一些在本屆 I/O 上沒有特別細講的 Android P 的功能

通知

Android P 新特性大起底 - 李寄超 | JTalk 第六期

首先是通知,我們在 Android P 上做了許多通知上的優化,主要集中在 UI 上。一方面是圓角的優化,另一方面是過去的一些空隙會更大一些。此外我們還專門針對對話,也就是聊天的應用做了一些特別優化:你可以直接在通知中聊天,也可以直接在通知中放大檢視圖片。下一個是 Remote Input ,相當於你可以在裡面通知裡面設定快捷回覆語句然後直接傳送。另外我們還對通知中的動畫進行了優化,現在通知中的動畫可以無縫銜接。

Android P 新特性大起底 - 李寄超 | JTalk 第六期

圖上的這些程式碼大家不必刻意去記與背,我們對於聊天方面進行的一些優化,這裡有一個 create new person 和 create image message,最主要的是 MessagingStyle 可以表示出我們要加入一個怎麼樣的 message,這段程式碼從頭到尾寫起來既快捷又簡單。

通知攔截

Android P 新特性大起底 - 李寄超 | JTalk 第六期

之前經常有使用者向我們反映,有些通知會突然來很多,很煩人也不知如何去掉,所以我們在 Android P 中會讓使用者可以更方便的攔截通知,但這對於開發者來說並不是一個特別好的訊息。在此我們提醒開發者一定記得用 channels,即 Android O 開始的 notification channels,相當於所有通知不僅僅是來自於你的 App ,它可能來自於很多不同的方面。比方說有一個外賣 App ,它的通知內容可能包含賬單資訊、配送提醒,這些都是不同的類別,使用者可以自行選擇通知中顯示的內容類別,即自行選擇開啟/關掉 channels,而不必關掉整個 app 的所有通知。 但有一點大家要注意一下,Android P 中不再給使用者更加靈活自由地去關閉這些 notifications,所以大家更應該去用 channels。

“劉海”螢幕支援

Android P 新特性大起底 - 李寄超 | JTalk 第六期

Android P 對“劉海”螢幕是原生支援的,具體的API是 WindowInserts.getDisplayCutout() 。這個API會告訴你凹口形狀、大小以及位置。目前共支援四種劉海。

Android P 新特性大起底 - 李寄超 | JTalk 第六期
上圖是具體的“劉海” API,API也是很直觀地將”劉海“位置簡化成左、右、上、下。

光學防抖

Android P 新特性大起底 - 李寄超 | JTalk 第六期
我們在 Android P 的 Camera API 中加入了原生光學防抖,這個類叫作 OIS Samples 。這個原生 API 原本是隻能在 Camera 裡能用的,現在所有的開發者都可使用。它的原理是提供很多張 Samples,每一個 Sample 都會有它自己的位移和時間戳。不僅可以用它做光學防抖,還可以做其他特效這就由開發者自己決定了。

外接閃光燈支援

Android P 新特性大起底 - 李寄超 | JTalk 第六期

現在已在 CameraMetadata 中加入了對外接閃光燈的支援,在照相中能提供更好地支援。

多攝像頭支援

Android P 新特性大起底 - 李寄超 | JTalk 第六期

現在有的手機有兩個前置攝像頭,或者兩個後置攝像頭,我們現在提供API讓你將兩個攝像頭相連線變成一個邏輯攝像頭。假如兩個攝像頭不在一個焦距上,你可以將兩個攝像頭的焦距進行無縫銜接。可以通過 Session 和 Surface 共享,不必重新開始,從而減低整體延遲。

新的影像解碼器:ImageDecoder

Android P 新特性大起底 - 李寄超 | JTalk 第六期

ImageDecoder 相較於以前的 BitmapFactory 效能更加,支援的地方更多。AnimatedImageDrawable 可以直接顯示動圖。

Android P 新特性大起底 - 李寄超 | JTalk 第六期

這相當於是一個 createSource ,每一個因為都是 ImageDecoder,所以可以有 HeadProcessor 也可以有 PostProcessor,這些可以在解析的頭和尾進行相應的處理。具體解析詳見 Documentation。

媒體

Android P 新特性大起底 - 李寄超 | JTalk 第六期

我們現在開始原生支援 HDR VP9 。 HEIF 是一個比 JPEG 更有效率的圖片格式,它可以在同體積下比 JPEG 多一倍的畫素。

JobScheduler

Android P 新特性大起底 - 李寄超 | JTalk 第六期

舉個例子,在網路阻塞的情況下,JobScheduler 可以很智慧地暫緩上傳直到網路暢通。

Neural Networks API 1.1

Android P 新特性大起底 - 李寄超 | JTalk 第六期

我們在之前的1.0 版本基礎上增加了九個新運算,如果對這方面感興趣可以多加留意。

Kotlin + Jetpack

Android P 新特性大起底 - 李寄超 | JTalk 第六期

Android P 新特性大起底 - 李寄超 | JTalk 第六期

上方是原 Kotlin 程式碼和使用了 Jetpack 以後的程式碼。同時也不難看出,相較於 Java,Kotlin 的程式碼風格更加簡潔。

Baseline Distance

Android P 新特性大起底 - 李寄超 | JTalk 第六期

上圖的這兩個距離以往很難調整,因此我們引入了 Baseline Distance。

Android P 新特性大起底 - 李寄超 | JTalk 第六期

以上方這段程式碼距離,只靠兩行程式碼就把之前令人頭疼已久的行距問題。

Magnifier 放大鏡

Android P 新特性大起底 - 李寄超 | JTalk 第六期

Magnifier 實現起來非常簡單,具體程式碼如下。

Android P 新特性大起底 - 李寄超 | JTalk 第六期

加強隱私保護

Android P 新特性大起底 - 李寄超 | JTalk 第六期

在 Android P 之後,程式如果處在後臺,是無法使用麥克風、攝像頭和感應器的。相當於給麥克風空白音,防止不良應用在後臺竊聽;攝像頭在後臺,會報錯 GeneralError 無法連線。加強隱私保護是 Android P 中一個相當大的核心。

電耗優化

Android P 新特性大起底 - 李寄超 | JTalk 第六期

我們在 Android P 中對電耗也進行了相應優化,最主要的兩個新功能,一個是應用後臺限制,另一個是應用待機分組。

Android P 新特性大起底 - 李寄超 | JTalk 第六期

在 Activity Manager 中,開發者可以找到自己的應用是否被使用者限制。

Android P 新特性大起底 - 李寄超 | JTalk 第六期

這四個分組是根據使用者的習慣,系統來決定把應用放進哪個組。

Android P 新特性大起底 - 李寄超 | JTalk 第六期

私有API

Android P 新特性大起底 - 李寄超 | JTalk 第六期

私有 API 在Android P 中非常重要,可能會影響到各位開發者。 一些私有 API 為實現公開SDK 文件中未實現的功能,很多會用反射或者其他原理來呼叫這些私有 API 。這些私有 API 最大的問題在於每次 Release 的時候,比如 Android N 到 Android O,或是 Android O 到 Android P,由於它們並沒有在官方文件中出現。所以對於這些私有 API ,我們預設認為 API 不再在指示範圍之內,可以任意地修改,或者這些 API 直接消失。這代表著每次使用者升級時,這些應用都會莫名其妙的崩潰,那這個對於使用者和開發者來說,都是一件不好的事情,開發者還需重新測試。 所以從 Android P 開始,我們會逐步限制私有 API 的使用,希望大家儘快將 私有 API 轉成公有 API 。

Android P 新特性大起底 - 李寄超 | JTalk 第六期

我們在 VM 中做了一些修改,會辨別是在呼叫私有 API ,如果是系統或者系統應用的話可以放行;如果是第三方應用而非系統/系統應用,若觸發黑名單規則會直接崩潰。此外還有兩個名單,即淺灰名單和深灰名單。希望大家以後在使用淺灰名單中那些沒有可被公有 API 替換的私有 API 時,給我們 Android 團隊以反饋。對於深灰名單,為針對應用相容, targetSDK 小於 Android P 系統的會提示系統警告,大於的則按黑名單處理。

Target SDK 遷至26

Android P 新特性大起底 - 李寄超 | JTalk 第六期

希望大家能儘快進入 Target SDK 進行更新。

以上就是我今天的分享,謝謝大家!

Android P 新特性大起底 - 李寄超 | JTalk 第六期

《中美技術人才矽谷大講堂 | JTalk 掘金線下活動第六期》 分享整理合集

Android P 新特性大起底 - 李寄超 | JTalk 第六期

阿里巴巴黑科技排程系統揭祕 - 何劍 | JTalk 第六期

如何玩轉新技術 - 潘陽 | JTalk 第六期

相關文章