这是我参与「第四届青训营 」笔记创作活动的第1天
欢迎关注微信公众号《猿小龙》,为您分享更多编程知识,共同进步!
Ⅰ、目前的Android生态
1.移动互联网
- 人类以前可以与自然界直接进行交互,但是随着移动互联网的兴起,人类与自然界的交互正在向着进行多元化方向发展。
- 就拿移动手机来举例,人们通过手机与自然界交互,作为信息流通的搭桥者,需要产品经理需要完成从现实世界到信息世界,再到机器世界的建模过程,逐步抽象,再逐步与人交互。
-
客户端开发:先由产品经理进行需求分析,确定交互和功能。
-
服务端开发:需要进行推荐内容搜集,形成内容和数据。
-
联合:二者进行QA过程(软件工程实践),最后向客户进行交付。
-
竞争用户注意力资源排序(体现为时间):
Ⅱ、Android知识图谱
1.宏观看app
- 对外:为用户创造价值
- 对内:节约成本
- 自己:提高技术,实现价值
2.交付一:简单交付
-
结构:页面+逻辑+数据
以开心消消乐为例:
-
页面:前端图片渲染和特效动画。
-
逻辑:每种物品相消逻辑(距离、个数、颜色、类别等,需特殊设定)。
-
数据:用户点击屏幕的事件组成,简单来说就是由用户执行的一系列操作抽象为数据。
3.交付二:多样性需求
- 结构:视频+直播+AR+图像+游戏
- 腾讯QQ就是最常见的集合多种多样性需求为一体的app
4.交付三:深层次需求
结构:体验+质量+安全+个性化
- 体验:亦可以称为优化,旨在减少物理资源、时间代价。
- 质量:稳定运行时间。
- 安全:用户隐私、技术安全等。
- 个性化:面向用户。
5.交付四:个人效能
- 结构:编译+CICD+工具
- CICD:指在开发过程中自动执行一系列脚本来减低开发引入 bug 的概率,在新代码从开发到部署的过程中,尽量减少人工的介入。
6.交付五:团队效能
- 结构:工程架构+业务架构+流程管理+跨平台
- Flutter:是Google开发的一套全新的跨平台、开源UI框架,支持iOS、Android系统开发,并且是未来新操作系统Fuchsia的默认开发套件。2017年5月发布第一个版本,并且在2018年12月初发布1.0稳定版,2019年MWC上发布1.2版本。
- :Lynx:由字节跳动自己研发的跨平台技术,用于旗下产品,如:抖音。
7.交付六:基本技能
- 结构:Android系统+语言熟练+基本素养
8.交付七:提升技术高度
- 结构:系统低层+架构设计+业务能力
9.交付八:软素质
- 结构:思维+认知+开放
Ⅲ、正式认识Android系统
1.Android系统及其组成
- Systems apps:系统应用程序:用于支持Android系统运行所必须的一些功能,通常是最核心,最简单和单一的功能,本质上与自己开发的app没有任何区别。
- Java API Framework:开发工程师接触较多。提供诸多接口供开发者调用
- 原生C/C++:用于更加低层的开发,如系统核心服务例程和组件,由于语言特性,实现上使得运行更加快速,满足对速度的要求。
- Android Runtime:开始涉及虚拟机,这一层将DEX字节码进行编译,优化执行的效率,这一层就是进行体验代码优化的层次。
- HAL:硬件抽象层,主要提供硬件组件的封装,包括相机、传感器和蓝牙等。当框架 API 要求访问设备硬件时,Android 系统将为该硬件组件加载库模块。
- Linux内核:Android 平台的基础是 Linux 内核。例如,Android Runtime (ART) 依靠 Linux 内核来执行底层功能,例如线程和内存管理。使用 Linux 内核可让 Android 利用主要安全功能,并且允许设备制造商为著名的内核开发硬件驱动程序。
上面以《国家反诈中心》app举例讲解apk文件组成。apk本身就是一个压缩包。
-
AndroidManifest.xml:包含生命app中四大组件,以及权限等。
-
classes.dex:java文件集合。
-
res文件夹:资源文件夹,包括图片、颜色、字符串,以及搭建的XML布局文件。
-
META-INF文件夹:存在签名和证书,用于校验和安全。
-
lib文件夹:主要是存放C/C++代码编译成的so文件。
-
assets文件夹:是Android的一种特殊目录,用于放置APP所需的固定文件,且该文件被打包到APK中时,不会被编码到二进制文件。
-
okhttp3文件夹:OKHttp是一个处理网络请求的开源项目,Android 当前最火热网络框架,由移动支付Square公司贡献,用于替代HttpUrlConnection和Apache HttpClient(android API23 6.0里已移除HttpClient)。
OKHttpGitHub地址 -
kotlin文件夹:这些文件包含标准(“内置”)Kotlin 类的声明数据,这些类不是编译为.class文件,而是映射到平台上的现有类型(在本例中为 JVM)。例如,kotlin/kotlin.kotlin_builtins包含包 kotlin 中非物理类的信息:Int、String、Enum、Annotation、Collection 等。
2.开发工具Android stdio
developer.android.google.cn/studio
3.代码管理Git
原创声明:部分图片来自博客【Android 客户端专场 学习资料一】第四届字节跳动青训营 - 掘金 (juejin.cn)