这是我参与「第四届青训营 」笔记创作活动的第1天
Android 系统及客户端概览 课堂笔记
开发与交付
手机作为获取信息的最主要媒介,不过只是十几年的事情。在手机中提供信息的是App,看起来是人和机器的关系,但其实本质还是人与人的关系(毕竟App是人开发的)。产品经理根据人的需求和世界的信息,形成需求,研发工程师来实现,再呈现给用户。
App 的背后是一个团队,做为移动端开发,我们需要面对许多不同的角色。
归类来说,面对的角色主要可以分为三类:对外(用户),对内(公司),自身(个人)
对外 - 为用户创造价值
对用户来说,我们要交付的是产品
第一层交付:页面+逻辑+数据
这层是最基本的交互层,提供页面和逻辑操作,并获取和展示数据。
课上案例:轮盘赌
页面:轮盘、小球
逻辑:小球转动到某个位置,贝塞尔曲线
数据:是否会中奖、在动画播放完毕前结果就已经确定了
第二层交付:多样性需求
这层主要满足更多样化的诉求,比如多媒体内容,游戏等
课上案例:太 空 人
页面布局代码几千行
代码逻辑代码上万行
底层功能代码几万行
第三层交付:体验+质量+安全+个性化
这层主要是对产品进行进一步优化,处理体验,质量,安全,个性化等等问题
对内 - 减少公司成本
对公司来说,我们要交付的是效能
第一层交付:单人效能
这层主要提升团队每个人的开发效率,包括代码编写速度,编译速度,部署和发布速度,测试速度等。
要点有 编译,CICD(持续集成,持续交付 和/或者 持续部署),工具等
第二层交付:团队和公司效能
这层主要提升团队的整体效率,需要从架构入手,搭建一套合适大型团队工作的代码架构。
软件工程并不是人越多开发越快,因为存在沟通成本等等问题。
要点有 工程架构 业务架构 流程管理 跨平台等
自身 - 打造自身的技术品牌
对自身来说,我们要交付的是积累
第一层交付:基本技能
这层掌握最基本的研发技能,能承接需求,能了解与自己打交道的Android平台,这是最关键的交付。
RD,即Research & Development,研发的意思,一般指研发工程师。
第二层交付:打造技术高度
这层主要是打开自身发展的天花板,需要培养自己的优势,打造自身的技术高度。
打造技术高度可以围绕三个方面展开:系统底层,架构设计,业务能力
课上案例:木桶理论 vs 长板理论
决定水桶装水量不一定是最短的木板,可以把水桶斜着放,然后一端无限长,就可以装无限多的水 XD
什么是长板?
某个领域到前 20%,职业生涯延长
两个领域到前 20%,天花板很高
三个领域以上到前 20%,起飞
第三层交付:综合素养
个人提升没有止境,除了技术外,还需要进一步提供软实力。
主要有三个方面:思维,认知,开放
程序发展过程中不是只有管理这条路,发展路径是多样的,并且每个阶段都有自己要面对的难题。
认识Android 系统
1、系统应用层
这一层就是各App所在的最上层了,我们自己开发的App和系统自带的App都在这一层,两种App本质上没有太大区别。一些系统的App提供的功能我们可以直接调用,比如打电话、发短信等,当然我们自己开发的app也可以给其他产品提供类似的调用功能。
2、 Java API 层
这层就是Android Framework提供给开发者的接口,我们可以基于这些接口打造各自的App。在这一层主要的技术栈就是最基础的交付内容,包括页面+逻辑+页面,一些多媒体相关的需求也有成熟的api可以直接使用。
3、原生 C/C++ 层
一些核心的系统服务和组件是C/C++编写的,我们可以用Android NDK 直接从原生代码访问某些原生平台库。从这一层往下,一些多样化的需求就可以被满足的很好,比如音视频编解码、安全、质量、体验等。
4、Android Runtime (ART)
这一层就会涉及虚拟机的知识,在一层会把DEX字节码进行编译,优化执行效率。在一层我们可以做一些体验相关的优化,让代码运行更高效。所需要的技术门槛也就更高一些。
5、硬件抽象层 (HAL)
主要提供硬件组件的封装,包括相机、传感器和蓝牙等。当框架 API 要求访问设备硬件时,Android 系统将为该硬件组件加载库模块。
6、Linux 内核
Android 平台的基础是 Linux 内核。例如,Android Runtime (ART) 依靠 Linux 内核来执行底层功能,例如线程和内存管理。
使用 Linux 内核可让 Android 利用主要安全功能,并且允许设备制造商为著名的内核开发硬件驱动程序。
APK的构成
- AndroidManifest.xml :生命app中四大组件,以及权限等
- classes.dex :所有编写的java、
- res文件夹 :资源文件夹,包括图片、颜色、字符串,以及搭建的XML布局文件
- META-INF文件夹:存在签名和证书,用于校验和安全
- lib文件夹:主要是存放C/C++代码编译成的so文件
开发工具
最推荐的 IDE 是 Android Studio,虽然 IDEA 和 VSCode 装插件也能勉强实现开发,但是比较魔幻且配置麻烦,这里不推荐。
Android Studio 到官网下载即可,理论上没被墙,不过有时候可能会下载得很慢。
Download Android Studio & App Tools - Android Developers (google.cn)
认识 Git
git 是一个版本管理工具
- WorkSpace:需要通过Git进行版本控制的目录和文件,这些目录和文件组成了工作空间,除了.git之外的都属于工作区。
- Index/Stage:暂存区,或者叫待提交更新区,在提交进入repo之前,我们可以把所有的更新放在暂存区。
- Local Repo:本地仓库,一个存放在本地的版本库;HEAD会只是当前的开发分支(branch)。
- Remote Repository:远程仓库,远端存代码的地方
命令速查表
QA
- 图是用 Process On 画的,一年一百多。
- 跨平台和原生:
不要对立着看,跨平台也算客户端的一部分,有开发需求就需要切换。
比如快速验证这类小功能就可以优先用跨平台,如果规模大就用原生或者原生嵌入跨平台。
头条这类大型App 原生多,因为原生性能好一点,且目前总体来讲相对成熟。
- 字节规定 10点上班 7点下班 但是工作按自己需求弹性安排。
一些有趣的数据
App 背后是一个团队,一个50个人,32个研发的团队能值190亿美元。
游戏市场份额占有前三的游戏是 王者荣耀、和平精英和开心消消乐
国民 App (6亿日活)面对的
- 抖音每年消耗9亿度电,相当于山峡发电的千分之三
- 每年羊毛党的市场规模有 1000亿
- 一个季度抖音处理违规:刷分刷赞 3020万次,协助抓获诈骗嫌疑人75人
- 请女朋友吃饭最怕的答案:随便(但选的得让女朋友满意)
抖音春晚:从接到春晚需求(发红包等等)到上线,最短27天
火山是字节的第一个短视频,抖音是其孵化出来的