写点什么

2020 年需要关注的 5 大 Android 开发技术

  • 2020-01-07
  • 本文字数:3129 字

    阅读完需:约 10 分钟

2020年需要关注的5大Android开发技术

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


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



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

1. Kotlin

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


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


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


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


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

2. Jetpack

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


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



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


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

3. 模块化设计

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


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


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



模块化应用架构的一个示例(来源:本文作者创建!)


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


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

4. App Bundle

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


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



缩减应用大小的示例(资料来源:https://events.google.com/io2018/)


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


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

5. 测试

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



测试金字塔(来源:developer.android.com)


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


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


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


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


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


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


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


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


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


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


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


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


原文链接:


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


2020-01-07 09:005170

评论

发布
暂无评论
发现更多内容

Charles for Mac 强大的网络代理工具

Rose

Redis Desktop Manager for Mac(Redis可视化工具)

Mac相关知识分享

深圳!入选北斗规模应用试点城市

江湖老铁

CST电磁仿真软件如何计算有源S参数

思茂信息

cst cst使用教程 cst电磁仿真

一文彻底弄懂spring boot自动转配的过程

不在线第一只蜗牛

Java Spring Boot 后端

AI驱动的低代码未来:加速应用开发的智能解决方案

天津汇柏科技有限公司

低代码平台 AI 人工智能

适用于 Mac 系统的 SSH 工具Termius Beta for Mac

Mac相关知识分享

摊牌了,创业失败了

禅道项目管理

创业 企业管理 决策 战略规划 决策管理

Java EasyExcel 导出报内存溢出如何解决

威哥爱编程

Java EasyExcel JavaEE

IntelliJ IDEA 2024:编程新境界,高效开发新引擎

Rose

AnyGo for Mac 在iPhone / iPad上轻松模拟GPS位置

Rose

Microsoft Word 2019 for mac(word mac)中文版

Mac相关知识分享

Microsoft Remote Desktop Beta for Mac(微软远程连接工具)

Mac相关知识分享

深度解读GaussDB逻辑解码技术原理

华为云开发者联盟

数据库 GaussDB DRS #SQL

区块链开发:DAPP、NFT、DAO、公链与钱包软件

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 NFT开发 代币开发

西部数据亮相安博会,展出多款领先存储产品

Geek_2d6073

互联网 Java 面试八股文出炉(2024最新整理)

采菊东篱下

java面试

重工业数字化转型创新实践:某国家特大型钢铁企业如何快速落地基于实时数仓的数据分析平台

tapdata

钢铁行业数字化转型 实时数仓解决方案 hive数据如何同步到doris oracle数据同步方案 mysql数据复制

OpenHarmony首次亮相欧洲开源会议

科技热闻

史上最全ThreadLocal 详解

EquatorCoco

Java 算法 JVM

2024 必备工具:JProfiler,解锁 Java 应用性能密码

Rose

捷行2024Train-the-Trainer微课程系列-用户故事地图实操工作坊

ShineScrum

软件设计文档怎么写?详细步骤与注意事项

爱吃小舅的鱼

软件 软件开发 软件设计

鸿蒙网络编程系列39-Web组件打印示例

长弓三石

DevEco Studio 开发实例 HarmonyOS NEXT 网络与连接

多所头部高校教师参加鸿蒙生态学堂·师资培训(贵安站),持续赋能万千开发者

最新动态

AlDente Pro for Mac:保护电池健康的小工具

Rose

VMware Fusion Pro 13 for Mac(VM虚拟机)中文版

Mac相关知识分享

文献解读-Sentieon DNAscope LongRead – A highly Accurate, Fast, and Efficient Pipeline for Germline Variant Calling from PacBio HiFi

INSVAST

基因数据分析 生信服务 长读长测序 Sentieon

软件测试学习笔记丨Selenium复用已打开浏览器

测试人

软件测试

交易所开发:开启数字金融新时代

区块链软件开发推广运营

交易所开发 dapp开发 区块链开发 链游开发 代币开发

华大北斗芯片级产品矩阵亮相第三届北斗规模应用国际峰会

江湖老铁

2020年需要关注的5大Android开发技术_大前端_Jake Lee_InfoQ精选文章