Android Jetpack:将应用程序变成火箭

战争……战争永远不会改变。 因此,对于美观和有效的代码的斗争仍在继续。 对于每一项艰巨的任务,都有自己的武器诞生:有人自己制造武器,有人使用现成的工具。 Android开发也不例外。 在我们的AppsConf 2018大会上,我们将讨论现在如何使用和最有趣的方法以及什么是最有趣的方法,您可以在其中偶然发现 ,有趣的是Google终于开始整理好庞大的开发工具库。 可以在我们的网站上查看报告的主要主题,但是现在我们请Google开发人员专家Denis Neklyudov和Alexander Smirnov谈谈今年5月推出的新的Android Jetpack工具包。



PapaJobs的联合创始人兼CTO Alexander Smirnov,Android开发者社区MOSDROID的创始人,该社区是领先的视频博客Android in Faces。
Denis Neklyudov是俄罗斯第一个GDE,他在90seconds.tv在新加坡工作,他是AndroidDev播客的中心负责人,各种会议的发言人和一些开发课程的作者。

Android Jetpack于今年5月在Google I / O上推出。
您对这次会议有何期待? 您的期望实现了吗?

亚历山大·斯米尔诺夫(Alexander Smirnov) :我期望的比我最终想象的要少得多。 从业务角度看,似乎没有必要开发该平台。 在移动领域,Google以积极的趋势在87%的市场中取得了压倒性的胜利,并且在过去的几年中,ML被视为其主要工作领域。 我在等待Material Design的进展,为开发人员添加ML工具,发布Constraint Layout 2.0。 但是我们看到了将事情井井有条并为开发人员提供支持的巨大一步。 突然对AJP中的新项目以及为改善支持而进行的斗争感到高兴。 嗨,AndroidX。

Denis Neklyudov :我坚持参加杂货会议的主要原则:不要等待公告,革命性的变化,礼物-只是会见老朋友。 如果他们什么都没破坏。 但是不,他们引入了Android X,在大型项目中,向其迁移并不是最令人愉快的过程。 但是有很多积极的方面。 Google I / O最有价值的是与框架的开发人员和研讨会的同事进行沟通。

哪些新项目已经付诸实践?

Denis Neklyudov :从AJP开始,我们仅测试了向Android X的迁移。我在项目中拥有一套行之有效的解决方案,所以我不急于引进新组件。 他们只是支持Target SDK 28,检查了最新版本的Android Pie,并平静下来了。 我们正在等待对测试的承诺改进。 现在的Jetpack-这些小型图书馆集中在一处,有时使开发人员的生活更轻松,更愉快。 大多数新产品尚未准备好发布应用程序版本。

亚历山大·斯米尔诺夫Alexander Smirnov)
在提出的新颖性中,我尝试了所有方法,但在生产中,我们仅将应用程序更新为新的Material Design,并应用了Android KTX,我们喜欢它的简洁性和便利性。 我喜欢将几行代码折叠起来。 我们将其余的投入开发,并在今年继续前进。

Jetpack将成功完成任务,您将乐在其中。 但是,是的,某些部分仍处于Alpha状态,因此在开发阶段可能会出现一些小问题。 这很正常。 我不建议在alpha状态下拖动生产工具,但是使用相同的Kotlin并不会阻止我。

对于Android而言,便捷导航一直是一个尖锐的问题。
AJP有什么变化吗?

Denis Neklyudov :在Android中,导航一直是强大而多样的:Activity,Fragment,您仍然需要处理DeepLinks并监视传递的参数。 您可以很容易在大屏幕地图中感到困惑。 Google只是试图通过新的Navigation解决此问题,该导航甚至内置于具有自己的屏幕层次反应器的Android Studio中。

我使用满足项目要求和整体体系结构的自制解决方案。 导航存在严重的错误,尚不能在已发布的应用程序中使用。

亚历山大·斯米尔诺夫(Alexander Smirnov) :在Jetpack上,谷歌迈出了重要的一步:导航出现了,它将更好地改变应用程序的体系结构。 在大型应用程序中,导航会变得非常复杂,以至于记住所有过渡选项都是不现实的。 而且它们仍然需要进行编程和测试。 有几种替代方法试图解决此问题:Cicerone,Flow,Conductor。 它们都没有这么功能。

