第一章内容优化

This commit is contained in:
feiocng 2023-07-05 16:10:16 +08:00
parent 8b908c7126
commit bac6ff480e

View File

@ -1,10 +1,14 @@
# 第1章 引言
`Android`系统并不是一个新兴的技术,如今`Android`已经占领各大移动端市场,不单单是手机市场,还有许多智能设备也是使用的`Android`系统来驱动,例如智能电视、`Android`机顶盒、车载娱乐系统、智能手表、智能家居等等,由于`Android`的灵活性和开放性,让其可定制性在各类设备中得到充分的利用。开发者可以根据自身业务的需求,自由的改造`Android` 系统。在这一章中,将简单的介绍`Android`系统和定制。通过这一章的学习,让读者对于`Android`系统中的常见名词有一个简单的了解。
`Android`系统是一款开源的移动设备操作系统,任何个人与组织都能轻易从网络上获取它的源码,编译修改并刷写到自己的设备上,这种独特的魅力吸引了众多的商业公司与开源社区,来自全球的开发测试与玩机人员,孜孜不倦的为其修正添加与测试系统功能。经历数十载发展,如今的`Android`不单只应用于手机市场,还有许多智能设备也是使用的`Android`系统来驱动,例如智能电视、机顶盒、车载娱乐系统、智能手表、智能家居等等,由于`Android`系统的灵活性和开放性,让其可定制性在各类设备中得到充分的利用。开发者可以根据自身业务的需求,自由的改造`Android`系统。
本书内容将围绕着系统的编译修改、美化、安全分析增强等众多应用场景,讲解在`Android`系统实际开发定制过程中的一些技巧。由于国内用户时常将`Android`称为安卓,因此,本书后面部分讲解,内容描述中遇到`Android`与安卓,表述的都是同一个概念。
在这一章中,将简单的介绍`Android`系统和定制。通过这一章的学习,让读者对于`Android`系统中的常见名词有一个基本的了解。
## 1.1 AOSP是什么
`Android`操作系统是如今最流行使用最广的智能手机操作系统,它的发展受到广大厂商和用户的支持,而`Android`操作系统的开源使它可以被任何人定制化,从而满足各类厂商和不同需求的用户。
`Android`操作系统是如今最流行、使用最广泛的智能手机操作系统。它的发展受到广大手机厂商和用户的支持,而`Android`操作系统的开源使它可以被任何人定制化,从而满足各类厂商和不同需求的用户。
`AOSP`的全称是`“Android Open Source Project”`,也就是安卓开源项目,它是由谷歌发起的移动设备的操作系统开源项目,任何人都可以自由地获取完整的项目源码,以及提交更新完善项目,同时,谷歌也会不断地迭代更新版本。
@ -26,7 +30,7 @@
### 1.1.2 Apps
`Apps`是日常开发的应用层,用户安装的应用游戏等等都属于这一层,普通应用基本都在手机的目录`/data/app`中。包括`AOSP`提供的系统`APP`,也属于应用层。例如相机、短信、图库,在`/system/app`目录下的应用。应用层直接对接用户的输入操作和输出展示。这里的输入指的是,对手机进行的操作,例如点击屏幕,手机上的按键,所有对手机进行的操作行为,统称为一种输入。而输出指的是,手机接收到输入行为后的一种反馈,例如屏幕亮了,手机震动,页面刷新等等所有通过手机展示给你看到的,都算是手机的输出。
`Apps`是日常开发的应用层,用户安装的应用游戏等等都属于这一层,普通应用基本都在手机的目录`/data/app`中。包括`AOSP`提供的系统`APP`,也属于应用层。例如相机、短信、图库,在`/system/app`目录下的应用。应用层直接对接用户的输入操作和输出展示。这里的输入指的是,对手机进行的操作,例如点击屏幕,手机上的按键,所有对手机进行的操作行为,统称为一种输入。而输出指的是,手机接收到输入行为后的一种反馈,例如屏幕亮了,手机震动,页面刷新等等所有通过手机展示给你看到的,都算是手机的输出。
### 1.1.3 Framework
@ -53,7 +57,7 @@ cp /system/framework/framework.jar /sdcard/
adb pull /sdcard/framework.jar ./
```
然后使用`jadx`打开将`framework.jar`文件,如下图所示:
然后使用反编译工具`jadx`打开系统框架文件`framework.jar`。反编译后的程序代码会在程序的主窗口显示,左侧显示的包名与类列表,则是`AOSP`框架不同的组件的实现部分。如下图所示:
![jadx_framework](images/jadx_framework.png)
@ -63,7 +67,7 @@ adb pull /sdcard/framework.jar ./
### 1.1.5 Android Runtime
缩写`ART`,是`Android5.0`中的使用的新技术,替换了以前的`Dalvik`虚拟机运行环境。虽然`android`开发常常使用的是`java`,但是`android`开发的应用并不是运行在`JVM`虚拟机中,而是类似的针对`dex`结构的`Dalvik`虚拟机和`ART`虚拟机。在`android4.4`开始测试`ART`功能,随后逐渐使用`ART`虚拟机全面替代了`Dalvik`虚拟机。`ART`使用了更高效的代码编译技术`Ahead-of-Time`,简称`AOT`编译。大致就是在安装应用时,将程序代码编译成可执行的机器码,而在运行时不再需要编译。由此提高了应用的运行效率,极大的提高用户体验。
安卓运行时缩写`ART`,是`Android`系统5.0使用的新技术,替换了以前的`Dalvik`虚拟机运行环境。虽然`Android`开发常常使用的是`java`编程语言,但是`Android`开发的应用并不是运行在`JVM`虚拟机中,而是类似的针对`dex`结构的`Dalvik`虚拟机和`ART`虚拟机。在`Android`4.4开始测试`ART`功能,随后逐渐使用`ART`虚拟机全面替代了`Dalvik`虚拟机。`ART`使用了更高效的代码编译技术`Ahead-of-Time`,简称`AOT`编译。大致就是在安装应用时,将程序代码编译成可执行的机器码,而在运行时不再需要编译。由此提高了应用的运行效率,极大的提高用户体验。
### 1.1.6 HAL硬件抽象层
@ -71,14 +75,18 @@ adb pull /sdcard/framework.jar ./
### 1.1.7 Linux内核
系统的最重要的核心部分内核负责与设备底层的硬件进行交互。比如显示驱动、音频驱动、WIFI驱动、电源驱动、内存管理、进程管理网络通信等等内核相当于一个操作系统的灵魂。
系统的最重要的核心部分内核负责与设备底层的硬件进行交互。比如显示驱动、音频驱动、WIFI驱动、电源驱动、内存管理、进程管理网络通信等等内核相当于一个操作系统的灵魂。
目前国内多数的手机厂商生产的手机都会开源配套的内核源代码。从安卓11开始安卓引入了GKI内核的概念目标旨在让手机内核接口统一减少碎片化同时达到通用内核可以启动不同设备的目标。比如一些安卓12的小米手机可以使用GKI内核进行刷机替换并成功启动设备无需编译厂商开源的内核代码。
Linux内核的修改需要谨慎错误的修改会让设备无法正常开机内核代码调试起来也比系统组件代码困难得多本书会在后面讨论内核代码的修改与编译。
## 1.2 系统开发,定制,刷机,改机分别是什么
系统开发是指开发新的操作系统或对现有操作系统进行修改和优化的过程。这通常需要专业的编程技能和深入的计算机系统知识。
系统开发是指开发新的操作系统或对现有操作系统进行修改和优化的过程。这通常需要专业的编程技能和深入的计算机系统知识。
定制是指根据客户的需求,对软件或硬件进行修改,以满足特定的需求。这可以包括添加新功能、修改现有功能或更改用户界面等。
定制是指根据自身应用场景与功能的需求,对软件或硬件进行修改,以满足特定的需求。这可以包括添加新功能、修改现有功能或更改用户界面等。
刷机是指在手机或其他电子设备上,安装或替换操作系统的过程。这通常需要在设备上进行一些技术操作,例如解锁设备的引导加载程序,或使用特殊的刷机工具进行刷写。
@ -86,27 +94,28 @@ adb pull /sdcard/framework.jar ./
### 1.2.1 系统开发
常规的`Android`开发,属于应用层开发。而在开发应用层时,会接触到大量的系统提供的`API`,为获取权限、跨进程通信、网络请求等功能提供了便利。而运行的`App`整个生存周期都是寄托于`Android`框架中。作为开发人员,往往最多面对的问题就是,系统给你提供了哪些功能,系统允许你哪些权限范围。但是并不代表着,能满足所有群体的所有需求这个时候就需要了解`Android`系统架构,根据自己的需求,去添加功能提供接口(`API`)给应用层开发的`App`使用。
人们口中常说的`Android`开发通常指的是App应用层开发。在开发应用程序时会接触到大量的安卓SDK提供的`API`,为获取权限、跨进程通信、网络请求等功能提供了便利。而运行的`App`整个生存周期都是寄托于`Android`框架中。作为开发人员,往往最多面对的问题就是,系统给你提供了哪些功能,系统允许你获取哪些权限。但是并不代表着,能满足所有群体的所有需求SDK中提供了通用统一的编程接口而一些定制化的需求需要依赖系统没有导出的接口或者隐藏的API这个时候就需要了解`Android`系统架构与代码修改方法,根据自己的需求,去添加功能提供接口(`API`)给应用层开发的`App`使用。
非常常见的一个场景就是,`AOSP`是谷歌开源的系统,而谷歌的开发者并不一定了解其他国家的国情,用户的习惯。那么国内的厂商进行系统开发扩展功能,就需要考虑到国内用户体验,对界面,操作方式,系统服务等一些功能进行开发,并适配自己的硬件
`AOSP`是谷歌开源的系统,谷歌官方定制并出品的系统,并不一定完全符合当前国家用户的使用习惯。这种本地化的定制与需求十分旺盛,这也是国内的手机厂商乐此不疲修改系统并进行扩展的核心原因。在考虑到不同国家用户的使用体验时,界面布局、样式呈现、操作方式、服务本地化等都是系统定制关注的重点,在现代化物联网的今天,网络硬件适配与功能融合也是系统定制的一个重要方向。这些内容的实现,都离不开对`Android`系统的底层原有的代码进行修改定制化,调整系统的部分框架和核心代码来实现新的功能,例如硬件的驱动支持,优化系统的性能,实现本地化功能的系统`ROM`
这里主要是对`Android`系统的底层原有的代码进行修改定制化,调整系统的部分框架和核心代码来实现新的功能,例如硬件的驱动支持,优化系统的性能,实现开发者自己的`ROM`
### 1.2.2 定制
系统定制也是属于系统开发的一种,属于轻量级的改动。往往不会对系统进行太大的变动。比如下面的场景。系统就像是一个沙箱,开发的应用是在沙箱中运作的小盒子。需要对应用进行分析和观测时,可以通过修改小盒子运行流程时对系统相关的调用,来分析应用执行的各种状态。只要对`Android`系统有足够的了解,就可以像开了上帝视角一般,对普通应用进行跨维度的分析。
系统定制属于系统开发的一种属于轻量级的二次开发。往往不会对系统核心进行太大的改动。比如安全领域的App逆向分析场景。把系统比作一个分析沙箱开发的应用运行于沙箱中。需要对应用进行分析和观测时可以通过修改小盒子运行流程时在相关系统接口与系统相关的调用上注入分析代码来监测应用执行时的各种状态。只要对`Android`系统有足够的了解,就可以像开了上帝视角一般,对普通应用进行跨维度的分析。
轻量级的定制,比如对系统的预装应用进行修改,优化桌面的结构,预装系统权限`App`,替换系统默认应用,修改配置等等。
掌握了系统的框架结构,了解系统的运作原理,对系统的预装应用进行修改,优化桌面的结构,预装系统权限`App`,替换系统默认应用,修改配置等等,这些操作都不在话下。
在实际定制过程中,厂商与大团队多人开发`ROM`功能进行分层分模块对整个源码的系统UI运行优化驱动支持等等进行完整的改造可以看作是系统开发而个人或小团队不考虑代码的兼容性不考虑多设备的适配不考虑用户安全和隐私保护仅为自身需求而进行修改`ROM`,这种行为可以叫专属定制。
在本人看来,可以简单的划分,大团队多人开发`ROM`功能进行分层分模块对整个源码的系统UI运行优化驱动支持等等进行完整的改造可以看作是系统开发而个人或小团队不考虑代码的兼容性不考虑多设备的适配不考虑用户安全和隐私保护仅为自身需求而进行修改`ROM`,这种行为就可以叫定制。
### 1.2.3 刷机
在最早先的`Android`版本界面非常简陋,而且功能并不是那么完善,随着各大第三方团队的加入,非官方`ROM`越来越多,而官方原版`ROM`长久使用后越来越卡,善于折腾的手机用户就开始尝试使用功能相对完善,界面漂亮,性能更好的第三方`ROM`。更换`ROM`的过程就叫做刷机。刷机的方式通常有两种,分别是线刷和卡刷。
早先的`Android`版本界面非常简陋,而且功能并不是十分完善,随着各大第三方团队的加入,非官方`ROM`越来越多,而官方原版`ROM`长久使用后会有卡顿感,善于折腾的手机用户就开始尝试使用功能相对完善,界面漂亮,性能更好的第三方`ROM`。更换`ROM`的过程就叫做刷机。刷机的方式通常有两种,分别是线刷和卡刷。
线刷指的是刷机时候需要用数据线连接电脑,将线刷包通过数据线刷入设备。这里,刷机用到的系统镜像称为“线刷包”。线刷包一般都是分区镜像`img`后缀的文件。通过执行命令`adb reboot bootloader`,进入设备刷机模式后,然后执行`fastboot flash`命令,刷入对应分区的镜像。而`AOSP`编译完成后默认输出结果就是分区镜像。
卡刷指的是刷机过程不需要使用数据线连接电脑,而是将设备启动进入恢复模式,在该模式下,将放在设备上的卡刷包直接刷入设备。卡刷包一般是一个`zip`格式的压缩包文件。目前,比较流行的第三方设备恢复工具是`TWRP`。刷机流程是先刷入`TWRP`,然后将卡刷包传入手机`sdcard`中。再用`TWRP`的刷入镜像。第三方常见的`ROM`,比如魔趣、`lineageOS``PixelExperience`等系统,`ROM`编译完成后,默认输出结果就是卡刷包。
卡刷指的是刷机过程不需要使用数据线连接电脑,而是将设备启动进入恢复模式,在该模式下,将放在设备上的“卡刷包”直接刷入设备。第三方常见的`ROM`,比如魔趣、`lineageOS``PixelExperience`等系统,`ROM`编译完成后,默认输出结果就是可用来刷入的系统的卡刷包。“卡刷包”一般是一个`zip`格式的压缩包文件里面集成了更新脚本与相应需要更新的内容模块由Recovery模式下提供的刷机功能来完成刷机操作。目前比较流行的第三方设备Recovery模式工具是`TWRP`。刷机流程是先在设备上通过fastboot刷入`TWRP`镜像,然后启动设备到`TWRP`的工作模式下,选择手机`sdcard`中存放的刷机包,导入后完成刷机过程。
### 1.2.4 改机