zl程序教程

您现在的位置是:首页 >  其他

当前栏目

2022年Google开发者大会纪录

Google开发者 2022 大会 纪录
2023-09-11 14:18:53 时间

前言:

有幸参加过2019谷歌开发者大会,当时就让我相当的震撼。给我的感觉,谷歌是一家技术赋能的企业,更是一家真心希望用技术改变未来的企业。时过三年,谷歌开发者大会又一次在中国召开,很幸运这一次通过CSDN又一次的获得了门票,有幸参加9月15日的开发者大会,仅以本文来进行记录。

相关转载务必注明本文链接:https://blog.csdn.net/rzleilei/article/details/126864446

2019年谷歌开发者大会纪录:Google 2019上海开发者大会一日游(安卓)_失落夏天的博客-CSDN博客

一.安卓篇

主题一.大屏设备下应用适配问题

主讲人:谷建德(谷歌开发者关系工程师)

首先介绍一下什么是大屏设备?

大屏设备指的就是平板电脑以及折叠屏手机(展开状态)这样的宽高比大于0.6的安卓设备。

分为三个维度来讲如何解决大屏设备的显示问题:

1.第三层级:基本兼容大屏设备

2.第二层级:优化在大屏设备上的显示

3.第一层级:在大屏设备上实现差异化显示

1.1.1 首先介绍第三层级,也是兼容的基础

基本要求如下:

1.用户可以完成关键流程,但用户体验并不理想

2.应用可在大屏设备下全屏运行(或多窗口模式全屏运行),但应用布局可能并不太理想。

3.基本支持外部输入设备(键盘,鼠标和触控板)

这也是最基本的要求,那么我们应该如何去做呢?

首先,要考虑到分屏模式

在分屏模式下,不要假设用户只会在全屏模式下使用您的应用,不要假设您的应用拥有对共享资源的独占访问权限。

这是什么意思?简单来说,如果分屏模式下,假设用户点击了音量+,那么前台两个界面该哪个去响应呢?这就需要判断了,而不是像我们做全屏应用时,理所当然的认为前台的应用来消费掉这个音量+事件。同样的情况还是音频的播放等等。

其次,要考虑兼容模式

不要假设用户始终处于横屏或竖屏。

我相信,大多数开发者,都喜欢把Activity设置为横屏或者竖屏显示,这样方便代码的编写。但是如果用户是折叠屏,从小屏切换成大屏时,我们该如何处理呢?这时候,或许横屏显示会比竖屏显示更为合理。

然后,要解决相机方向问题

默认情况下,摄像头是竖向的,但是相机的方向默认是横向使用的,这就会产生一个很奇怪的的现象,如下图所示:(左侧为设备上显示的,右侧为排查的实际物体)

 这时候也许就问,那我统一把视频显示角度旋转90度不好就好了吗?旋转90度确实能解决问题,但是如果某些时候又恰想把手机横过来拍摄呢?

所以,总结下来,其实我们只要知道手机是竖着拍摄还是横着拍摄的,就可以根据这个参数来决定该如何显示了,Google就很贴心的为了我们提供了这个参数CameraCharateristics(非静态字段,动态计算的),用法如下:

当然,我们有时候还要区分一下是前置摄像头还是后置摄像头,所以最终代码如下:

说到这,是不是觉得整个流程上有些麻烦呢?没关系,谷歌就是帮我们解决问题的,以上的代码如果不想自己去解决,可以统统删掉,直接使用Jetpack CameraX即可,这个库帮我们解决了相机适配的所有问题。

 

最后,还要解决应用状态问题

横竖屏切换的时候,以及黑夜白天模式切换时,自然不能因为切换导致之前的数据和状态丢失。谷歌为我们提供了原生和compose两种方式的保存的范例。

1.1.2 接下来介绍的是第二层级:优化在大屏设备上的显示

如何优化大屏设备上的显示呢?最好的方式自然就是根据合适的尺寸去显示宽度,而不是恒定的占据的全部宽度。所以我们又需要一个“适合宽度”的参数概念了,这个参数就是WindowMetricsCalculator。他会给我们返回一个合适的宽度,同时,原来的获取屏幕宽度的方法仍然还是保留的。