首先,值得注意的是“导航编辑器”:使用它可以方便地构建图形化的过渡图,并且可以通过鼠标对其进行控制。 实现了便捷的DeepLink处理,并支持播放整个过渡树。 导航组件将使用DeepLink的工作分为两种情况:显式和隐式。 首先,我们可以通过便捷的DSL创建自己,并通过特定操作将其称为PendingIntent。 第二个是例如从浏览器中我们熟悉的DeepLink。 它们是通过不同的方式创建和调用的,但是它们使用导航图进行了相同的处理,并且完全支持构建堆栈以打开必要的部分。 处理DeepLink从未如此简单。

分页库已添加到AJP。 她如何更改RecyclerView的工作?

Denis Neklyudov :RecyclerView一直有一个缺点:您需要花大量时间在一个解决方案上,该解决方案可以双向加载页面,甚至可以跳转到此列表的不同部分。 Google在分页库中介绍了针对此问题的解决方案。

Alexander Smirnov :该库重复了大多数Android开发人员的例程-使用列表。 为了加快大型数据集的显示速度,我们都将它们分成页面并使用它们。 使用分页库,这种工作变得很简单,因为我们可以直接使用实现。 此外,该组件还可以从多个来源加载数据并进行混合。 对于占位符,我们也有一个有趣的想法,当您在加载其他数据时可以显示漂亮的存根,而不是永恒的微调框。 此外,还添加了kill功能来处理快照或不稳定的数据-组件本身可以了解已更改的内容以及哪些元素需要放置在列表的中心,哪些元素放置在列表的顶部。

实际上,创建此组件是为了与RecyclerView一起使用,但是分页库由两个主要部分组成:PagedList和PagedListAdapter。 实际上,使用PagedList,您可以处理这些部分,可以从多个来源下载。

新产品之一是Workmanager。 他如何通过后台任务改变工作?

亚历山大·斯米尔诺夫(Alexander Smirnov) :它有助于从无所不能的服务系统地转移到Jetpack中的便捷API:它使您可以添加满足环境条件以启动任务,设置任务和链条顺序的需求。 您可以将数据传输到可执行任务并从中获取结果。 它具有三大优势:您无需在设备上使用Google Play,只能在特定条件下运行任务,可以创建任务链。

以前的类似物都不是自给自足的,因此有Evernote之类的Android-Job这样的库,它一次使用了所有类似物。 在出现WorkManager之后,对它们的需求就消失了。

Denis Neklyudov :Google拥有用于处理后台任务的所有现有解决方案的强大包装。 由于延迟的任务无法在Service中完成,因此开发人员将面临Android Marshmallow的发布和Doze Mode的到来。 现在,该应用程序无法执行其所希望的任何操作。 并且随着每个版本的此类限制越来越多。 即使有了Lollipop,我们也有JobScheduler可用,它可以在某些条件下并在系统的同意下启动后台任务,但是它在早期版本中存在错误,并且尚不清楚如何在不存在的Android版本中使用它。 为此,以GCM网络管理器的形式创建了一个包装器,并再次将其重写为Firebase Job Dispatcher。 但是事实证明,它们是不完美的-那是他们的现代替代品WorkManager的诞生,它可以在没有错误的任何版本的Android上执行后台任务。

AJP添加了一项新功能-切片。 她的有趣之处是什么?

亚历山大·斯米尔诺夫(Alexander Smirnov) :首先,应将切片展示给您的产品和营销商。 它们使用户可以更频繁地查看您的应用程序,并更快地使用必要的部分:直接转到所需的部分,切换必要的功能。 Slices还允许您在Google搜索的搜索结果中参与您的应用程序,并且将来还可以集成到Google Assistant中。

在“切片”中,您可以显示与应用程序类型及其功能相关的功能。 可以分为三类:导航,任务执行和返回数据。 通常,通过Slices,用户可以获得更简单,更快速的交互,开发人员可以获得更多的流量和机会,使用户返回到应用程序。

