Android Q Labs | Jetpack 更新

我是來自開發者關係部的工程師劉亮恩,今天我爲你們帶來兩週前公佈的 Jetpack Library,一個叫 Jetpack Compose,另外一個叫 CameraX,前者是幫助開發者編寫用戶界面的一個 Supply Library,後者是幫助開發者編寫相機功能和應用的 Supply Library。java

Jetpack Compose

兩個重要的更新是14年的 Recycler View 和17年的 Constraint Layout。android

Google Sooner 是咱們在07年發佈的一款分辨率爲320*240的手機。然而把這個分辨率放到今天的 Pixel 上,這塊分辨率區域的大小和圖上 Pixel 的視頻窗口差很少。Android 1.0 到如今已經11年了,然而和用戶界面上沒有太大變化和改善。async

UI toolkit

咱們常常聽到開發者反饋,他們要求把 UI toolkit 從系統層面分割出來。舉例來解釋,假現在天咱們在 Android 的系統上面找到一個 UI Bug,咱們的 Android 團隊要進行修復,修完之後把修復放到咱們的 fame 裏面,因此最快也要等到下一年的新的 Android 更新,修復纔會正式出現。因此再小的修復也要等待1-2年時間,這是個很大的問題。在今年的 IO 上,咱們發佈了一個用戶界面的庫。函數

如今來看咱們 Android 系統的 toolkit 中存在的問題。假若有在 AOSP 上看過咱們 view.java 代碼文件的話,它的代碼接近3萬行,能夠想象在這麼大的一個 class 裏面進行維護會有多麼困難。post

你們對 Spinner 應該不陌生,其字面意思是旋轉體,但在 Android 系統中它卻表明一個 droplist;相似的例子還有 Button。測試

Android 的開發團隊,不光要負責 java 代碼的編寫,還要處理各式各樣的 xml 文件。google

Jetpack Compose(Pre-Alpha!) 組合性

Jetpack Compose 是咱們參考當下流行的一些有關用戶界面的 Library 寫了一個 Support Library 來幫助開發者寫一些簡單的開發者用戶界面。3d

它是由一系列的 Jetpack UI widgets 所組成,用 Kotlin 寫成,經過 Compose 寫成的界面與用第三方 Library 寫成的界面徹底兼容。但目前還處於試驗階段,不要把 Compose 生成的界面放入大家的應用中。cdn

Jetpack Compose 代碼示範

用函數來表示 UI

用 Jetpack Compose 寫 Activity 很是簡單,只須要在 setContent 函數中直接把 Jetpack Compose 的函數調用便可。視頻

使用基本的組合 UI 去製造複雜的組合 UI

用 ScrollingList 把 stories 裏的每一層傳到下一層。

在這個 StoryWidget 中,有一個帶有 imageUri 的數據。咱們能夠寫一個 asyncLoad 函數,等圖片下載好之後再把它放到 imageUri 裏面。

能夠注意到,從 StoryWidget 到 TextWidget 中間隔了 Card、Column、Padding 和 Text 4層。

Top-down Data Flow

在 NewsFeed 函數中,從參數拿到 story,而後把每個 story 裏的數據傳到下一層,好處在於在每個 Widget 裏它只會管本身從參數獲得的數據,並且不須要從別處拿數據,確保了每個 Widget 裏的重用性,進而確保了 UI 的重用性。

假如用戶在 Widget 上有後續的操做該如何處理呢? 因爲 Kotlin 的特性,能夠把回調的函數做爲一個匿名的函數傳到下一層,這樣寫起來的話,只須要調用傳進來的匿名函數便可。

數據由頂至底一層一層往下傳,事件則是一層一層往上傳。

View Compatibility

只須要在函數上方加一個 @GenerateView 的標記,立刻會變成 Compose。

再把 greeting_name 放到 GreetingView 裏面,就直接用 findViewById 把 view 拿出來,與如今 Java 中調用 View 的方法同樣。

若你們對這個庫感興趣,請訪問: 相關網址

Jetpack CameraX

五年過去了,大多數開發者仍在使用 Camera 1 API。

適配性

CameraX 能支持 Android 5.0 以上的手機,這已經涵蓋了市面上90%以上的設備。此外 CameraX 的底層實際上仍是使用 Camera 2的,因此CameraX 在 Camera 2 的手機上運行得很好。

效果一致性

CameraX 能保證在不一樣設備上的效果一致。在 Google 總部有一個 CameraX test lab,擁有50到100臺市面上的熱門機型作測試,確保了在不一樣機型上面 CameraX 的運行沒有問題。

使用方便

使用 CameraX 時只需管理拍照場景,而不須要管理相機的接口和硬件等。

目前的 Alpha 版包括了3個場景:預覽、照片元數據分析以及簡易拍照。

使用 CameraX,開發者沒必要糾結不一樣設備兼容性的問題。

Preview

建立場景須要先建立 Config。

預覽的話則須要先建立預覽的 Config。

在預覽場景中,爲了讓數據顯示在屏幕上,在預覽中會有回調,給出 SurfaceTexture 的回調。開發者能夠把它放到 GL renderer 上面。

最後須要將這個預覽場景鏈接到 LifecycleOwner 上面。過去寫 Camera 代碼時,須要手動管理 Lifecycle;可是使用 Camera X後,只須要將 Lifecycle 和 CameraX 使用場景聯繫在一塊兒,則 Lifecycle 將由 CameraX 進行管理。

Image Analysis

Image Capture

CaneraX Extebsions

在今年 IO 上,除了 CameraX Core 部分,咱們還發布了 CameraX Extensions 部分。

咱們已和手機廠商合做,將大光圈、夜景、HDR 和美顏這樣的功能開放給第三方開發者。

若要實現以上功能,只須要以下兩行代碼:

下面是咱們和三星合做在他們手機上採用 CameraX 後拍出來的圖片效果對比圖。

Recap

以上是今天我分享的全部內容,謝謝你們。

Android Q Labs 直播專題頁面

Android Q Labs 開場演講

Android Q 有哪些更新

Android Q 現代化您的應用

後臺 Activity 啓動的限制

Android Q 分區存儲

Android Q 手勢導航

Android Q 在摺疊屏設備的適配

通用系統映像介紹

Google Play 商店政策

Android Q 地理位置權限變動

Android Q 深色主題

Android Q Labs 總結演講

相關文章
相關標籤/搜索