在谷歌看来,按照屏幕宽度,把屏幕尺寸分为三种,Compact,Medium,Expanded三种,图示如下,所以,我们可以按照三种不同的显示形态,去规划我们的UI设计。

 一般情况下,我们写代码时,很喜欢去判断平板还是手机,如果手机使用一套布局,如果是平板就是用另外一套布局,因为这样我们写UI时会相对更简单。但是折叠屏的到来,让我们必须抛弃这种写法了。因为折叠屏合起来时属于手机应用,加载的自然是手机的布局,但是展开时又是一个平板的尺寸,所以更适合的应该是宽屏的显示方式了。所以谷歌推荐的做法是在每个界面当中,动态去根据尺寸的大小,来进行合理的规划,而不是直接按照手机or平板来区分。

 1.1.3 最后,来介绍的就是第一层级:在大屏设备上实现差异化显示

这一块主要是根据实际需求来进行区分,满足用户极致的体验。

跨应用粘贴复制

比如,一个页面中如果有两个应用,跨应用之间能否实现一个快捷的拖拽,而不是复制,切换到另外一个应用,粘贴的步骤呢?确实可以的,androidx中也在不断的提供各种支持库满足我们这阿姨给你的需求,如果上面所说的需求,就可以通过draganddrop来实现。

 示例代码如下,当然,具体用法还是需要参考官方文档:

90度折角显示

既然时折叠屏,那么除了0度(未折叠),180度(完全折叠)之外,自然也可以存在其它的状态,比如45度,90度这样的。在不同的角度下,我们可以做些什么呢?谷歌就给我们演示了一个很好的示范:

  怎么样,是不是很有回到小时候打电子游戏机的感觉了呢?

另外,折叠状态下,是不是可以实现上半部分播放视频,下半部分显示评论的功能呢?自然这样的体验感也是不错的。

主题二.几个关于Android开发的新消息

主讲人:林楚峰(谷歌开发者关系工程师)

主题二主要包含三大部分,Android13/新的架构/Android Studio优化。

一.Android13新特性

Android13也是本次Android讲解的重头戏吧,也是我最为期待的一个讲解环节。并且在开完会之后,我也去体验区里面亲身感受到一把android13,在pixel6上还是蛮流畅的,并且目前除了亲儿子pixel,小米,vivo等手机也已经兼容了android13了。

变化1:Notification permission通知权限变更

Android13之前,通知权限时一个申请后既可以永久使用的权限。因此,有一些APP申请到了一个权限之后,就开始疯狂的推送各种广告,十分影响用户的体验。所以从13开始,通知权限改为运行时权限,也就是说,只有运行的时候才能申请,并且申请之后退一旦退出应用,权限就会自动失效。因此,在也不用怕后台APP疯狂推送消息了,下次遇到这种情况,只要轻轻的点一下杀掉对应APP进城即可。

对新装,已安装应用的影响,如下图所示,说的很清楚,这里就不详细讲解了,有不清楚的可以在评论中咨询我。

 权限其实也是一把双刃剑,管得更严格了,自然也会带来一些问题。比如有的APP确实是需要向用户推送一些消息的,比如资讯类的APP推送一些实时的新闻。如果每次启动时都向用户申请推送权限,自然是很麻烦的。因为谷歌也我们提供了一些优化用户体验的方案,供我们参考:

备注1:不过这里我也有一个小小的担心,Toast其实是基于Notification去显示的,所以Toast的显示是否会收到此次改动的影响呢,这个需要验证。(详细结论请看最后一章,下同)

变化2:细化的媒体权限

Android 13之前,读取外部存储的权限,之前只需要申请一个,如下。

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

13改成了三个,分别为图片和照片/视频/音频文件。也就是说之前只需要申请一个权限的,现在要申请三个。

同样的,谷歌一样为我们提供了过渡的方案,如果已经安装并获取过相关权限的应用,则自动拥有这三个权限,否则,三个权限需要单独去申请。

备注2:这里就引发我的第二个疑问了。之前如果申明了android.permission.WRITE_EXTERNAL_STORAGE权限,则自动拥有android.permission.READ_EXTERNAL_STORAGE权限,这条规则不知道是否还继承?另外如果是单单仅仅只是读取一个文本文件,那么申请这三个权限是否仍不可行?

另外,13之前的版本,如果仅仅只想使用WI-FI定位的话,仍然需要申请定位权限:ACCESS_FINE_LOCATION,但是13之后,只需要申请NEARBY_WIFI_DEVICES权限就好。对于开发者来说也许会麻烦一些,但是对于用户来说,则对自身的隐私保护更清晰了。

变化3:新增功能-隐私仪表盘

这个比较好理解,就直接贴图了:

变化4:开发者可降级权限

之前权限只有申请,没有降级。这次,新增了权限降级功能,开发者如果不需要某个权限,可以主动调用API进行相关的降级处理,设计本意挺好,但是对于大多数国内开发者,估计都不会用。

 变化5:照片选择器

