安卓客户端 | 青训营笔记

198 阅读6分钟

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

Android # 系统及客户端概览

客户端的重要性

客户端的概念:客户端(Client)或称为用户端,是指与服务器相对应,为客户提供本地服务的程序。除了一些只在本地运行的应用程序之外,一般安装在普通的客户机上,需要与服务端互相配合运行。因特网发展以后,较常用的用户端包括了如万维网使用的网页浏览器,收寄电子邮件时的电子邮件客户端,以及即时通讯的客户端软件等。对于这一类应用程序,需要网络中有相应的服务器和服务程序来提供相应的服务,如数据库服务,电子邮件服务等等,这样在客户机和服务器端,需要建立特定的通信连接,来保证应用程序的正常运行 。

根据课件中认为,提供信息的是app,表面是人和机器的关系,本质上还是人与人的关系。

开发流程:产品经理根据人的需求和世界的信息,形成需求,研发工程师来实现,再呈现给用户。所以背后有着一大批人在负责创造和维护这个沟通媒介。客户端开发只是直接面向用户的人

Android 知识图谱

对于一个客户端开发来讲,我们面对的角色主要包括:

  • 对外(用户):为用户创造价值,是最终的目的和宗旨,也是整个系统存在的前提
  • 对内(公司):上面第二个图对应的是更详细的内部交付涉及的团队,实际上比这要复杂的多。这些团队组成了公司这个实体。对内都是成本,对外才是收益。对于内部来讲,我们的目的是降低交易成本。
  • 自身(个人):我们通过自身的努力来推进交付流程,提供给用户好用的产品。同时个人也是一个产品,我们需要打造自身的技术品牌,培养自己的技术实力。

自身- 打造自身的技术品牌

作为客户端研发,打造的产品就是App,通过App给用户提供价值,在这个过程中提升自己。所以从一定程度上说,自身是自己要打造的第二产品。对自身产品的交付也可以分成三个层次。

第一层交付:满足交付的基本技能
graph LR
	基本技能 --> android系统
	基本技能 --> 语言熟练
	基本技能 --> 基本素养
	android系统 --> 基本功能开发
	android系统 --> 了解Framework
	android系统 --> 了解系统
	语言熟练 --> 基本特性
	语言熟练 --> 语法和高效写法
	基本素养 --> 代码质量
	基本素养 --> 业务理解
	基本素养 --> 协同合作
第二层交付:打造自身的技术高度
graph LR
	技术高度 --> 系统底层
	技术高度 --> 架构设计
	技术高度 --> 业务能力
	系统底层 --> android原理
	系统底层 --> linux内核
	系统底层 --> AndroidRuntimel
	架构设计 --> 大型app架构
	架构设计 --> 复杂工程管理
	业务能力 --> 大型项目协同
	业务能力 --> 组织管理
第三层交付:培养自己的综合素养
graph LR
	0号[综合素质]
	1号[思维]
	2号[认知]
	3号[开发]
	0号 --> 1号
	0号 --> 2号
	0号 --> 3号
	1号 --> 系统化思维
	1号 --> 结构化思维
	1号 --> 批判性思维
	2号 --> 个人认知
	2号 --> 自控力
	3号 --> 技术好奇心
	3号 --> 持续学习
	3号 --> 开源

认识Android系统

Android平台架构图

Pasted image 20220725220302.png

系统应用层

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

JavaAPI 层

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

原生 C/C++层

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

Android Runtime

这一层就会涉及虚拟机的知识,在一层会把DEX字节码进行编译,优化执行效率。在一层我们可以做一些体验相关的优化,让代码运行更高效。所需要的技术门槛也就更高一些。

硬件抽象层 (HAL)

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

Linux 内核

Android 平台的基础是 Linux 内核。例如,Android Runtime (ART) 依靠 Linux 内核来执行底层功能,例如线程和内存管理。

使用 Linux 内核可让 Android 利用主要安全功能,并且允许设备制造商为著名的内核开发硬件驱动程序。

APK的构成

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

在进阶班A卷中有此题

开发工具

Android Studio

Git

主要为协作用

下面对git做一些基本介绍

Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。 Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。

Pasted image 20220725220833.png

Git参考

给出菜鸟教程上的一个PDF手册

本日总结

今天是客户端(安卓)青训营的第一天,整体上是对本次青训营的整体介绍,并不涉及具体的技术和代码细节。那么就今天的课程做一个小的总结:

  • 客户端
    • 客户端应该是目前信息化最前沿的部分,比起以往的PC端,客户端的用户比例更高,更具有广泛性
    • 客户端主要还是面向用户,是与人沟通、与人连接的桥梁
  • 知识图谱
    • 对用户,我们应该展示完整功能
    • 对公司,应该降低成本,学会与人合作
    • 对自己,应该提升自己的技能,终身学习

一些想法

通过本日的介绍,我感觉客户端需要掌握的内容还是很繁多的。根据老师介绍,一个简单的滤镜功能可能背后涉及前端代码达到十万行,可见客户端开发的难度之大。应该说,客户端开发岗是一个对技术栈和开发者体力、智力需求都很高的一个岗位。

如何保证自己不被淘汰?在当今互联网发展大潮之下,老师讲,并不是所有人都需要转管理,专精技术一样可行。我认为也是如此,在国外年老的开发者并不罕见,只要提升自己,是可以一直在行业内得到好的工作的。

第一天没有具体介绍技术细节,我会考虑阅读《第一行代码》等相关著作,作为本次青训营的一项课外学习内容,具体内容作为后续几天的笔记持续更新,毕竟有笔记次数要求,而且我还想要奖品