这是我参与第四届青训营笔记创作活动的第一天。
今天我要分享的是第一节Android 系统及客户端概览的学习笔记。
1.客户端开发所面对的角色
对外(用户):为用户创造价值,这是最终目的和宗旨,也是系统存在的前提
对内(公司):对内而言,团队组成公司的实体。对内都是成本,对外才是收益。我们对内的目的是降低交易成本。
自身(个人):在整个开发的过程到交付,为用户提供好用的产品。同时也是我们个人的一个提升,我们需要打造自己的技术品牌,培养自己的技术实力。
1.1 对外-为用户创造价值
1.1.1第一层交付:页面+逻辑+数据
这次层交互是最基本的,需要给用户展示交互良好的页面,提供符合预期的逻辑功能,并且获取和展示数据。用户大部分就可以得到满足。
技能点:复杂的交互、清晰的逻辑、网络基础
1.1.2第二层交付:多样性需求
当用户最简单的了解信息的需求满足之后,我们需要进一步满足更多样化的诉求,比如多媒体内容(视频、图像),直播流观看,甚至游戏、AR等
技能点:多媒体基础,OpenGL,音视频编解码,游戏开发
1.1.3第三层交付:体验+质量+安全+个性化
当用户多样化的需求被满足,我们可能提供的就是一个规模庞大的App,随着用户规模的增加,用户诉求也就更高。特别是在目前的移动互联网时代,体验、质量和安全等方面的需求急速扩大。
我们在进入更精细化的需求,对用户需求的满足解决了覆盖面的问题,接下来就是匹配度的问题了。每个人都希望自己体验的是个性化的功能和内容,这大部分是个性化推荐团队来承接的,但随着用户对时效的要求越来越高,我们就需要更进一步的靠近用户。
技能点:Android系统,底层引擎,安全,Hook,机器学习,端智能
1.2 对内:减少公司成本
1.2.1第一层交付:担任效能
效能提升的第一层是单人效能,这里的单人不是指自己,而是提升团队每个人的开发效率,这包括代码编写更快,编译更快,部署和发布更快,测试更方便等。
技能点:编译、全栈、流程管理
1.2.2 第二层交付:团队和公司效能
对于大型开发团队来讲,我们面临的是更复杂的开发环境,人员可能有几千,代码也能有几百万。这时候要提升团队的整体效率,需要从架构入手,搭建一套合适大型团队工作的代码架构。
技能点:架构设计,代码范式,跨端,大前端
1.3自身:打造自身的技术品牌
1.3.1第一层交付:满足交付的基本条件
在这层的交付里面,我们要把自己锻炼为合适的客户端开发,能够满足上面所说的需求开发。
基本技能:andriod系统、语言熟系、基本素养
1.3.2第二层交付:打造自身的技术高度
让自己成为合格的需求承接只是第一步,要打开自身发展的天花板,需要培养自己的优势,打造自身的技术高度。
技术高度:系统底层(andriod原理、linux内核、Andriod Runtimel)、架构设计(大型APP架构、复杂工程管理)、业务能力(大型项目协同、组织管理)
1.3.3第三层交付:君子不器,培养自己的综合素质
综合素质:思维(系统性思维、结构化思维、批判性思维)、认知(个人认知、自控力)、开放(技术好奇心、持续学习、开源)等等
2 Andriod系统
Andriod平台架构:系统应用层、Java API层、原生C/C++层、Andriod Runtime、硬件抽象层(HAL)、Linux内核。
2.1 系统应用层
这一层就是各App所在的最上层了,我们自己开发的App和系统自带的App都在这一层,两种App本质上没有太大区别。一些系统的App提供的功能我们可以直接调用,比如打电话、发短信等,当然我们自己开发的app也可以给其他产品提供类似的调用功能。
2.2 Java API层
这层就是Android Framework提供给开发者的接口,我们可以基于这些接口打造各自的App。在这一层主要的技术栈就是最基础的交付内容,包括页面+逻辑+页面,一些多媒体相关的需求也有成熟的api可以直接使用。
2.3 原生C/C++层
这层就是Android Framework提供给开发者的接口,我们可以基于这些接口打造各自的App。在这一层主要的技术栈就是最基础的交付内容,包括页面+逻辑+页面,一些多媒体相关的需求也有成熟的api可以直接使用。
2.4 Andriod RUntime
这一层就会涉及虚拟机的知识,在一层会把DEX字节码进行编译,优化执行效率。在一层我们可以做一些体验相关的优化,让代码运行更高效。所需要的技术门槛也就更高一些。
2.5 硬件抽象层(HAL)
主要提供硬件组件的封装,包括相机、传感器和蓝牙等。当框架 API 要求访问设备硬件时,Android 系统将为该硬件组件加载库模块。
2.6 Linux内核
Android 平台的基础是 Linux 内核。例如,Android Runtime (ART) 依靠 Linux 内核来执行底层功能,例如线程和内存管理。使用 Linux 内核可让 Android 利用主要安全功能,并且允许设备制造商为著名的内核开发硬件驱动程序。
3 APK的构成
3.1 AndroidManifest.xml :生命app中四大组件,以及权限等
3.2 classes.dex :所有编写的java
3.3 res文件夹 :资源文件夹,包括图片、颜色、字符串,以及搭建的XML布局文件
3.4 META-INF文件夹:存在签名和证书,用于校验和安全
3.5 lib文件夹:主要是存放C/C++代码编译成的so文件
参考文献:【Android 客户端专场 学习资料一】第四届字节跳动青训营 - 掘金 (juejin.cn)