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 总结演讲