2023年Android开发者路线-第1部分

Android roadmap
2023年Android开发者路线-第1部分

2023年Android开发者路线-第2部分

2023年Android开发者路线-第3部分

2023年Android开发者路线-第4部分

2023年Android开发者路线-第1部分

Android 生态系统处于不断发展的状态:每天都会引入新的库和资料,旨在加快开发速度并让我们作为开发人员的生活更轻松。

在这个由多个部分组成的系列中,您将按照我们的2023 年 Android 开发者路线图了解有关 Android 开发生态系统的所有信息,让您更全面地了解 Android 社​​区以及作为开发者如何取得进步。

2023 Android 开发者路线图旨在让您全面了解当前的 Android 生态系统,并提供建议的学习路径以帮助您掌握概念。综合的了解当前的 Android 生态系统,并提供建议的学习路径以帮助您掌握概念。

在这个由 5 部分组成的系列的第一部分中,我们将从介绍 Android 路线图的前四个部分开始:

  1. Languages
  2. Android OS
  3. The Android Platform
  4. App Manifest

Android编程语言

Android Language
所有 Android 应用程序都必须使用 Kotlin、Java 和/或 C/C++ 编写。Kotlin 和 Java 是开发人员用来构建 Android 应用程序的主要语言,而 C++ 用于编写面向性能或基于硬件的功能,这些功能使用 Java 本机接口 (JNI )调用本机函数。
在本节中,我们将讨论 Kotlin 和 Java。

Java

java Logo
十多年前,当谷歌发布他们的第一个 Android 操作系统版本时,他们采用 Java 作为 Android 应用程序开发的主要语言。

但为什么是 Java?作为最古老的面向对象语言之一,Java 易于学习,并且在受Java 虚拟机(JVM) 启发的Dalvik虚拟机(DVM) 上运行良好,使其可移植到几乎任何设备和操作系统。所以,当谷歌开始构建Android系统时,Java是最合适的语言之一。

Kotlin

kotlin logo
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操作系统
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 Arch
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 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 属性来实现以下功能:

  1. 将应用程序包名称应用为应用程序资源的命名空间。
  2. 解析在清单文件中声明的隐式类名。例如,在上述清单中,声明为 <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 应用程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/21193.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DI依赖注入(setter注入、构造器注入、自动装配、集合注入)

文章目录 1 setter注入1.1 环境准备1.2 注入引用数据类型步骤1:声明属性并提供setter方法步骤2:配置文件中进行注入配置步骤3:运行程序 1.3 注入简单数据类型步骤1:声明属性并提供setter方法步骤2:配置文件中进行注入配置步骤3:运行程序 2 构造器注入2.1 环境准备2.2 构造器注入…

【Linux】信号的处理

信号篇终章 文章目录 前言一、信号的处理 1.可重入函数 2.volatile关键字 3.SIGCHLD信号总结 前言 在前两篇linux文章中我们详细的讲解了信号的产生和信号的保存&#xff0c;今天来到最后一个重点信号的处理&#xff0c;对于信号的处理我们会重新引入进程…

19c rac环境修改pubic, vip,scan ip步骤

19c rac环境第一次修改public、vip和scan ip&#xff0c;和11g还是稍有不同。首先说明下环境 具体步骤如下 1、修改public地址&#xff0c;关闭实例后使用root用户操作 [rootdb1 ~]# ./oifcfg getif bond0 172.20.30.0 global public bond2 100.100.100.0 global clust…

Vivado 下 IP核之 PLL实验

目录 实验任务&#xff1a;Vivado 下 IP核之 PLL实验 1、实验简介 2、实验环境 3、实验原理 3.1、PLL IP核简介 3.2、MMCM 和 PLL 各自的含义以及两者的区别 3.3、PLL 分频 和 倍频 的工作原理 3.4、实验任务 4、建立工程 4.1、PLL IP 核配置 4.2、模块设计 4.…

计算卸载-论文05-双层优化(无线充电与卸载)

标题&#xff1a;《A Divide-and-Conquer Bilevel Optimization Algorithm for Jointly Pricing Computing Resources and Energy in Wireless Powered MEC》 期刊&#xff1a;IEEE TRANSACTIONS ON CYBERNETICS&#xff0c;2022 一、理论梳理 问题&#xff1a;相比于移动云…

Espresso Sequencer:针对Rollup生态的Decentralized Shared Sequencing Layer

1. 引言 前序博客&#xff1a; Rollup去中心化Rollup DecentralizationAztec 征集 Rollup Sequencer去中心化提案Espresso Sequencer&#xff1a;去中心化RollupsRadius&#xff1a;针对Rollup生态的Trustless Shared Sequencing层 当前的L2 Rollup方案在扩容的同时&#xf…

​AI + 非遗文化传播,人工智能师资培训重磅招募

大语言模型热度空前&#xff0c;诸如文心一言、 ChatGPT 等已经能够与人对话互动、回答问题、协助创作&#xff0c;逐渐应用于人们的工作和生活&#xff0c;也引发了社会热议。为推动大模型及人工智能相关专业人员的培养&#xff0c;同时将人工智能技术融入非遗文化传播&#x…

心血管疾病预测--逻辑回归实现二分类