Denis Neklyudov :承认,您一直缺乏直接从搜索中获取具有交互元素的应用程序中的应用程序信息的能力。 切片解决了这样的问题,允许应用程序声明UI和操作,并将其内置到包括搜索在内的第三方应用程序中。 我真的很期待智能手机上Google Assistant上的新闻,Feedly的过去照片,Timehop​​的过去照片,我从App in Air中的飞行,“ Y。Navigator”的上班路线等等。

对于应用程序所有者而言,这是增加其服务使用频率的绝好机会,这也将使用户在不离开新的赛车模拟器的情况下在Spotify中切换曲目变得更加方便。

有什么限制?

亚历山大·斯米尔诺夫(Alexander Smirnov) :分片仍然需要大量的模板修剪:一堆应用程序被嵌入到其他应用程序中,用户需要了解交互机制会有所不同。 对于多功能性,您始终必须付费。 如果您还记得小部件,它们也非常有限。 功能的扩展当然会实现,但是我认为不应对此抱有太大希望。

Denis Neklyudov :我同意,现在Slices API限于可以嵌入到第三方应用程序中的特定模板集,但是新模板也会随新版本一起出现。 开发人员特别禁止使用自定义界面,以便能够控制切片在嵌入式应用程序中的外观,并使它们保持一致。

Google已向AJP添加了KTX库。 您对她有什么印象?

亚历山大·斯米尔诺夫(Alexander Smirnov) :一个很棒的工具,这正是很长一段时间以来所缺少的。 KTX是一组扩展,用于在日常任务中更愉快地使用Android API。

我强烈建议将其切换到所有Android开发人员,以提高生产力。 开发时会给您带来便利,速度和良好的心情。 使用KTX,您甚至可以折叠样板并获得简洁易读的代码。

但是您需要仔细研究KTX提供的扩展,并查看这些扩展的源代码以了解幕后发生的事情。 而且由于没有其他陷阱,您可以放心地战斗了。

Denis Neklyudov :AJP开发人员做出了正确的决定:该框架应该对Kotlin更友好。 因此,具有一组静态函数的项目诞生了,扩展了框架的语法。 Kotlin具有许多方便的语言功能,只是扩展功能允许您以方便的方式访问框架类。 例如,view.isVisible是view.getVisibility()== View.Visible的缩写。

有很多不同的功能,最好自己看看 。 当然,您可以没有他们,就像没有Kotlin一样生活。 但这更令人愉快。

Google越来越多地推广Kotlin。 您对此有何感想?
他的前景如何?

Alexander Smirnov :我对Kotlin持非常积极的态度,自2016年1月以来,我一直将其用作Android的主要开发语言。 在此期间,他参与了三家公司从Java到Kotlin的迁移。 不幸的是,Java的发展相当缓慢,而用于移动开发的Kotlin则是新鲜空气。

Kotlin成为Android主要开发语言的时间只是时间问题。 Android开发人员已经出现,其中Kotlin是第一种开发语言,而Java是不熟悉的语言。 至少在Google决定构建新的操作系统(可以说是改进的Android)之前,我们与Kotlin的前程似锦。 但这是遥远的未来,而不是将来的事情。

Denis Neklyudov :我不能说Google积极推广Kotlin,相反,一些与框架本身相关的项目对Kotlin变得友好起来。 这一点根本不意味着在2018年,Android的Java开发人员是某种叛徒或少数派代表。 但是Kotlin变得越来越有信心和更快的事实正成为开发人员的默认语言,这是一个好消息。

当您听说Flutter(一种适用于Google移动应用程序的跨平台框架)时,Kotlin Native会立即回声,它可以为Android和iOS进行编译。 许多人都在等待它成为一切的语言:Android,iOS,Web,嵌入式... JetBrains的计划是拿破仑式的。 我们观察错误报告,进行beta测试,并享受到愉快的语言,使我们能够以最小的痛苦将项目迁移到该语言中。

自Android AJP发布以来已经过去了三个多月。 他如何表现自己?