照片选择器对我们来说最大的好处,应该就是不需要再声明媒体库的访问权限,而可以直接使用了。并且未来不仅仅Android13,Android11和12也都可以使用。

使用方式如下:

当然,因为后续会支持Android11和12,所以不太可能是通过系统补丁的方式,而极有可能是通过第三方系统应用的方式实现的。国内大多数手机都是不支持google play的,所以如果国内手机厂商预制的话应该可以使用,如果不提前预制,有可能仍然无法支持。同理,云存储什么的有可能仍然是无法支持的。

变化6:后台运行限制

13之前,应用的service是可以后台正常执行的。但是后台运行也有一些缺点,比如有些APP有可能后台运行只是为了记录用户行为,但却平白浪费用户流量,而又有些APP后台运行只是为了推送一些消息,但却因为后台运行浪费了用户的电量。这一块,IOS对后台应用的限制要比安卓的严格的多,而安卓也在慢慢的向这个方向进行的转变。

Android13中,用户可以去设置限制某些APP的后台运行。当然作为开发者,一定要想到所有可能,所以如果被系统限制了后台运行之后,我们也要在代码中进行相应的判断以及做好相应的兼容。

备注3:这里就引发一个新的问题了,如果我的应用就是需要后台运行的,比如FM收音机功能,被用户错误的操作限制了后台运行,能否通过API接口提示用户进行相关操作呢?

变化7:APP单独设置语言偏好

以往,APP的语言设置都是flow系统的,系统如果设置的是默认应用,那么APP也会自动的切换成英语模式。但是实际情况中,对于某些跨国业务比较多的人,他们更喜欢的是用中文去刷抖音B站,用英文去进行工作上的交流等等。所以单一的语言设置无疑会对他们的使用带来一些不便,所以android13就可以解决这问题。通过APP中的配置,设置优先语言,这样就可以不跟着系统语言走了。

 当然实际中,国内的应用往往本身开发时就仅支持一种语言,国外会推出国外的版本,所以实际来说,好像也不会带来太多的改变。

变化8:带主题的应用图标

这个功能,其实国内有些厂商早就已经实现了类似的功能,一件修改全部APP主题图标。谷歌提供的这个功能,更多的还是适配不同的状态时显示,比如深色主题使用深色的图标,白天模式时使用浅色的图标等等。

Android13的新特性就介绍了上面那些,实际上还有很多,但是时间限制所以没有介绍全。后续会专门写一篇如何适配Android13的文章进行分享。

2.新的架构和框架

新的CPU架构

安卓设备上,不同的处理器的指令集是不同的,谷歌会在虚拟机层面帮我们在java层帮我们磨平差异,但是SO库的话不行,还是需要不同的指令集命令。手机最开始都是32位的指令集,后来渐渐的有32/64位都支持的。而未来,有可能出现仅支持64位的,所以,我们要做好充分的适配,配置不同的SO库。

新的启动框架

从安卓12开始,可以配置启动动画,在APP启动的时候播放一段闪屏页的启动动画。谷歌jetpack全家桶又推出了一个新的框架SplashScreen API,其宣称可以让API23之后的安卓设备都可以使用Android12上的启动动画。

备注4:我看过安卓12的源码,其动画是在系统侧执行的(system_server进程),甚至于执行动画的时候,APP甚至于还没有启动。API23到31之间的源码肯定是不会改的,所以我猜测这个支持库的作用应该是按照安卓12配置动画的规则去读取配置,然后在APP启动的时候APP进程中执行启动动画,而不是像Android12中在系统侧执行。所以,通过这个库配置启动动画,有可能会拖慢启动速度。

3.Android Studio的优化

优化1:不建议使用的三方库,会有红线提示。

而且由于时红线提示,所以如果不改会导致编译不过的。

 备注4:如何把已发布的库修改为不推荐使用的,这个并没有介绍,等待作者后续学习后进行补充。

优化2:QualityI nsights工具窗口直接连接Firebase

Firebase是谷歌推出的一款崩溃检测的框架,和国内的bugly有一点相似。谷歌介绍的这个功能是通过插件把后台的崩溃和代码进行实时的关联,直接在IDE中告诉我们哪一行有问题,这个功能虽然理论上实现并不难,但是还是蛮炫酷的。

当然,实际使用中,有可能不会那么的理想。首先,Firebase有可能依赖外网,国内不一定能够访问的通(未验证,验证后及时更新),其次代码是频繁提交的,只有回退到指定版本才能精确的定位到哪段代码出现的问题,也许直接看崩溃日志更方便。

