这是我参与「第四届青训营 」笔记创作活动的的第2天
重点内容
- 安卓知识图谱:面对不一样的角色(对外、对内、自身)的不同交付,及每种交付背后的更多层次
- 认识安卓系统每一层及其功能
- 认识代码仓库Git
详细知识点介绍及例子
Android知识图谱
对内-减少公司成本
第一层交付:单人效率
- 单人并不是指自己,而是团队协作中每个人的效率
- 效率包括:敲代码更快、编译更快、部署发布更快、测试更方便
第二层交付:团队和公司效能
-
大部分开发了两年以上的客户端有以下症状:
- 代码复杂度高、编译慢
- 新增代码复杂、扩展性差
- 代码耦合严重、牵一发动全身
-
怎么治?
- 深入代码内部是一个巨大的网,耦合严重
- 架构师:将这个巨大的网梳理开,提升团队效率
- 工程架构、业务架构、流程管理
- 跨平台:在不同平台可以用同一套代码
自身-打造技术品牌
第一层交付:满足交付基本技能
- 对Android系统有深度了解和认识
- 对开发用语言熟练
- 基本素养:代码质量、业务理解、协同合作等
第二层交付:打造自身技术高度
有些人似乎无法理解或接受细微差异所具有的重大意义。我很想提醒他,其实刘翔也就跑的比我快那么几秒而已
-
木桶理论or长板理论
- 互联网行业更需要有自己的长板,能够在行业中领先的人才
- 长板:某领域前20%——越多天花板越高
-
技术高度
- 对系统底层足够了解
- 有架构设计的能力
- 业务能力足够强
第三层交付:君子不器,培养综合素养
- 思维:不能逃避真正的思考
- 认知:对自己有足够的认识,以及自控力
- 开放:持续学习;保持对技术的好奇心;开源
小结
- 所有的技能都可以将客户端作为实验场
- 只要有长板,就会有相应的高度的职业天花板
- 在移动互联网行业永远在学习成长
认识Android系统
系统应用层
自己开发的App和系统自带的App都在这一层,在这层两种App本质上没啥区别。
可以直接调用一些系统App的功能,比如打电话、发短信等。自己开发的app也可以给其他产品提供调用功能。
Java API层
这层是Android Framework提供给开发者的接口,用这些接口打造各自的App。
这层主要的技术栈就是最基础的交付内容,如:页面+逻辑+页面。
原生 C/C++层
一些核心的系统服务和组件是C/C++编写的,可以用Android NDK 从原生代码访问一些原生平台库。
Android Runtime
这层会涉及虚拟机。
硬件抽象层 (HAL)
想要访问硬件组件,如相机、传感器和蓝牙等,会用到这一层加载的库模块。
Linux 内核
Android 平台的基础是 Linux 内核。例如,Android Runtime (ART) 依靠 Linux 内核来执行底层功能,例如线程和内存管理。使用 Linux 内核可让 Android 利用主要安全功能,并且允许设备制造商为著名的内核开发硬件驱动程序。
APK的构成
- AndroidManifest.xml :定义的四大组件,相关权限问题
- classes.dex :所有编写的java
- res文件夹:resource缩写,资源文件夹,包括图片、颜色、字符串,以及搭建的XML布局文件
- META-INF文件夹:存在签名和证书,用于校验和安全
- lib文件夹:主要是存放C/C++代码编译成的so文件
认识Git-代码仓库
- remote repository:远程仓库
- local repository:本地仓库
- Index/Stage:本地仓库暂存区
- workspace:工作区
- 单人并不是指自己,而是团队协作中每个人的效率
- 效率包括:敲代码更快、编译更快、部署发布更快、测试更方便
第二层交付:团队和公司效能
-
大部分开发了两年以上的客户端有以下症状:
- 代码复杂度高、编译慢
- 新增代码复杂、扩展性差
- 代码耦合严重、牵一发动全身
-
怎么治?
- 深入代码内部是一个巨大的网,耦合严重
- 架构师:将这个巨大的网梳理开,提升团队效率
- 工程架构、业务架构、流程管理
- 跨平台:在不同平台可以用同一套代码
自身-打造技术品牌
第一层交付:满足交付基本技能
- 对Android系统有深度了解和认识
- 对开发用语言熟练
- 基本素养:代码质量、业务理解、协同合作等
第二层交付:打造自身技术高度
有些人似乎无法理解或接受细微差异所具有的重大意义。我很想提醒他,其实刘翔也就跑的比我快那么几秒而已
-
木桶理论or长板理论
- 互联网行业更需要有自己的长板,能够在行业中领先的人才
- 长板:某领域前20%——越多天花板越高
-
技术高度
- 对系统底层足够了解
- 有架构设计的能力
- 业务能力足够强
第三层交付:君子不器,培养综合素养
- 思维:不能逃避真正的思考
- 认知:对自己有足够的认识,以及自控力
- 开放:持续学习;保持对技术的好奇心;开源
小结
- 所有的技能都可以将客户端作为实验场
- 只要有长板,就会有相应的高度的职业天花板
- 在移动互联网行业永远在学习成长
认识Android系统
系统应用层
自己开发的App和系统自带的App都在这一层,在这层两种App本质上没啥区别。
可以直接调用一些系统App的功能,比如打电话、发短信等。自己开发的app也可以给其他产品提供调用功能。
####Java API层
这层是Android Framework提供给开发者的接口,用这些接口打造各自的App。
这层主要的技术栈就是最基础的交付内容,如:页面+逻辑+页面。
原生 C/C++层
一些核心的系统服务和组件是C/C++编写的,可以用Android NDK 从原生代码访问一些原生平台库。
Android Runtime
这层会涉及虚拟机。
硬件抽象层 (HAL)
想要访问硬件组件,如相机、传感器和蓝牙等,会用到这一层加载的库模块。
Linux 内核
Android 平台的基础是 Linux 内核。例如,Android Runtime (ART) 依靠 Linux 内核来执行底层功能,例如线程和内存管理。使用 Linux 内核可让 Android 利用主要安全功能,并且允许设备制造商为著名的内核开发硬件驱动程序。
APK的构成
- AndroidManifest.xml :定义的四大组件,相关权限问题
- classes.dex :所有编写的java
- res文件夹:resource缩写,资源文件夹,包括图片、颜色、字符串,以及搭建的XML布局文件
- META-INF文件夹:存在签名和证书,用于校验和安全
- lib文件夹:主要是存放C/C++代码编译成的so文件
认识Git-代码仓库
- remote repository:远程仓库
- local repository:本地仓库
- Index/Stage:本地仓库暂存区
- workspace:工作区