2023 Android开发者路线-第一部分
Android 生态系统处于不断发展的状态:每天都会引入新的库和资料,旨在加快开发速度并让我们作为开发人员的生活更轻松。
在这个由多个部分组成的系列中,您将按照我们的2023 年 Android 开发者路线图了解有关 Android 开发生态系统的所有信息,让您更全面地了解 Android 社区以及作为开发者如何取得进步。
2023 Android 开发者路线图旨在让您全面了解当前的 Android 生态系统,并提供建议的学习路径以帮助您掌握概念。综合的了解当前的 Android 生态系统,并提供建议的学习路径以帮助您掌握概念。
在这个由 5 部分组成的系列的第一部分中,我们将从介绍 Android 路线图的前四个部分开始:
- Languages
- Android OS
- The Android Platform
- App Manifest
Android编程语言
所有 Android 应用程序都必须使用 Kotlin、Java 和/或 C/C++ 编写。Kotlin 和 Java 是开发人员用来构建 Android 应用程序的主要语言,而 C++ 用于编写面向性能或基于硬件的功能,这些功能使用 Java 本机接口 (JNI )调用本机函数。
在本节中,我们将讨论 Kotlin 和 Java。
Java
十多年前,当谷歌发布他们的第一个 Android 操作系统版本时,他们采用 Java 作为 Android 应用程序开发的主要语言。
但为什么是 Java?作为最古老的面向对象语言之一,Java 易于学习,并且在受Java 虚拟机(JVM) 启发的Dalvik虚拟机(DVM) 上运行良好,使其可移植到几乎任何设备和操作系统。所以,当谷歌开始构建Android系统时,Java是最合适的语言之一。
Kotlin
Kotlin诞生于 JetBrains。它最初是为JVM环境设计的,结合了函数式编程和面向对象编程。自发布以来,Kotlin 已成为 Android 开发等领域的后起之秀。
以下是 Kotlin 与 Android 完美搭配的几个原因:
- 互操作性:Kotlin 与 Java 100% 互操作,并支持与 JVM 环境的良好互操作性。
- 安全性:根据Android 文档,包含 Kotlin 代码的 Android 应用程序崩溃的可能性降低 20% 。
- 异步:Kotlin 对协程的使用使其能够提供异步(非阻塞)编程支持。
除了上述几点外,谷歌还在 2019 年谷歌 I/O 大会上宣布了他们以 Kotlin 为先的 Android 开发方法。自宣布以来,使用 Kotlin 构建的应用程序数量呈指数级增长。
所以如果你现在开始学习Android开发,Kotlin会是一个不错的选择。
https://kotlinlang.org/
Android 操作系统
Android 平台的基础是Linux 内核,它允许 Android 利用某些安全功能。自 1991 年创建以来,Linux 内核已在数百万个安全敏感系统中使用,因此长期以来一直被成千上万的开发人员研究、测试和改进。
根据Android 文档,Android 使用了几个关键的 Linux 安全功能,包括:
- 基于用户的权限模型
- 进程隔离
- 一种用于安全进程间通信 (IPC) 的可扩展机制
- 删除内核中不必要和/或不安全部分的能力
https://source.android.cn/security/overview/kernel-security.html
Linux 的另一个关键特性是它的多用户操作系统,它允许多个用户访问独立的系统资源,例如内存、CPU 资源、RAM 和应用程序。通过将用户资源彼此隔离,它们可以相互保护。
Android 平台利用 Linux 多用户系统及其自身的应用程序沙箱,将应用程序资源相互隔离,保护应用程序和系统免受恶意应用程序的侵害。有关更多详细信息,请查看应用程序沙箱。
应用沙箱:https://source.android.cn/security/app-sandbox
Android平台架构
Android 平台架构由构建在 Linux 内核之上的六层组成。(注:实际架构按上图倒序堆叠。)
让我们讨论每一层:
Linux内核
Linux Kernel是Android平台架构的核心。它通过其Low Memory Killer Daemon管理低级内存和所有可用的硬件驱动程序——例如 WiFi 驱动程序、相机驱动程序、音频驱动程序、蓝牙驱动程序、显示驱动程序和所有外围设备驱动程序。
Linux Kernel: https://source.android.com/devices/tech/perf/lmkd
硬件抽象层 (HAL)
硬件抽象层(HAL) 通过定义标准接口将硬件功能桥接到更高级别的 Java API 框架,允许您在不修改更高级别系统的情况下实现低级别功能。
HAL 实现被打包成模块,这些模块存储为共享库(.so文件),并在适当的时候由 Android 系统加载。
Android Hal: https://source.android.com/devices/architecture/hal
安卓Runtime
Android Runtime (ART) 是Android 操作系统使用的应用程序运行时系统,是 Android 生态系统中的核心功能之一。ART 的发明是为了取代运行 Android 5.0 (Lollipop) 或更高版本设备的Dalvik 虚拟机。
ART 的主要作用是通过将 DEX 字节码翻译成您的系统可以理解的机器码来执行Dalvik 可执行格式(DEX)。
ART 架构被编写为在低内存设备上运行多个虚拟机。一些关键特性直接关系到运行 Android 应用程序的速度。ART 的主要特点包括:
- 提前 (AOT) 和即时 (JIT) 编译
- 增强型垃圾收集 (GC)
- 将应用程序包的 DEX 文件转换为压缩机器代码(在 Android 9(API 级别 28+)上)
- 更好的调试支持,包括详细的诊断和崩溃报告、设置多个观察点的能力等等
有关更多详细信息,请查看Android 运行时 (ART) 和 Dalvik。
Android dalvik:https://source.android.com/devices/tech/dalvik/dex-format
Android runtime: https://source.android.com/devices/tech/dalvik/index.html
本机 C/C++ 库
Android 平台包括一对Native API ,它们在Native Development Kit (NDK)之上工作。
本机 API 让您可以管理本机活动并访问物理设备组件,例如相机、传感器、图形和音频。它们还暴露给更高层,因此您可以在 Java API 框架上控制物理设备的组件。
Android NDK:https://developer.android.com/ndk/guides
Java API Framework(应用程序框架)
Java API 框架是用 Java 和 Kotlin 编写的 Android 库的集合,提供了 Android 操作系统的整个功能集。Android API 包括可扩展的视图系统、可重用的组件和系统管理器,它们用于通过简化接口的重用来构建您的 Android 应用程序。
Java API 框架中比较强大的 API 之一是Android Jetpack,由 Google 推出。Jetpack 通过减少样板代码来加快开发速度,使开发人员可以专注于他们关心的代码。
Android Jetpack:https://developer.android.com/jetpack
此外,它还提供生命周期、UI 工具包、导航、安全、缓存、调度程序、依赖注入等解决方案。您将在以后的帖子中对此进行深入介绍。
系统应用
系统应用程序是预装的应用程序,例如电子邮件、SNS 消息、日历、互联网浏览、联系人等,它们位于 ROM 的系统分区中。系统应用程序的配置可能因手机制造商而异。有关更多详细信息,您可以查看系统应用程序。
Android系统应用:https://developer.android.com/guide/platform#system-apps
在本节中,您介绍了 Android 平台的整体架构。有关详细信息,请查看Android 平台架构。
Android平台架构:https://developer.android.com/guide/platform
Android Manifest
每个 Android 项目都必须有一个 AndroidManifest.xml 文件,该文件描述有关应用程序的基本信息,例如包名称、入口点、组件、权限和元数据。
程序包名称和应用程序 ID
每个 Android 项目都必须有一个 package 属性,它代表您的应用程序在 AndroidManifest.xml 文件中的通用唯一应用程序 ID。清单文件必须位于您的 /src/main 文件夹中。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="io.getstream.chat.android.ui">
…
package 属性是在 Android 系统(物理设备)和 Google Play 上唯一确认应用的方法。Android 构建工具使用 package 属性来实现以下功能:
- 将应用程序包名称应用为应用程序资源的命名空间。
- 解析在清单文件中声明的隐式类名。例如,在上述清单中,声明为
<activity android:name=".MainActivity">
的活动将被解析为io.getstream.chat.android.ui.MainActivity
。因此,这些类也必须在同一包文件夹中。
如需更多信息,可以查看应用清单概述。
应用清单:https://developer.android.com/guide/topics/manifest/manifest-intro
结论
本节介绍了有关 Android 体系结构的重要细节,因此现在您可以更好地了解 Android 应用程序的工作原理。
同样,不要被本路线图上的信息量吓倒。查看对您了解 Android 开发最有帮助的部分。
此外,您不必了解有关 Android 操作系统的所有知识。但是,了解 Android 平台的整体架构肯定会帮助您构建更好的 Android 应用程序。