主题三.Android游戏开发新技术

主讲人:李韧(Google开发者关系工程师)

PS:由于我不做游戏开发,所以对这块的描述会粗略一些,尽请谅解。

一.AGDK

AGDK是谷歌推出的Android 游戏开发工具包,其目标就是为了开发者更好的去打造自己的应用。

所以,AGDK的优势在哪?如下:

 那么AGDK有哪些功能呢?

支持Androidstudio中进行java调试

有些时候,开发游戏的人使用的并不是Android studio,那么如果java层出了问题怎么办呢?这时候就可以通过AGDE临时切换到AS中,处理完问题后继续回到原来的IDE中。

AGDE中,提供的内容还是蛮多的,官方介绍如下:

低内存警告:Memory Advice API

其中,Memory Advice API是新提供的,这个工具类似于安卓原生开发中的低内存回调警告。

Frame Pacing API引擎更新

另外,谷歌推出了Frame Pacing API引擎,支持Unity,Unreal engine,未来也会支持Cocos和godot。

Android GPU检查器

开发可以使用Android GPU检查器,通过对GPU运行状态的实时分析,方便定位程序中存在的问题,使用方式如下:

Android Performance Tuner

一个性能分析工具,帮助开发者排查性能问题。

Game Mode API

二.可折叠设备的处理

选择最优的显示方式

这一块,类似于上面讲的三个层级,这里就不具体描述了,根据不同的场景选择最优的显示方式。

 如何支持可折叠设备?

 

二.机器学习TensorFlow篇

机器学习主要分为两大模块:

一:谷歌能为我们提供哪些帮助?

二:应用端Media Pipe的使用。

2.1 谷歌位开发者提供全面的开源机器学习产品生态

主讲人:魏巍(TensorFlow 技术推广工程师)

tensorflow的应用场景有很多的,可以用于教育,医疗,工业等等,而绝不仅限于计算机。由于有很多非专业的人也要使用到机器学习,所以降低机器学习的入门成本,就变成了谷歌的一个前进的方向,所以,谷歌也确实提供了很多的便利。

然后主讲人举了几个例子,比如:

接下来,主讲人为我们介绍了机器学习的4个必要流程,分别是:

1.数据注入和预处理

2.模型架构定义和训练

3.模型部署

4.监控和维护

 首先介绍数据注入和预处理

网络上,有很多tensorflow支持的训练好的数据集,比如url.com(需翻墙)。

或者我们也可以通过python自己去收集数据。

然后介绍模型架构定义和训练

 第三步是部署

如果机器学习部署在服务端时,整体架构图则为下图: 

然后主讲人举了几个实际的使用例子,分别为通过输入文本联想最合适的内容,以及下棋游戏。都使用flutter开发的,因为机器学习部署在后台,所以,对于前端来说就是一个请求,理论上支持任何类型的前端应用。

最后,就是监控和维护 

谷歌已经把TensorFlow Lite集成到了谷歌服务中,这样,用户就不必为了机器学习,单独的去引入包了。

2.2 Media Pipe:搭建你自己的端侧开源机器学习解决方案

主讲人:唐久强(TensorFlow 开发工程师)

Media Pipe是一套部署在前端的机器学习使用方案,它的优势是不需要通过服务,而且直接在前端设备上进行计算,这样既是没有网络,也可以正常运行,而且由于没有网络传输的流程,所以理论上响应速度会更快。

首先,主讲人仍然为我们介绍了一个实际的使用场景:

然后,为我们介绍了MediaPipe运行时的整个流程:

 

 首先仍然是模型的训练和部署,Media Pipei为我们提供了工具可以进行相关的训练,甚至相关的训练可以在设备端进行:

Task LIbrary集成和使用

首先引入相关的依赖库

 如果找到了已经训练好的模型,那我们就可以直接使用了,使用代码如下:

android中实现方式(kotlin实现):

返回结构如下,代表识别的内容和区域。

自定义对象

大多数情况下,机器学习都是满足特定的需求,其实网上已经训练好的额模型是不满足要求的。所以,我们就需要自己去训练模型。那么如何识别自定义对象呢?主讲人以如何识别谷歌玩偶举例:

 首先,需要训练数据,并且人工为其打好标签,

其次,使用Model Maker构建模型,

最后,使用Task Library进行同样的部署。

其实就是导入的模型不一样而已,一个是自己训练出来的,一个是人家已经训练好的。整个流程如下:

