Modern Android Development in 2023

1,005 阅读8分钟

欢迎关注 「Android茶话会」更多精彩等你来探索

  1. 「学习之路」 取Android技术路线经典电子书
  2. 回 「天涯好文」 取天涯论坛200+精彩博文,包括小说、玄学等
  3. 回 「技术简历」 取精选简历模板一份
  4. 「童年游戏」 取60+童年游戏合集一份

本期只要介绍一下2023年开发Android应用的一些流行实践

防杠声明

这是一篇基于我个人观点和经验的文章,考虑到Android开发者社区的不同意见,我可能没有提到一些非常有趣的工具、模式和架构,但这并不意味着它们不能成为开发Android应用程序的其他有趣选择。 接下来,我将提到我认为在Android上构建现代应用程序很重要的工具、库、架构、指南和其他实用程序的列表。

Kotlin ❤️

image.png Kotlin是由JetBrains开发的编程语言。谷歌推荐,并于2017年5月正式宣布(见此处发布)。它是一种与Java兼容的现代编程语言,可以在JVM上运行,这使得它在Android应用程序开发中的采用非常快。 不管你是不是Android新手,你都应该把Kotlin作为你的第一选择,不要逆流而上🏊🏻😎,谷歌在Google I/O 2019上宣布了这一做法。使用Kotlin,您将能够使用现代语言的所有功能,包括协程的强大功能和为Android生态系统开发的现代库的使用。 官方kotlin文档在这里kotlinlang.org/docs/home.h…

Jetpack Compose 😍

image.png

image.png

Jetpack Compose is Android’s recommended modern toolkit for building native UI. It simplifies and accelerates UI development on Android. __ _Jetpack Compose documentation

Jetpack Compose是Android Jetpack库的一部分,使用Kotlin编程语言轻松创建本地用户界面。此外,它还集成了其他Android Jetpack库,如LiveData和ViewModel,从而更容易构建响应式和可维护的Android应用程序

Jetpack Compose的一些关键功能包括:

  1. 声明式的用户界面。
  2. 可定制的小部件。
  3. 易于与现有代码集成。
  4. 活的预览。
  5. 提升的性能

「相关资源:」

Jetpack Compose documentation

Android Jetpack

image.png

image.png

❝❞

Jetpack is a suite of libraries to help developers follow best practices, reduce boilerplate code, and write code that works consistently across Android versions and devices so that developers can focus on the code they care about.

_ Android Jetpack documentation developer.android.com/jetpack

以下是Jetpack最常用的一些组件

Clean Architecture

image.png

image.png

"Clean Architecture"的概念是由Robert C. Martin提出的。它的基础是通过将软件划分为层来实现职责的分离,具有以下特点

  • 独立于框架。
  • 可测试的。
  • 独立于UI。
  • 独立于数据库。
  • 独立于任何外部代理。

依赖的规则

The dependency rule is described very well by the author in his piece, The Clean Code Blog(blog.cleancoder.com/uncle-bob/2…)

The overriding rule that makes this architecture work is The Dependency Rule. This rule says that source code dependencies can only point inwards. Nothing in an inner circle can know anything at all about something in an outer circle. In particular, the name of something declared in an outer circle must not be mentioned by the code in the an inner circle. That includes, functions, classes. variables, or any other named software entity. 使这个体系结构工作的最重要的规则是依赖规则。该规则表示源代码依赖项只能指向内部。内部圈子里不可能知道外部圈子里的事。特别是,在外部圆圈中声明的东西的名称不能被内部圆圈中的代码提及。这包括,函数,类。变量,或任何其他命名的软件实体。

详细可见 The Clean Code Blog(blog.cleancoder.com/uncle-bob/2…)

Clean架构在Android中的体现

Clean Architecture in Android

  • Presentation(展现层): Activities, Fragments, View Models, others view components.
  • Domain(领域层): Use Cases, Entities, Repositories, others domain components.
  • Data(数据层): Repository implementations, Mappers, DTO’s, etc.

展示层的架构模式

架构模式是一种高级策略,旨在帮助设计软件体系结构,其特点是在可重用框架内为常见的架构问题提供解决方案。架构模式类似于设计模式,但是它们的规模更大,并且处理更多的全局问题,例如系统的总体结构、组件之间的关系以及管理数据的方式。

在展示层中,我们有一些架构模式,我想强调以下几点:

  • MVVM
  • MVI