一、实现效果 实现心血管疾病的预测准确率70%以上 二、数据集介绍 数据共计70000条&#xff0c;其中心血管疾病患者人数为34979&#xff0c;未患病人数为35021。数据特征属性12个分别为如下所示:生理指标(性别、年龄、体重、身高等)、 医疗检测指标(血压、血糖、胆固醇水平等)…

青龙面板使用教程,以及安装

1. 青龙面板使用教程&#xff0c;以及安装 首先青龙面板是在docker里面的&#xff0c;我们要安装一个docker 我这里只有debian 11 安装的教程 如何在debian11上安装docker - 知乎 这个文章不错了&#xff0c;按命令执行就好了&#xff0c;其他操作系统的。去网上搜索安…

Helm方式部署 zookeeper+kafka 集群 ——2023.05

文章目录 版本概况一、添加helm仓库二、安装部署集群2.1 在线安装zookeeperkafka集群2.2 离线安装zookeeperkafka集群 三、验证kafka与zookeeper是否绑定四、测试集群附&#xff1a;可改善地方卸载应用 版本概况 服务版本centos7.9kubernetesv1.20.15helmv3.10.1zookeeper3.8.…

Python通过natcap.invest库调用InVEST模型批处理数据(Carbon Storage and Sequestration模块)

InVEST&#xff08;Integrated Valuation of Ecosystem Servicesand Tradeoffs&#xff09;生态系统服务和权衡的综合评估模型&#xff0c;旨在通过模拟不同土地覆被情景下生态系统物质量和价值量的变化。它提供了多种生态系统服务功能评估&#xff0c;包括了淡水生态系统评估、…

【问题记录】USB monitor抓包工具显示音频数据CRC error

一&#xff0c;简介 在进行UAC2.0调试的过程中&#xff0c;使用USB monitor抓包工具抓取音频流数据出现数据错乱现象&#xff0c;本文对该问题进行分析记录。 二&#xff0c;问题记录及分析过程 2.1 先看下正常的抓包数据是什么样子&#xff1a; 从上图可以看出&#xff0c;…

《The Element of Style》阅读笔记 —— 章节 I Elementary Rules of Usage

前言&#xff1a;本科期间担任科研助理时&#xff0c;有幸从导师那里借来这本书通读&#xff0c;只记得自己当时在本子上做了一些笔记&#xff0c;但是想不起来具体记了什么&#x1f602;前段时间再次从学院的讲座活动中听闻这本书&#xff0c;决定重温一遍&#xff0c;本篇为此…

js原生实现pc端日历组件

业务场景 客户要求日期选择使用pc端的样式&#xff0c;前端在x5平台上&#xff0c;也就是需要用原始html、js、css等实现&#xff0c;笔者使用于 原生javascript封装的PC端日历插件&#xff0c;不依赖任何第三方插件&#xff0c;复制的代码文件较长&#xff0c;可跳到 总结 处…

React 内 JSX了解及使用

目录 jsx基本概念及例子 jsx的基本用法 JSX表达式&#xff08;有执行结果&#xff09; {} 语法嵌入不同的值 所呈现出来的特点 标签内行内样式 自定义组件 驼峰命名 Jsx的全称是Javascript XML&#xff0c;react定义的一种类似XML的JS拓展语法&#xff1a;JSXML&#xf…

Go Etcd 分布式锁实战

1 分布式锁概述 谈到分布式锁&#xff0c;必然是因为单机锁无法满足要求&#xff0c;在现阶段微服务多实例部署的情况下&#xff0c;单机语言级别的锁&#xff0c;无法满足并发互斥资源的安全访问。常见的单机锁如Java的jvm锁Lock、synchronized&#xff0c;golang的Mutex等 对…

类和对象(三)

目录 前言 1.再谈构造函数 1.1 初始化列表 1.2 explicit关键字 2.static成员 2.1 概念 2.2 特性 3.友元 3.1. 友元函数 3.2 友元类 4.内部类 5.匿名对象 6.拷贝对象时的一些编译器优化 前言 今天小编给大家介绍的就是类最后的相关内容&#xff0c;希望大家好好学习理…

什么是可信时间戳?可信时间戳电子取证有效吗?

电子数据具有脆弱性、易变性、隐蔽性、载体多样性等特点&#xff0c;容易被复制、删除、篡改且难以被发现。因此&#xff0c;电子数据在实际的司法认定过程中&#xff0c;很难准确鉴定其生成的时间以及内容的真实性、完整性。可信时间戳是一种公认的技术手段&#xff0c;可为电…

精选 100 种最佳 AI 工具大盘点

为了应对对精简流程和数据分析日益增长的需求&#xff0c;整合人工智能工具在多个领域变得至关重要。 本文精选了2023年可用的100种最佳人工智能工具&#xff0c;旨在提高您的生产力、创造力和效率。 以下是 2023 年排名前 100 的人工智能工具&#xff1a; Aidoc&#xff1a;A…

Python获取酷得music并下载,获得无限听

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 环境使用: Python 3.8 Pycharm 模块使用: requests >>> pip install requests re win R 输入cmd 输入安装命令 pip install 模块名 (如果你觉得安装速度比较慢, 你可以切换国内镜像源) 代码实现步骤 <基…