首先,针对多种多样的图片,使用Labellmg这个工具进行打标签操作。 

 然后,进行相关的训练,训练需要大量的计算。Google Colab提供免费的算力支持。

最后,导出训练好的模型,和上面的流程一样使用Task Library进行部署。


主讲人最终进行了一个简单的总结:

如果想了解更详细的内容,可以访问网站:www.mediapipei.dev

三.体验区篇

3.1 午餐和休息

11点30左右上午的讲解就全部结束了。

然后所有人都是去五楼吃的会展中心定制套餐,感觉还行吧,还送了个一梨,这份套餐,平时卖的话也得30块钱吧。

吃完之后,到休息区看了看黄浦江的风景,如果能在这里买一套房,那此生的目标也就达到了。

3.2 体验区活动

下午一点开始了体验区活动,一共有13个体验区,代表13个主方向,分别是:

1.Google广告变现

2.Google Cloud

3.Flutter

4.谷歌艺术与文化

5.Google Maps Platform

6.Google 教育合作

7.机器学习

8.多元平等互融

9.Google Play

10.Android

11.谷歌出海创业加速器

12.Google开发者社区

13.Google招贤纳士

 奖品也是十分丰富的:

1.每个展区都可以在体验之后进行签到,收集完13个展区的全部签到后,可以领一个谷歌手提包;

2.收集齐6个隐藏彩蛋盖章后,还可以领一个谷歌飞盘;

3.每个人都会有一个徽章,找到相同徽章的人,可以领一顶谷歌帽子;(我就这个没领到)

4.参与问卷调查,可以领一个谷歌马克杯。

5.另外,每隔展区体验之后也都会或多或少送一些小的礼品。

最终,我的战果如下,就差一顶帽子就集齐了,略有遗憾,不过这也如人生,哪能十全十美呢!

四.备注和总结

备注:

本文中有一些等待官方正式确认的内容,已经用红色字体进行了标注,比如:

备注1:不过这里我也有一个小小的担心,Toast其实是基于Notification去显示的,所以Toast的显示是否会收到此次改动的影响呢,这个需要验证。相关的验证我会在升级13之后第一时间更新本文章。

已经通过邮件的方式向谷歌官方进行相关的确定,等收到官方回复后,会第一时间更新到本文当中。另外,作者后续会升一步android13的手机进行验证,并且专门写一篇适配Android13的文章进行相关分享。

anroid13的升级已经升级完成,相关适配文章尽请期待。

上面介绍的Android13的新特性有一些是我理解错了,已经更新到13全部依次实验过了,最新的Android13适配方案链接如下:

android新版本适配-android13最全适配方案_失落夏天的博客-CSDN博客

现场的感悟:

谷歌的良心,不仅仅体现在平时,也体现在会场的布置上。所有的13个展区中,

只有4个是和谷歌自身利益相关的:招贤纳士,谷歌出海创业加速器,Google Play,广告变现;

有6个是服务于广大开发者的:Google开发者社区,Android,机器学习,Flutter,Goolge Cloud,Google Maps Platform;

最后还有3个是纯公益性质的体验区:Google教育合作,谷歌艺术于文化,多元平等互融。

历届包括本次参加谷歌开发者大会的整个流程,谷歌没有收一分钱,所有的东西都是免费的。

个人的感动:

2019年的谷歌开发者大会我就参加了过了,那时候举办的场景真的让我感触颇深,让我逐渐认识到,谷歌是一家用技术来改变我们生活的企业。

19年的纪录:Google 2019上海开发者大会一日游(安卓)_失落夏天的博客-CSDN博客

因为疫情的问题,谷歌已经两年没有在中国举办线下的开发者大会了,幸运的是今年终于还是来了。虽然因为疫情的原因,规模上要比2019年及之前几届小的多,嘉宾阵容上也主要是以在中国的工程师为主,但是向众多开发者传递的思想仍然是不变的。谷歌是一家技术赋能公司,它的使命是为开发者提供各种各样的帮助,助力开发者和相关企业的成长。无论是android的jetpack全家桶,还是TensorFlow。

这种技术上的使命感,真的有点让我感动,毕竟,我从是安卓开发十多年,虽然平常工作中使用的东西基本上都和谷歌密切相关,但是却从没有为谷歌花过一分钱,甚至都没有付费的渠道。

最后的感激

本文并不是引流文章,这一章的内容也不是想引起相关的话题讨论,而仅仅只是作者本人切身感受的一个纪录。

所以,本文的最后,借用三个词为本文进行一个收尾吧。

感悟,感动,感激!

夏天

2022年9月16日