在这里呢 我不想解释每一个,因为在网上你可以找到太多关于这方面的信息。😅,此外你也可以翻阅 官方的架构指南(developer.android.com/topic/archi…) image.png

依赖注入

依赖注入是一种软件设计模式,它允许客户端从外部源获取依赖项,而不是自己创建依赖项。它是一种在对象及其依赖项之间实现控制反转(IoC)的技术。有以下比较好用的框架可以学习研究下

模块化

模块化是一种软件设计技术,它允许您将应用程序划分为独立的模块,每个模块都有自己的功能和职责。 image.png

模块化的益处

  • 「可重用性」: 通过拥有独立的模块,它们可以在应用程序的不同部分甚至其他应用程序中被重用。
  • 「严格的可见性控制」: 模块使您能够轻松地控制向代码库的其他部分公开的内容。
  • 「可定制交付」: 允许你有条件地或按需交付应用的某些功能。
  • 「可伸缩性」: 通过独立的模块,可以添加或删除功能,而不会影响应用程序的其他部分。
  • 「易于维护」: 通过将应用程序划分为独立的模块,每个模块都有自己的功能和职责,可以更容易地理解和维护代码。
  • 「易于测试」: 通过拥有独立的模块,可以对它们进行隔离测试,这使得检测和修复错误变得容易。
  • 「体系结构改进」: 模块化有助于改进应用程序的体系结构,允许更好的代码组织和结构。
  • 「改进协作」: 通过拥有独立的模块,开发人员可以同时在应用程序的不同部分上工作,而不会受到干扰。
  • 「构建时间优化」: Gradle的一些功能,如增量构建、构建缓存或并行构建,可以利用模块化来提高构建性能。

更多参见官方文档(developer.android.com/topic/modul…)

网络

强到没得说,也有一些基于此的业务封装框架

图片加载

Coil是kotlin友好的图片库

响应式和线程管理

image.png

image.png

当我们谈论响应式编程异步进程时,我们的第一个选择是Kotlin协程;得益于Suspension Functions和Flow,我们可以满足所有这些需求。然而,对于我们这些用Android工作了几年的人来说,我们知道RxJava是一个非常强大的工具,它有很多处理数据流的函数集。不过rx兼容进kotlin这套全家桶是不友好的,还是推荐kotlin这一套工具

本地存储

在构建移动应用程序时,重要的一点是能够在本地持久化数据,例如一些会话数据或缓存数据等。根据应用程序的需要选择正确的存储选项非常重要。我们可以存储类似key-value这样的非结构化数据,或者像数据库这样的结构化数据。请记住,这一点并没有提到我们可用的所有类型的本地存储(例如文件存储),只提到允许我们保存数据的工具。 image.png 建议

测试

R8优化

image.png R8是将项目的Java字节码转换为Android平台上运行的DEX格式的默认编译器。它是一种工具,通过缩短类及其属性的名称,消除项目中未使用的代码和资源,帮助我们混淆和减少应用程序的代码。要了解更多信息,请查看Android文档 Shrink, obfuscate, and optimize your app.

自适应布局

image.png

image.png

随着不同形式的移动设备增长,我们需要一些工具来让我们的Android应用适应不同类型的屏幕。这就是为什么Android为我们提供了Window Size Classes,我们可以避免考虑多种屏幕设计的复杂性,将可能性减少到3种类型,即:兼容型、中等型和扩展型。 image.png

image.png Support different screen sizes

我们拥有的另一个重要资源是规范布局( Canonical Layoutsm3.material.io/foundations…),这是预定义的屏幕设计,可以在我们的Android应用程序中的大多数场景中使用,并且还向我们展示了如何使它们适应大屏幕的指南。 1_XASUz4kVTK4I0dH8F5slYQ.gif

其他相关资源:

Linter

image.png Linter是一种编程工具,用于分析程序源代码以发现代码中的潜在问题或错误。这些问题可能是语法、不适当的代码风格、缺乏文档、安全问题等等,它们会对代码的质量和可维护性产生影响。

欢迎关注 「Android茶话会」更多精彩等你来探索

  1. 「学习之路」 取Android技术路线经典电子书
  2. 回 「天涯好文」 取天涯论坛200+精彩博文,包括小说、玄学等
  3. 回 「技术简历」 取精选简历模板一份
  4. 「童年游戏」 取60+童年游戏合集一份

您的 点赞、评论,是对我的巨大鼓励!