在本文中,我将介绍我对Google I / O 2019会议的印象,这是我和我的同事前几天参观的(甚至在其中一个演示中使用我们的应用程序进行了“照明”)。 它将帮助您感受一下这种氛围,并可能鼓励您观看
在Google Developers频道上发布的一些报告。
Google I / O 2019上的Badoo开发人员第0天。前言
要参加会议,您需要中奖,彩票从2月
在Google I / O网站上开始 (通常从新闻中得知)。 但是胜利并不能提供一张票,而只能以1,150美元赎回它。 还有其他一些程序可以让您以很大的折扣或免费获得门票,例如
Code Jam 。 学生和大学员工可以以375美元的价格购买便宜得多的机票。
会议之前,IT公司举行了聚会。 我从Telegram的聊天中找到了有关他们的信息,该聊天聚集了150多个说俄语的用户。 通常,您可以通过Telegram专业的Android社区的邀请进入这些聊天室。 这样的聚会是在非正式场合与其他会议参与者会面的好机会。 例如,我们遇到了组织者Mobius和一组开发人员,他们为空中旅行者App in the Air制作了该应用程序。
会议以“禁止停车”为口号举行。 Google组织了往返该地区最受欢迎酒店的免费班车,并为Lyft出租车服务(Uber在美国的竞争对手)分配了促销代码。
Badoo有五个开发人员。 让每个赢得机会购买机票的人走吧。 报告分为六到十个流,我们经常分开讨论更有趣的主题。
第一天
会议的第一天由所谓的主题演讲-一般演讲开幕。 第一个适合所有人,第二个适合开发人员。
在做主题演讲之前,人DJ和AI-DJ一起工作突发新闻
在第一个主题演讲中,演讲讨论了不同的Google项目。 以下是一些新闻:
- 公司继续开发Google Duplex-一种机器人助手,可以在美发师/餐厅的桌子上打电话和预约时间;
- Google Lens可以分析支票并与小费金额共享发票金额(在美国很常见);
- Google助手可以脱机工作,并且尺寸会大大减小,使用实时中继,即时通讯程序和通话中的音频消息可以在屏幕上显示为文本。
在Android 10中将出现:
- 更多的父母控制;
- 黑暗主题
- 改进了对折叠设备的支持;
- 新的导航手势;
- 改善分享;
- 按优先级对通知进行新的分组。
在向开发人员的演示中,他们宣布Kotlin现在是Android开发的主要编程语言。 谷歌为Camera X相机引入了一个新的库,即新的声明性UI Jetpack Compose(显然,它仍然很粗糙,但非常有前途),用于更新应用程序的新功能:开发人员将能够在应用程序界面中自行请求更新。
字幕是在每个报告期间实时生成的。Google折叠技巧
最近,只有懒惰的人不谈论折叠设备。 尽管它们现在只占很小的市场份额,但是在它们上面的应用程序应该可以
以某种方式起作用。
Google代表向您保证,如果您遵循最佳做法(例如,正确处理屏幕翻转),那么一切将立即可用。 为了支持折叠设备,使用与平板电脑和Chrome操作系统上的多窗口相同的机制。 除了已经存在的android:maxAspectRatio之外,android:minAspectRatio似乎还会增加对应用程序中受支持方的宽高比的限制。 Google声称,从Android Q开始,Android设备的最小屏幕宽度为2英寸(5.08厘米)。
在弯曲和展开设备时,要检查是否在应用程序中实现了对折叠设备的支持,需要检查以下几件事:
- 应用程序应恢复相同状态;
- 滚动位置应保持不变;
- 键盘焦点应保持不变。
如果您不希望调整Activity的大小,则android:resizeableActivity = false标志可能并不总是对此有所帮助,因为系统仍然可以调整Activity的大小或将其置于兼容模式:
相容模式看起来现在很少有用户使用折叠设备,但是这种小工具的成本很高,因此绝对有必要检查应用程序在它们上的工作方式。
关于多模块性的利弊
在会议上,模块化引起了很多关注。 多重模块化的主要优点:
- 测试只能针对那些受当前分支更改影响的模块运行;
- 您可以隔离对应用程序各种功能的测试。 例如,在Badoo中,我们有一个包含所有UI元素的Gallery应用程序;在开发过程中,由于依赖关系数量有限,因此您可以足够快地构建此应用程序(我的同事在MBLT DEV的报告中谈到了此问题);
- 添加动态功能的能力:据发言人说,80%的用户使用应用程序功能的20%,因此大多数功能可以移至动态模块中,然后再下载; 好的候选者包括专家用户的功能,您必须付费的功能,关于应用程序屏幕; 同时,不应将Onboarding设为动态功能,因为它将显示给应用程序的所有用户。
而且,多模块性对于大量开发人员来说很好地扩展,这对于大型且快速增长的团队是一个显着的优势。
多模块性也有问题。 例如,目前尚不清楚如何创建数据库。 有三种方法:
- 为整个应用程序创建一个数据库;
- 为每个模块创建一个数据库;
- 为可以逻辑连接的多个模块创建一个数据库。
所有方法都有其缺点,但是Google的工作人员们希望Room拥有光明的未来,他们希望保持模块隔离并支持跨模块查询以及具有动态功能的模块。 不幸的是,这尚不可用。
Badoo应用程序中有170多个模块,我们还没有使用动态功能,但是
还有多模块的其他
优缺点 。
第二天
会议的第二天是最重要的一天。 第一份报告开始于8:30,最后报告结束于20:00。 总共提交了90份报告。
大约十分钟之内,这些观众完全座无虚席。新的声明式用户界面
Android已经十岁了,目前的UI在道德上已经过时了。 旧的UI很难维护。 例如,View类有29,188行代码,包括注释,AppCompat版本的代码过多,并且针对不同版本的Android都有很多技巧。 看完这张照片后,Google开发人员决定创建一个UI框架,该框架将随应用程序一起提供,并且将完全不受Android束缚。 该框架的工作名称是Jetpack Compose。
Flutter,React,Litho和Vue.js为开发人员提供了灵感,因此新框架对于许多人来说似乎很熟悉。 主要思想是确保UI响应模型更改,而UI中没有逻辑。
View层次结构表示为标有@Composable批注的函数。 该框架使用编译器插件来拦截对可组合函数的调用。
Google团队承诺将在旧的View层次结构中支持新框架(使用@GenerateView批注),并直接在Android Studio中进行预览并支持动画。
Jetpack Compose尚不成熟,尚不能在实际应用中使用,但现在值得研究其工作原理以了解Android开发的方向。
设计增强现实应用
Google已准备了有关设计AR应用程序的技巧。
- 所有界面元素都应该在AR场景上,而不是在设备上,因为用户在对AR充满热情时不会关注设备。
- 避免在用户需要后退时花些时间,因为这可能会导致人身伤害。
- 如果AR体验是在城市中建立的,请不要忘记它的危险。 例如,您应该警告用户有关行人过路处并要求降低设备。
- 在AR场景中,对象必须与真实的光线交互,即,阴影在光线变化时必须变化。 ARCore提供照明数据,从而可以突出显示虚拟对象。
- AR中的对象必须具有其在现实中拥有的属性。 例如,球应该从地板上反弹。
- 当用户将物体移远时,有必要增加物体的触摸区域,使得仍然可以方便地控制它。
- 开发人员需要向用户明确说明,AR应用程序需要访问设备的相机才能正常工作。
会议的
视频中提供了有关如何在应用程序中设计AR元素的更多信息。
开发Android应用程序时使用文本的最佳做法
该报告讨论了使用文本的最佳做法以及新版Android中的一些更改。
- Android Q默认会禁用连字符。
- PrecomputedTextCompat可帮助您在渲染之前计算文本的大小。 应当注意,在将参数传递给PrecomputedTextCompat之后,将无法更改TextView的字体和其他参数。
- 适用于文本的样式(从最高优先级到最低优先级):
- 跨度
- 视图(例如,由XML中的属性定义),
- 款式
- 默认样式
- 主题
- 文字外观。
- 在Android上,可以使用Typeface.CustomFallbackBuilder设置字体的后备。 例如,如果一种语言不支持应用程序的某些字体,则可以指定另一种作为替代,还可以设置表情符号的字体。 我们的应用程序已翻译成40多种语言,因此,对于其中一种不支持的主要字体,了解它的外观对我们来说很重要。
- 在EditText中使用android:imeOptions =“ flagNoPersonalizedLearning”以防止记忆输入的单词(例如,输入促销代码时)。
- 如果需要在应用程序中使用两种语言,则可以使用setImeHintLocales向键盘发出信号,告知您需要其他语言。 这对于词典应用程序或培训服务很有用。
还有一点小消息。 在
GIF和更多内容的演示中
:将表达式搜索集成到您的应用程序中, Google展示了其GIF API-
Tenor ,它是众所周知的Giphy的替代产品。 我们是最早在Badoo应用程序中使用它的公司之一,因此我们以演讲者的幻灯片为例。 小事,但很好!
在Tenor演示中我们的应用程序“点亮”音乐会
在第二天结束时,Google举办了一场音乐会,弗拉明嘴唇在音乐会上表演。 老实说,我以前从没听说过她,但显然,她在美国很受欢迎。
演讲的一
小部分可从Internet上获得。
演唱会前第三天
第三天很短。 在16:30之前,所有报告都已提交,报告结束时,会议结束了。 大多数情况下,我是在这一天与其他参与者交谈的,但我会告诉您一些值得关注的报告。
会议中有一些不建议使用设备的交流区动画原理
Nik Butcher在他的报告中谈到了在
响应时代如何实现动画以改善用户体验。 问题在于,在反应式应用程序中,View对象没有状态,而动画则具有状态。
好的动画必须满足三个条件:
- 可重启性(可重入):动画可以取消并重新开始;
- 连续性:动画不应从一种状态跳到另一种状态;
- 平滑度:动画应逐渐改变运动的速度/方向。
如何做到这一点:
- 开始动画时,仅设置最终值(应在其结束处); 在给定的初始值下,动画可以从一种状态跳到另一种状态,如果它是通过按下按钮开始并且用户多次单击它,则可能发生这种情况;
- 在开始新动画之前,先取消旧动画(有时已经在Android SDK中实现;例如,从View#animate获得的ViewPropertyAnimator取消了animation属性的先前动画);
- 使用Spring动画 ; 此类动画的移动要考虑物理定律,这意味着更容易实现平滑度和连续性,也就是说,如果对象从A点移动到B点并且命令到达移动到C点,那么在使用Spring Animation的情况下,对象将平滑地改变移动方向;
- 使用<animated-selector>将动画添加到Drawable中; 为避免所有可能状态之间的转换,您可以输入中间状态(例如,引导状态)并进行检查。
但是,一次观看比
听一百次阅读要好,所以这是一个带有报告的
视频 。
性能测试
作为Jetpack的一部分,用于测量应用程序性能的库现在处于alpha状态。 它使您能够测量代码性能并避免了很多测量错误,并且还与Android Studio集成。
使用
Jetpack Benchmark库编写和运行性能测试时要记住的事情:
- 在仿真器上收集测量值是不可靠的,在启动时会警告您。
- 必须打开ProGuard / R8才能正确测量性能。
- 设备必须有足够的电池电量,以免电量不足不会影响测量结果;
- 编写性能测试的模块必须带有参数“ debuggable = false”;
- 不要在不同设备上比较测量结果,它们可能会有很大差异。
结论
Badoo小组和Google DeveloperGoogle I / O绝对值得一游。 在这样的气氛中,您可以喝杯茶听许多有趣的故事,并了解有趣的工程解决方案。 例如,关于VKontakte的家伙如何提出一个黑暗的主题并将其汇总到询问以下问题的用户:“黑暗的主题在哪里?”,来自Tinder的地球开发人员如何与垃圾内容和色情内容作斗争,以及Air团队中的App如何实施自动注册航空旅行。 您还可以吸引Google代表创建我们使用的工具并提出问题。
通常,此级别的会议不仅是一堆报告,而且还是许多您可以与他们交流经验的有趣的人。