亚历山大·斯米尔诺夫(Alexander Smirnov) :谷歌计划使用AJP来帮助Android开发人员更快地创建高质量的应用程序,而无需在动物园使用其他解决方案。 另外,它们使初学者更容易进入Android开发。 我认为Jetpack已完成任务。

结果是解决了大多数开发人员任务的一个很酷的设置。 但是我们可以肯定地在大约6到12个月内确定何时发布大多数创新。 到目前为止,这已阻止许多人开始在生产中使用AJP。

Denis Neklyudov :Google并没有从头开始做AJP,而是将许多有用的东西放在一起,这些东西不是框架本身的一部分,而是由开发人员打包到应用程序中的。 最好将它们全部合并为一个时髦,充满活力的名称。 对于开发人员而言,现在只有一个资源即可为许多问题找到官方的解决方案,这对开发人员来说是一件好事。 至少很方便。

当然,并不是该集合中包含的所有内容都可以在严肃的应用程序中使用,而是仍处于主动开发和调试阶段。 从框架本身来看,一直存在Beta版本的感觉,我真的不会对患者施加压力并讨论IDE。 但是我们已经习惯了Android。

在此库和解决方案列表中,每个人都会发现一些对自己有用的东西。 对于初学者来说,这是熟悉知识的绝对必不可少的资源,这样他们就不必踩着众所周知的耙子,而是先尝试或多或少地采用官方方式来解决他们的问题。

AJP的发展前景如何? 明年可能会有什么新变化?

亚历山大·斯米尔诺夫(Alexander Smirnov) :现在我们有了许多新的发展,因此,首先,它们需要定稿并稳定下来。 然后,我会期望每个组件和工具的系统开发,也许会稍微增加一些新内容。 Jetpack是向前迈出的一步,因此,从明年开始,我希望系统地进行改进,但是又过了一年,它可能会非常有趣。 明年绝对值得等待的是与Android Studio的更加密集和便捷的集成。

Denis Neklyudov :AJP将随着已解决的每个新任务而扩展,该任务已在公共领域发布。 对于每个版本的Android,Jetpack框架也将以AppCompat和Material Components的形式开发。 在不久的将来会出现什么很难说,我正在等待添加氮气-一整套用于大规模测试应用程序的实用程序。

Google在全球范围内不断扩展浏览器的功能,这将来会带来什么?

Denis Neklyudov :我经常重申,没有必要将Google的某些步骤视为全球化和集中化的措施。 如果Chrome小组有足够的资源来开发AMP,PWA,现在又开发WebAssembly,这并不意味着有一个阴谋要在202年之前将所有人转移到网络上。 像Flutter的开发一样,这并不意味着我们都会使用此框架,然后注定要死掉Android,因为首先是ChromeOS,然后是紫红色将接管所有用户设备。 今年夏天,杰克·沃顿(Jake Wharton)在柏林Droidcon大会上谈到了网络与本机应用之间的界线如何模糊。 从报告中可以推断出,在当前情况下,有必要分别适当地支持所有平台并尝试在它们之间重用代码。 但是,如果您认为Internet在全世界范围内可以是非常高速,稳定和便宜的,则也许Web应用程序有机会占据主导地位。 但是到目前为止,几乎没有人相信。

Alexander Smirnov :从本地应用程序到Progressive Web Apps的过渡是数百万Web开发人员,产品经理和众多其他人的梦想。 该公司选择了PWA应用程序而不是移动设备,从而简化了开发,使用,更新和吸引用户的过程。 对于大量的简单移动应用程序,PWA是一个很好的解决方案,我们将无法很快完全放弃本机开发。

好吧,谁有兴趣聆听来自Android开发领域的实时新闻,以了解有关Google Enclave最新阴险计划的很多有趣事情,可以直接与专家交谈,我们正在等待我们的AppsConf 2018大会。

对于那些喜欢在家学习所有内容的人,我们有一个YouTube频道 ,可以在该频道上上传AppsConf视频(会议召开后几个月)。

以及所有事件和有用材料的公告,包括将来的会议,最佳报告的公告,会议邀请,解密的报告和有用的文章,我们都发布在邮件列表中

Source: https://habr.com/ru/post/zh-CN421665/


All Articles