这是我参与「第四届青训营」笔记创作活动的的第1天
第一节:Android 系统及客户端概览
一、开发和交付
对外 - 为用户创造价值
1. 第一层交付:页面+逻辑+数据
最基本的交互,需要给用户展示交互良好的页面,提供符合预期的逻辑功能,并且获取和展示数据。用户大部分就可以得到满足。
技能要求:复杂的交互,清晰的逻辑,网络基础
2. 第二层交付:多样性需求 (视频、直播、游戏等)
当用户最简单的了解信息的需求满足之后,我们需要进一步满足更多样化的诉求,比如多媒体内容,直播流观看,甚至游戏、AR等。这些需求背后需要更多的知识来支撑。
技能要求:多媒体基础,OpenGL,音视频编解码,游戏开发
3. 第三层交付:体验+质量+安全+个性化
满足了页面、功能等基本需求之后,进一步追求提高用户的体验感。在性能、产品质量、安全性、个性化四个方面给用户提供更好的使用体验。
技能点:Android系统,底层引擎,安全,Hook,机器学习,端智能
对内 - 减少公司成本
1、第一层交付:单人效能
效能提升的第一层是单人效能(指团队每个人的开发效率),包括代码编写更快,编译更快,部署和发布更快,测试更方便等。
技能点:编译,全栈,流程管理
2、第二层交付:团队和公司效能
对于大型开发团队来讲,要提升团队的整体效率,从架构入手,搭建一套合适大型团队工作的代码架构。 对于公司来讲,要考虑的是怎么更好的复用人力。目前在尝试的有各种跨端和动态化方案。这可以从更大维度来提升公司的效能。
技能点:架构设计,代码范式,跨端,大前端
二、认识Android 系统
1.开发工具
developer.android.com/guide/platf…
2.Android平台架构图
自顶向下依次是:
1)、系统应用层
一些系统的App提供的功能,比如打电话、发短信等。当然也可以自己写系统功能。
2)、 Java API Framework
给开发者的接口,基于这些接口打造各自的App。实现最基础的交付内容,包括页面+逻辑+页面,一些多媒体相关的需求也有成熟的api可以直接使用。
3)、Native C++ libraries
有一些核心的系统服务和组件。从这一层往下,一些多样化的需求就可以被满足的很好,比如音视频编解码、安全、质量、体验等。
4)、Android Runtime
涉及虚拟机相关的知识。在一层会把DEX字节码进行编译,优化执行效率。在一层我们可以做一些体验相关的优化,让代码运行更高效。所需要的技术门槛也就更高一些。
5)、HAL硬件抽象层
主要提供硬件组件的封装,包括相机、传感器和蓝牙等。当框架 API 要求访问设备硬件时,Android 系统将为该硬件组件加载库模块。
6)、Linux 内核
Android 平台的基础是 Linux 内核。例如,Android Runtime (ART) 依靠 Linux 内核来执行底层功能,例如线程和内存管理。使用 Linux 内核可让 Android 利用主要安全功能,并且允许设备制造商为著名的内核开发硬件驱动程序。
3. APK 构成
-
- AndroidManifest.xml:生命app中四大组件 以及权限等
-
- classes.dex: 所有编写的java kotlin代码
-
- res文件夹:资源文件夹:图片/颜色/字符串/XML 布局
-
- lib文件夹:存放C/C++代码编译成的so文件
-
- META-INF文件夹:存在签名和证书 用于校验和安全