重磅来袭!2020 年需要关注的 5 大 Android 开发技术,抓破脑袋也没想到居然有它?

虽然编程环境每天都有新变化,但 Android 无疑是其中更新迭代最频繁的,每年甚至每个月都有新东西。本文介绍了 2020 年开发者最需要关注的 5 大 Android 开发技术。

在众多 Android 开发团队参加的 Droidcon London 2019 大会上,一系列新技术令人眼花缭乱。从 Joe Birch 介绍的无障碍智能吉他 [1] 到即将到来的 Jetpack Compose 库 [2],创新内容实在太多了,主流社区需要找到几项核心技术才不至于迷失方向。

这篇文章就带着大家一起看看需要重点关注的一些核心技术,同时本文会解释为什么应该优先实现这些技术,以及实现的一些初始途径。需要特别强调一下,实现这些技术虽然不会让你的终端用户发出惊叹,但它们能帮助开发者打造震撼人心的特性,并为开发人员带来更赏心悦目的代码库!

1. Kotlin

  • Kotlin 通常被视为下一个 Java,它是由谷歌和 JetBrains(Android Studio 开发者)赞助的。Java 从一开始就一直是 Android 应用的首选开发语言,但近年来 Kotlin 迅速普及,如今在 10,000 种 Google Play 应用中有近 60%使用了 Kotlin[3]。虽说在少数需要访问底层原生代码的情况下,仍会继续使用 C++;但在其他情况下,Kotlin 都可以代替 Java。

  • Kotlin 的主要优势是与 Java 的完全互操作性,这意味着开发人员可以尽可能迁移旧代码,而不用完全重写整个应用程序。这两种语言兼容得很好,Android Studio 甚至可以自动从 Java 转换为 Kotlin。

  • 这种兼容性,加上更简洁的语法和数百项细小改进,使 Kotlin 在 StackOverflow 的 2019 年开发人员调查 [4] 中成为第四大“最受欢迎”和第五大“想要”的编程语言,在所有移动编程语言中排名最高。

  • 迁移现有应用有一个好方法,就是在修改现有 Java 文件时将其转换为 Kotlin。虽然这意味着你要把经常编辑的文件转换过去,会增加代码审查的复杂度(比如会面临潜在的冲突),但由于转换后的区域能得到审查,因此可以确保任何问题都能被发现。

  • 目前 Candyspace 中使用的 Kotlin 代码占 86%(并且一直在增长),其余的 14%是实用工具 / 转换代码,这些代码已经有些年头没改动过了。

2. Jetpack

谷歌的 AndroidX/Jetpack 库是一组实用工具,旨在简化常见的应用需求。例如用于设备上数据库的 Room[5],或用来在底层数据更改时更新显示内容的 LiveData[6]。

有了 Jetpack 库,新项目就省掉了重新发明轮子的麻烦,也不必等待其他开发人员来开源他们的实现方式,现在每位开发者都能获取到那些基础要素了。这些库更新非常频繁,新功能不断推出,错误修复也会及时发布。由于这些库是为了协同工作而构建的,因此多使用 AndroidX 库有助于最大程度地减少应用中出现意外。

从开发工作起步开始就使用 Jetpack 库可以节省数百小时的时间,但我们也可以将已有的应用迁移到 Jetpack 库上面。虽然看起来很麻烦,但由于这些库非常流行,针对迁移工作的指南也很容易找到。至少,底层 Android 元素(视图、片段等)可以自动转换 [7]。

在 Candyspace,我们使用了 Data Binding 和 ViewModel,并可能很快加入 Room 和 Navigation。

3. 模块化设计

  • 一直以来,应用都被构建为一个巨大的“应用”模块,其中包含整个应用所需的一切。尽管这样做确实能让资源共享起来更容易,但也意味着这个应用的某些部分无法为其他应用 / 开源项目所重用;更重要的是,对应用做出更改时必须重新编译整个代码库。

  • 相反,如果应用由许多较小的模块组成,则只需重新编译做出更改的代码即可,从而大大缩短了构建时间。此外,模块化设计还为高级 Android 特性(例如即时应用——用户无需安装任何内容即可使用你的应用的部分功能,和动态特性——按需安装应用的各个部分)的应用打开了大门。

  • 将一款现有应用拆分为多个模块可能会是一个很复杂的工作,因为会因此而发现之前隐藏的问题(“DateUtility 是什么东西?为什么每个类都需要它!?”);但是一旦改造完成,代码库就会进入一种更加健康的状态。另外,如果一款新的应用需要类似的功能,则可以快速重用已有模块,从而大大节省时间!

模块化应用架构的一个示例

虽然设计一个模块化架构可能是很复杂的任务,但我之前已经写过一些指导性原则 [8],这些原则受到了 Nikits Kozlov 关于模块化和构建时间的文章 [9] 的启发。Plaid 也写了一篇介绍他们向模块化设计迁移经验的文章 [10]。

在 Candyspace,我们的应用设计都是完全模块化的,以尽量减少构建时间对开发工作的中断影响。

4. App Bundle

