Android 系统及客户端概览2|青训营笔记

136 阅读6分钟

这是我参与「第四届青训营 」笔记创作活动的的第2天

重点内容

  1. 安卓知识图谱:面对不一样的角色(对外、对内、自身)的不同交付,及每种交付背后的更多层次
  2. 认识安卓系统每一层及其功能
  3. 认识代码仓库Git

详细知识点介绍及例子

Android知识图谱

对内-减少公司成本

第一层交付:单人效率

  • 单人并不是指自己,而是团队协作中每个人的效率
  • 效率包括:敲代码更快、编译更快、部署发布更快、测试更方便

第二层交付:团队和公司效能

  • 大部分开发了两年以上的客户端有以下症状:

    • 代码复杂度高、编译慢
    • 新增代码复杂、扩展性差
    • 代码耦合严重、牵一发动全身
  • 怎么治?

    • 深入代码内部是一个巨大的网,耦合严重
    • 架构师:将这个巨大的网梳理开,提升团队效率
    • 工程架构、业务架构、流程管理
    • 跨平台:在不同平台可以用同一套代码

自身-打造技术品牌

第一层交付:满足交付基本技能

  • 对Android系统有深度了解和认识
  • 对开发用语言熟练
  • 基本素养:代码质量、业务理解、协同合作等

第二层交付:打造自身技术高度

有些人似乎无法理解或接受细微差异所具有的重大意义。我很想提醒他,其实刘翔也就跑的比我快那么几秒而已

  • 木桶理论or长板理论

    • 互联网行业更需要有自己的长板,能够在行业中领先的人才
    • 长板:某领域前20%——越多天花板越高
  • 技术高度

    • 对系统底层足够了解
    • 有架构设计的能力
    • 业务能力足够强

第三层交付:君子不器,培养综合素养

  • 思维:不能逃避真正的思考
  • 认知:对自己有足够的认识,以及自控力
  • 开放:持续学习;保持对技术的好奇心;开源

小结

  • 所有的技能都可以将客户端作为实验场
  • 只要有长板,就会有相应的高度的职业天花板
  • 在移动互联网行业永远在学习成长

认识Android系统

img

系统应用层

自己开发的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的构成

img

  • 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系统

img

系统应用层

自己开发的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的构成

img

  • AndroidManifest.xml :定义的四大组件,相关权限问题
  • classes.dex :所有编写的java
  • res文件夹:resource缩写,资源文件夹,包括图片、颜色、字符串,以及搭建的XML布局文件
  • META-INF文件夹:存在签名和证书,用于校验和安全
  • lib文件夹:主要是存放C/C++代码编译成的so文件

认识Git-代码仓库

  • remote repository:远程仓库
  • local repository:本地仓库
  • Index/Stage:本地仓库暂存区
  • workspace:工作区

20220726-221524.jpg