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

65 阅读5分钟

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

本节重点讲解Android的系统构成以及做好一个客户端的基本要求

主要内容:
1、客户端需要的知识图到底广不广?
2、客户端的成长天花板到底高不高?
3、整个培训课程的体系化认知

1,从移动生态讲起

了解移动互联网是怎么运行的

1.1 从移动互联网讲起

手机作为获取信息的最主要媒介,不过是十几年来的事情
表面上是人与机器的关系,本质上还是人与人的关系
在移动互联网的世界里,客户端是离用户最近的研发

1.2 组织内部的精简结构

1.jpg

1.3国产App的赛道和代表

B9CA65F0A095ABAA87CD0721BD86FD56.jpg

2,Android知识图谱

作为研发,最重要的是做出自己的贡献,这主要通过交付来实现。交付分为对内,对外和自身三种,每种也分为不同的层次,每个层次要求的技能点是不同的。

简化的模型

0AEA0C3A1258D26EA65DAEFE56409C94.jpg

对外(用户):为用户创造价值
对内(公司):对内都是成本,对外才是收益
自身(个人):自身也是产品,自身的技术品牌

2.1 对外为用户创造价值

第一层交付:页面+逻辑+数据
页面:用户所看见的界面包括图形
逻辑:功能实现所需要的逻辑方式
数据:用户在页面上的操作以及即将产生的情况
简单的交付知识图谱

24E54079F54F0B0AD601EDBB373D5508.jpg

第二层交付:多样性需求

多样性需求的知识图谱

50BC7AF48A48A62D7FE226176834A24B.jpg

第三层交付:体验+质量+安全+个性化

深层次需求的知识图谱

26A51BE0440AD0D23CDCF60B5639A1F1.jpg

2.2 对内-减少公司成本

第一层交付:单人效能

8D0D581D61C84FE9B4464DD65A238EC7.jpg

单人效能的技术图谱

0233D578D333D9F3AD295B0FE1EDC9E0.jpg

第二层交付:团队效能
需要团队成员合作完成项目 6C0FC6CA51061267F13433ECA3EF636B.jpg

内部就是一个巨大的网

团队效能的技术图谱

8DCECC98DA988DE419F7218A15FEBE4A.jpg

2.3 自身-打造技术品牌

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

B7109E41C528351E0D5849A0AFF46E0B.jpg

第二层交付:打造自身的技术高度
木桶理论or长板理论?
木桶能装水的多少取决于最短的那块木板,但是若将木桶倾斜,则若长板无限长就能装无限的水
什么是长板?
当你在某个领域可以达到行业前20%,你的职业生涯就延长了
当你在两个领域达到行业前20%,那你的天花板就很高了
当你在三个以上领域达到行业前20%,恳请你带我飞!!!
技术高度的技术谱图

B1E723A40327E7BA13A251FDCC642AA6.jpg

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

9017A71E90F20404AD77D0E52B444B43.jpg

人们为了逃避真正的思考,是可以做任何事情的
有三样东西是极端坚硬(hard)的,钢铁、钻石以及认识自己
Stay Hungry, Stay Foolish

程序员发展的金字塔

35EB4949FB0C318A8C540F85EDAA44B4.jpg

1、不是只有管理这条路,发展路径是多样的
2、每个阶段都有自己要面对的难题

3,认识Android系统

了解Android系统,熟悉将来

4AAC0BE0DD143BB99C0CFCEF694FC9A7.jpg

Android系统总图

系统应用层

B971A21FE9A389F7453E54A0B496EC75.jpg

这一层就是个app所在的最上层,我们自己开发的app和系统自带的app都在这一层,两种app本质上没有太大的区别。一些系统的app提供的功能我们可以直接调用,比如打电话、发短信等,当然我们自己开发的app也可以给其他产品提供类似的调用功能

Java API层

BBF18B9AC898548AD749D471F8953850.jpg

这层就是 Android Framework 提供给开发者的接口,我们可以基于这些接口打造各自的 App 。在这一层主要的技术栈就是最基础的交付内容,包括页面+逻辑+页面,一些多媒体相关的需求也有成熟的api可以直接使用。

原生C/C++层和Andrioid Routime

C004CD386B901C8E31CA0BEE5C07B210.jpg

一些核心的系统服务和组件是C/C++编写的,我们可以用 Android NDK 直接从原生代码访问某些原生平台库。从这一层往下,一些多样化的需求就可以被满足的很好,比如音视频编解码、安全、质量、体验等。 硬件抽象层(HAL)

67502F2EED367B03917DD8914DE0E653.jpg

主要提供硬件组件的封装,包括相机、传感器和蓝牙等。当框架 API 要求访问设备硬件时,Android 系统将为该硬件组件加载库模块。

Linux内核

4771A2627DA12139A78B20E52D196A11.jpg

Android 平台的基础是Linux内核。例如,Android Runtime(ART)依靠Linux内核来执行底层功能,例如线程和内存管理。使用Linux内核可让Android利用主要安全功能,并且允许设备制造商为著名的内核开发硬件驱动程序。

APK构成

A6CA407ADA42F0AF8FE2145944310088.jpg

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

4,开发工具

Android 开发用的IDE是Android Studio,下载和配置直接参考官方文文档即可:developer.android.google.cn/studio Git代码存储:

02C58C387BFCB692E00C4B5ED500101F.jpg

Workspace:工作区,本地电脑存放项目文件的地方,自己来指定位置
Remote Repository:远程仓库,也就是代码存在的地方
Local Repository: 本地仓库,也就是把代码拉取到本地存放的地方
Index/Stage: 本地仓库的暂存区
1、本地设置:
git config -- global user.name"your name"
git config -- global user.email"youremail@github.com"
2、创建本地仓库
git ini
git clone < urlk >
git pull
3、本地分支:
创建:git branch < branch-name >
切换:git checkout < branch-name >
4、提交:
git add.
git commit-m"commit-info"
git push

Git常用指令速查表

3BFBFE3CCF8001C5A72B6A56C9A52CB7.jpg

5,总结:

Android组成比较复杂,学习的内容比较丰富,对于刚刚才接触的我而言充满了未知的挑战,我希望我能在这未知的Android客户端收获到我所需要的知识与能力以此来面对未来无限的抱负!