使用传统的 APK 将应用分发到用户的设备时,必须安装针对所有设备准备的所有资源。这意味着每张位图图像可能会有 5 个副本(用于不同的屏幕精度),还要安装针对不同设备架构的多个库版本,甚至还得安装多组边距和填充值。

使用 App Bundle 分发一款应用时,用户下载的 APK 只包含他们实际所需要的资源。这样一来,平均的应用大小就会减少 20%,而未经优化的应用改换格式后应用大小将会得到更显著的缩减。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jIbYPNYw-1586504613313)(https://upload-images.jianshu.io/upload_images/22459598-77884ffcca0e1012?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

缩减应用大小的示例(资料来源于Google I/O 2018)

App Bundles 是 18 个月前刚刚诞生的,但已经有超过 25%的应用安装时使用了这种格式!这是谷歌推荐使用的格式 [11],并且大多数应用几乎无需改动就能使用这种格式,只需在 Play 商店上处理一下 App Bundle 的签名即可。

在 Candyspace,我们正在迁移到 App Bundles 上,同时尽量避免破坏我们现有的工作流程(Slack、QAing 构建、非 Google Play 安装)。Alistair Sykes 的文章是一份很棒的迁移参考资料 [12],文章考虑到了 CI 服务器、Slack 和 Google Play 内部应用共享等事项。

5. 测试

是的,测试。当然,测试并不是什么闪亮的新特性,也不是用户能看到的内容,但想要确保一款已有一定用户基础的应用的可靠性,就必须要彻底测试你的应用程序才行。由于崩溃率会直接影响你的 Play 商店评分(并且肯定会拖累评分!),因此应该设法将其保持在较低水平上。

测试金字塔

Android 的三种最常见的测试类型分别是(降序排列):

  • 单元测试,例如:我的平方根函数会返回平方根吗?

这些测试将构成你测试流程的大部分内容,它们用来确保特定的代码段(例如一个函数)能按预期正常运行。当你对一个部件建立起信心后,就可以将其用于…

  • 集成测试。例如:我的数学模块可以与位置模块协同工作吗?

这些测试可确保你的各个代码区域(模块或层)可以正常协同工作。知道应用的组件可以正确相互通信后,你就可以添加…

  • 自动化的 UI 测试,例如:用户可以在应用上标记一个位置吗?

在设备或仿真器上只会运行这些测试,它们能确保应用按预期提供完整的用户体验。这些测试通常比其他类型的测试要慢得多(并且运行起来更加不便)。

谷歌建议将测试的分布定为 70%的单元测试、20%的集成测试和 10%的大型测试,占比较小的部分需要更长的执行时间、维护时间和实施时间。

最好的测试资源是官方文档 [13],因为它提供了所有测试类型的介绍,以及如何将其实现到项目中的教程。

在 Candyspace,我们将重点放在单元测试上,其占比要比谷歌建议的比例更大,以确保所有新类的行为都是可预测的。我们目前还在改进自动 UI 测试,以减少对手动测试的依赖。

在编程的任何领域,关于解决问题的最佳方法都会有一百种不同的意见;但 Android 有绝对优势:Android 拥有一个庞大的开发者社区,这意味着一个十分优秀的新技术会迅速在开发者中普及。当你在互联网上向陌生人寻求帮助时,如果你找的是“Jetpack LiveData”而不是“之前的开发人员从 Web 开发者朋友那里复制并转换的库”,成功获得答案的可能性就会大得多!

维持一个健康的代码库的关键,就是能够适应这些不断变化的标准并重构现有项目。为了了解最新的 Android 开发实践和最佳做法,我推荐大家关注 Android 开发者博客 [14]、/r/AndroidDev subreddit[15] 和 Fragmented 播客 [16]。

相关链接:

[1]:https://chordassist.com/

[2]:https://developer.android.com/jetpack/compose

[3]:https://android-developers.googleblog.com/2019/10/android-dev-summit-2019-keynote.html

[4]:https://insights.stackoverflow.com/survey/2019#technology-_-most-loved-dreaded-and-wanted-languages

[5]:https://developer.android.com/topic/libraries/architecture/room

[6]:https://developer.android.com/topic/libraries/architecture/livedata

[7]:https://medium.com/google-developer-experts/converting-your-android-app-to-jetpack-85aecfce34d3

[8]:https://stackoverflow.com/questions/54104312/how-to-share-dependencies-in-a-modularized-android-app/54173703#54173703

[9]:https://www.freecodecamp.org/news/how-modularisation-affects-build-time-of-an-android-application-43a984ce9968/

[10]:https://medium.com/androiddevelopers/a-patchwork-plaid-monolith-to-modularized-app-60235d9f212e

[11]:https://developer.android.com/guide/app-bundle/

[12]:https://www.brightec.co.uk/ideas/google-playstore-internal-app-sharing

[13]:https://developer.android.com/training/testing/fundamentals

[14]:https://android-developers.googleblog.com/](https://android-developers.googleblog.com/

[15]:https://www.reddit.com/r/androiddev/](https://www.reddit.com/r/androiddev/

[16]:https://fragmentedpodcast.com/](https://fragmentedpodcast.com/

原文链接:

https://blog.candyspace.com/5-essential-android-techniques-for-2020

如果大家喜欢这篇文章,或者对你有帮助希望大家多多,点赞,转发,关注 哦。文章会持续更新的。绝对干货!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spark 3.0 是一次重磅发布,经过近两的开发,它在流处理、Python 和 SQL 方面都进行了重大更新。以下是对这些更新的全面解读: 1. 流处理:Spark 3.0 引入了结构化流处理 API 的重大更新,包括新的流式查询引擎和增强的流式数据源 API。这些更新使得 Spark 更加适合处理实时数据流,并提供了更好的容错机制和更高的性能。 2. Python:Spark 3.0 对 Python API 进行了重大更新,包括对 Pandas UDF 的支持和对 Python 3 的全面支持。这些更新使得 Python 用户能够更加方便地使用 Spark,并且能够更好地利用 Python 生态系统中的工具和库。 3. SQL:Spark 3.0 引入了许多 SQL 方面的更新,包括 ANSI SQL 支持、新的优化器和执行引擎、更好的分区管理和更好的数据源 API。这些更新使得 Spark 更加适合处理大规模数据,并提供了更好的性能和可扩展性。 总的来说,Spark 3.0 的更新使得它更加适合处理实时数据流和大规模数据,并提供了更好的性能和可扩展性。同时,它也更加方便 Python 用户使用,并且能够更好地利用 Python 生态系统中的工具和库。 ### 回答2: 近日,Apache Spark 社区正式宣布发布了最新版 Spark 3.0。这是一次重磅的更新,涵盖了流处理、Python 和 SQL 三大方面的内容。下面就让我们来逐一解读这些更新吧。 1. 流处理:Spark 3.0 引入了一项名为 Structured Streaming 的重要功能。它能够以批处理的方式处理流数据,并且保证了完全幂等性(即能够在多次运行时保证相同的输出)。此外,这个版本还增加了更多的连接器,可以方便地从 Kafka、Flume、Twitter 和 HDFS 中读取数据。 2. Python 支持:在 Spark 3.0 中,Python 支持得到了显著的提升。现在,Python 3 官方支持了 PySpark,而且这个版本同时也新增了 Python API 的许多改进。这里,值得一提的是,Python 开发者可以使用 Pandas 和 Pyarrow 来提高数据集和数据帧的操作速度。 3. SQL:Spark 3.0 中 SQL 的更新主要体现在两个方面:一是 SQL 引擎升级至 Apache Arrow,二是 SQL 执行计划优化。这些更新使得 Spark 3.0 的 SQL 引擎能够更快地处理 SQL 查询,并且提高了查询的执行效率。 此外,Spark 3.0 还新增了 Pyspark 的 type hints 和注释支持,提供了更好的代码接口提示;改进了原有的分布式机器学习功能,加入了新的规范、API 和示例;提高了 Kerberos 和 Hadoop 文件系统(HDFS)的兼容性等。 总之,Spark 3.0 的发布,标志着 Apache Spark 在数据处理领域中的核心地位得到了继续的巩固,并且为 Python 和流处理等开源生态提供了一种更加稳定、快速和可靠的解决方案。对于数据工程师和数据科学家们而言,这无疑是一个重要的里程碑。 ### 回答3: Apache Spark是一个快速通用的大数据处理引擎,Python是一种流行的编程语言,SQL是结构化查询语言的缩写,用于管理关系型数据库,这些都是当今最重要的技术学科。最近,Spark推出了Python3_Spark 3.0的重磅发布,这意味着Spark的核心技术已经经过了重大更新,让我们听听它是如何变得更加优秀。 Python3_Spark 3.0更新重大,首先是流式处理。在此版本中,新引入的流处理模块提供了对无限数据流的完全支持,没有大小限制,可以直接应用于大多数Spark数据源和流数据源,可以轻松实现亚秒级响应,并且还包含新的UI各类展示函数,可以轻松监视流式应用程序。 其次是对Python的原生支持。Python在数据处理界面上极受欢迎,PySpark现在在Python3中完全支持,包括与Python新功能的充分配合,如Python3的类型提示(typing),这意味着PySpark代码现在可以像使用Spark的Scala和Java API一样流畅地进行编写;大大提高了数据科学家和机器学习工程师的效率。 最后是SQL支持。Spark已经成为用户基础最广泛的SQL引擎之一之一。最新的Spark 3.0版本通过实现 ANSI SQL 标准来大幅度提高了 SQL 的兼容性和处理性能。Spark 3.0 将包括对 SQL 2016 的完整支持,包括 MATCH_RECOGNIZE和其他高级功能。此外,Spark 3.0 还支持更多的数据类型,并且还具备静态类型分析和优化,可以帮助用户快速有效地查询和处理大规模数据。 总之,Spark Python3_Spark 3.0的发布,在流、Python、SQL等方面提供了全面升级,使得它的核心技术更加完善和先进,有助于增强数据处理效率,实现更好的数据分析应用。对于正在使用Spark的用户来说,这让他们的生活更加容易。 对于Spark未来的发展,它的不断升级和创新发展势头十分强劲,我们期待它的更多惊喜发布。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值