mirror of
https://github.com/feicong/rom-course.git
synced 2025-08-29 02:35:20 +00:00
第1章内容优化调整
This commit is contained in:
parent
7b18ea3bc6
commit
b23f4fc615
@ -4,7 +4,7 @@
|
||||
|
||||
## 1.1 AOSP是什么
|
||||
|
||||
`Android`操作系统是如今最流行使用最广的智能手机操作系统,它的发展受到广大厂商和用户的全力支持,而`Android`操作系统的开源使它可以被任何人定制化,从而满足各类厂商和不同需求的用户。
|
||||
`Android`操作系统是如今最流行使用最广的智能手机操作系统,它的发展受到广大厂商和用户的支持,而`Android`操作系统的开源使它可以被任何人定制化,从而满足各类厂商和不同需求的用户。
|
||||
|
||||
`AOSP`的全称是`“Android Open Source Project”`,也就是安卓开源项目,它是由谷歌发起的移动设备的操作系统开源项目,任何人都可以自由地获取完整的项目源码,以及提交更新完善项目,同时,谷歌也会不断地迭代更新版本。
|
||||
|
||||
@ -16,29 +16,31 @@
|
||||
|
||||

|
||||
|
||||
对于新手而言,刚开始接触安卓源码时,对于很多基础理论性的知识都是懵懵懂懂的。这些基础并不需要完全的记住,只需要大概有这么一个概念,以及了解它们之间依赖关系的印象即可,等以后实践多了,再过头看这部分内容,温故一下理论部分,就会茅塞顿开了。
|
||||
### 1.1.1 Android框架
|
||||
|
||||
`Apps`是日常开发的应用层,使用手机日常安装的应用,游戏等等都属于这一层,普通应用基本都在手机的目录`/data/app`中。包括`AOSP`提供的系统`APP`,也是属于应用层。例如相机、短信、图库,在`/system/app`目录下的应用。应用层直接对接用户的输入操作和输出展示。这里的输入指的是,对手机进行的操作,例如点击屏幕,手机上的按键,所有对手机进行的操作行为,统称为一种输入。而输出指的是,手机接收到输入行为后的一种反馈,例如屏幕亮了,页面刷新等等所有通过手机展示给你看到的,都算是手机的输出。
|
||||
对于新手而言,刚开始接触安卓源码时,对于很多基础理论性的知识都是懵懵懂懂的。这些基础并不需要完全的记住,只需要大概有这么一个概念,以及了解它们之间依赖关系的印象即可,等熟悉`Android`源码后,大多数理论知识部分,就会茅塞顿开了。
|
||||
|
||||
`Framework`框架层。这里简单介绍一下框架的概念,在开发过程中,很多功能是多数开发人员所共同需求的基础功能,这些功能是作为一个智能手机系统所必备的基础部分,例如查询`sim`卡信息,跨进程的通信,窗口的管理等等,这个部分就是框架,由基础组建而成的摩天大楼。普通应用就像是这栋大楼的住户,所以和应用打交道最多的就是基础功能,提供开发应用时所用到的`API`和组件支持。如果你是一名安卓开发人员,相信这里是你在开发中接触最多的部分。下面简单列举几个框架层中的关键组件。
|
||||
简单介绍一下框架的概念,框架是一种软件开发的基础结构,它提供了一组标准化的、可重用的代码和工具,帮助开发者更加高效地开发应用程序。通常,框架包括一些约定、规则和指南,以及可以被开发者扩展的可插入的模块。
|
||||
|
||||
1. **Activity Manager**是`Android`最核心的部分,它负责了系统中四大组件的启动、调度、管理。所有的Activity的生命周期都是在它的范畴。
|
||||
框架的设计目的是简化开发过程,提高代码的可维护性和可扩展性,并促进开发人员之间的协作。通过使用框架,开发人员可以专注于业务逻辑而不必处理底层的实现细节,从而减少开发时间和成本,同时也能够降低代码错误率和风险。常见的框架有`Web`框架、移动应用框架、游戏引擎框架等。下面简单介绍`Android`框架的结构。
|
||||
|
||||
### 1.1.2 Apps
|
||||
|
||||
`Apps`是日常开发的应用层,用户安装的应用,游戏等等都属于这一层,普通应用基本都在手机的目录`/data/app`中。包括`AOSP`提供的系统`APP`,也是属于应用层。例如相机、短信、图库,在`/system/app`目录下的应用。应用层直接对接用户的输入操作和输出展示。这里的输入指的是,对手机进行的操作,例如点击屏幕,手机上的按键,所有对手机进行的操作行为,统称为一种输入。而输出指的是,手机接收到输入行为后的一种反馈,例如屏幕亮了,手机震动,页面刷新等等所有通过手机展示给你看到的,都算是手机的输出。
|
||||
|
||||
### 1.1.3 Framework
|
||||
|
||||
`Framework`框架指的是包含了大量系统级服务和`API`的软件层。它位于操作系统内核(Linux)和应用程序之间,提供了一组通用的、可重用的软件组件,以方便开发者构建各种类型的应用程序。下面简单列举几个框架层中的关键组件。
|
||||
|
||||
`Framework`框架被设计成一个分层架构,包含多个组件,如`Activity Manager、Window Manager`等。这些组件与应用程序和硬件之间进行交互,并提供了许多通用功能,如界面管理、数据存储、网络通信等。
|
||||
|
||||
通过使用`Framework`框架,开发人员可以快速地编写复杂的应用程序,并在不同设备上运行,同时也能够轻松地处理常见的`Android`应用程序逻辑。此外,由于`Framework`框架的广泛使用,它还为第三方开发者提供了良好的兼容性和稳定性。下面简单列举几个`Framework`中的组件。
|
||||
|
||||
1. **Activity Manager**负责了系统中四大组件的启动、调度、管理。所有的`Activity`的生命周期都是在它的范畴。
|
||||
2. **Location Manager**位置信息和定位的管理组件
|
||||
|
||||
3. **Telephony Manager**电话管理组件,可以获取`sim`卡相关信息以及网络信息
|
||||
|
||||
4. **Window Manager**窗口程序管理组件
|
||||
|
||||
|
||||
5. **Native Libraries**。`C/C++`的常用库的支持,比如比较典型的libc、ssl、OpenGL、WebKit等等。为开发大大的提高了效率和性能。避免每次用到都需要自己去找工具库。
|
||||
|
||||
6. **Android Runtime**。缩写就是ART,是Android5.0中的使用的新技术,替换了以前的Dalvik虚拟机运行环境。虽然android开发常常使用的是java,但是android开发的应用并不是运行在JVM虚拟机中,而是类似的针对dex结构的Dalvik虚拟机和ART虚拟机。在android4.4开始测试ART功能,随后逐渐使用ART虚拟机全面替代了Dalvik虚拟机。ART使用了更高效的代码编译技术Ahead-of-Time,简称AOT编译。大致就是在安装应用时,将程序代码编译成可执行的机器码,而在运行时不再需要编译。由此提高了应用的运行效率,极大的提高用户体验。
|
||||
|
||||
7. **HAL硬件抽象层**。主要作用于系统内核与硬件之间的接口,是Android系统底层的部分,具有提供给硬件供应商实现的标准接口,Android系统通过接口访问硬件设备,也就是硬件的驱动程序开发,因此Android操作系统能够与各类硬件设备进行交互,不用关心底层硬件的处理。也有个说法是因为硬件供应商不愿意自身的驱动放在内核中被一起开源。所以单独抽出了HAL层来对接硬件驱动。
|
||||
|
||||
8. **Linux内核**。系统的最重要的核心部分,内核负责与设备底层的硬件进行交互。比如显示驱动、音频驱动、WIFI驱动、电源驱动、内存管理、进程管理,网络通信等等,内核相当于一个操作系统的灵魂。
|
||||
|
||||
当应用层调用管理组件后,管理组件会进而调用对应的`Service`来执行相应的函数。简单来说就是`XXX Manager`基本是提供给应用层调用,真正的处理逻辑是在`XXX Service`中处理。如下图所示:
|
||||
|
||||

|
||||
@ -55,40 +57,58 @@ adb pull /sdcard/framework.jar ./
|
||||
|
||||

|
||||
|
||||
### 1.1.4 Native Libraries
|
||||
|
||||
`C/C++`的常用库的支持,比如比较典型的`libc、ssl、OpenGL、WebKit`等等。为开发大大的提高了效率和性能。避免每次用到都需要自己去找工具库。
|
||||
|
||||
### 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`编译。大致就是在安装应用时,将程序代码编译成可执行的机器码,而在运行时不再需要编译。由此提高了应用的运行效率,极大的提高用户体验。
|
||||
|
||||
### 1.1.6 HAL硬件抽象层
|
||||
|
||||
主要作用于系统内核与硬件之间的接口,是`Android`系统底层的部分,具有提供给硬件供应商实现的标准接口,`Android`系统通过接口访问硬件设备,也就是硬件的驱动程序开发,因此`Android`操作系统能够与各类硬件设备进行交互,不用关心底层硬件的处理。也有个说法是因为硬件供应商不愿意自身的驱动放在内核中被一起开源。所以单独抽出了`HAL`层来对接硬件驱动。
|
||||
|
||||
### 1.1.7 Linux内核
|
||||
|
||||
系统的最重要的核心部分,内核负责与设备底层的硬件进行交互。比如显示驱动、音频驱动、WIFI驱动、电源驱动、内存管理、进程管理,网络通信等等,内核相当于一个操作系统的灵魂。
|
||||
|
||||
|
||||
## 1.2 系统开发,定制,刷机,改机分别是什么
|
||||
|
||||
在正式开始学习前,需要先了解一下这些常常出现的关键词基本的含义。
|
||||
在正式开始学习前,需要先了解一下这些常常出现的专业术语基本的含义。
|
||||
|
||||
TODO 感觉这里内容太简单,你看要不要丰富一下。
|
||||
|
||||
### 1.2.1 系统开发
|
||||
|
||||
常规的`Android`开发,属于应用层开发。而在开发应用层时,会接触到大量的系统提供的`API`,为获取权限、跨进程通信、网络请求等功能提供了便利。并且运行的`App`整个生存周期都是寄托于系统环境中。作为开发人员,往往最多面对的问题就是,系统给你提供了哪些功能,系统允许了你哪些权限范围。但是并不代表着,系统能满足所有群体的所有需求。这个时候就需要了解`Android`系统架构,根据自己的需求,去添加功能提供接口给应用层开发的`App`使用。
|
||||
常规的`Android`开发,属于应用层开发。而在开发应用层时,会接触到大量的系统提供的`API`,为获取权限、跨进程通信、网络请求等功能提供了便利。而运行的`App`整个生存周期都是寄托于`Android`框架中。作为开发人员,往往最多面对的问题就是,系统给你提供了哪些功能,系统允许了你哪些权限范围。但是并不代表着,能满足所有群体的所有需求。这个时候就需要了解`Android`系统架构,根据自己的需求,去添加功能提供接口(`API`)给应用层开发的`App`使用。
|
||||
|
||||
非常常见的一个场景就是,`AOSP`是谷歌开源的系统,而谷歌的开发者并不一定了解其他国家的国情,用户的习惯。那么国内的厂商进行系统开发扩展功能,就需要考虑到国内用户体验,对界面,操作方式,系统服务等一些功能进行开发。
|
||||
非常常见的一个场景就是,`AOSP`是谷歌开源的系统,而谷歌的开发者并不一定了解其他国家的国情,用户的习惯。那么国内的厂商进行系统开发扩展功能,就需要考虑到国内用户体验,对界面,操作方式,系统服务等一些功能进行开发,并适配自己的硬件。
|
||||
|
||||
这里主要是对`Android`系统的底层原有的代码进行修改定制化,调整系统的部分框架和核心代码来实现新的功能,例如硬件的驱动支持,优化系统的性能,实现开发者自己的系统结构。
|
||||
这里主要是对`Android`系统的底层原有的代码进行修改定制化,调整系统的部分框架和核心代码来实现新的功能,例如硬件的驱动支持,优化系统的性能,实现开发者自己的`ROM`。
|
||||
|
||||
### 1.2.2 定制
|
||||
|
||||
系统定制也是属于系统开发的一种,属于轻量级的改动。往往不会对系统进行太大的变动。比如下面的场景。系统就像是一个沙箱,开发的应用是在沙箱中运作的小盒子。需要对应用进行分析和观测时,可以通过修改小盒子运行流程时对系统相关的调用,来分析应用执行的各种状态。只要对`Android`系统有足够的了解,就可以像开了上帝视角一般,对普通应用进行跨维度的分析。
|
||||
|
||||
这里主要就是轻量级的定制,比如对系统的预装应用进行修改,优化桌面的结构,预装系统权限`App`,替换系统默认应用,修改配置等等。
|
||||
轻量级的定制,比如对系统的预装应用进行修改,优化桌面的结构,预装系统权限`App`,替换系统默认应用,修改配置等等。
|
||||
|
||||
在本人看来,可以简单的划分,大团队多人开发`ROM`功能,进行分层分模块,对整个源码的系统UI,运行优化,驱动支持等等,进行完整的改造,可以看作是系统开发,而个人或小团队,不考虑代码的兼容性,不考虑多设备的适配,不考虑用户安全和隐私保护,仅为自身需求而进行修改`ROM`,这种行为就可以叫定制。
|
||||
|
||||
### 1.2.3 刷机
|
||||
|
||||
在最早先的`Android`版本界面非常简陋,而且功能并不是那么完善,随着各大第三方团队的加入,非官方`ROM`越来越多,而官方原版`ROM`长久使用后越来越卡,善于折腾的手机用户就开始尝试使用功能相对完善,界面漂亮,性能更好的第三方`ROM`。更换`ROM`的过程就叫做刷机。当然并不是直接刷第三方提供的`ROM`包,而是自己编译一个`ROM`,再刷入手机。
|
||||
在最早先的`Android`版本界面非常简陋,而且功能并不是那么完善,随着各大第三方团队的加入,非官方`ROM`越来越多,而官方原版`ROM`长久使用后越来越卡,善于折腾的手机用户就开始尝试使用功能相对完善,界面漂亮,性能更好的第三方`ROM`。更换`ROM`的过程就叫做刷机。刷机的方式通常有两种,分别是线刷和卡刷。
|
||||
|
||||
当系统修改完成,编译成`ROM`镜像后,就需要将镜像刷入测试设备中,测试修改的系统功能是否正常运转。常见的刷机流程是卡刷和线刷。
|
||||
线刷指的是刷机时候需要用数据线连接电脑,将线刷包通过数据线刷入设备。这里,刷机用到的系统镜像称为“线刷包”。线刷包一般都是分区镜像`img`后缀的文件。通过执行命令`adb reboot bootloader`,进入设备刷机模式后,然后执行`fastboot flash`命令,刷入对应分区的镜像。而`AOSP`编译完成后默认输出结果就是分区镜像。
|
||||
|
||||
线刷指的是刷机时候需要用数据线连接电脑,将线刷包通过数据线方式刷放设备。这里,刷机用到的系统镜像称为“线刷包”。线刷包一般都是分区镜像`img`后缀的文件。通过执行命令`adb reboot bootloader`,进入设备刷机模式后,然后执行`fastboot flash`命令,刷入对应分区的镜像。而`AOSP`编译完成后在输出目录拿到的就是分区镜像。
|
||||
|
||||
卡刷指的是刷机过程不需要使用数据线连接电脑,而是将设备启动进入恢复模式,在该模式下,将放在设备上的刷机镜像直接刷入设备。卡刷包一般是一个`zip`格式的压缩包文件。目前,比较流行的第三方设备恢复镜像是`TWRP`。刷机流程一般是先刷入`TWRP`,然后将卡刷包传入手机`sdcard`中。再用`TWRP`的命令功能刷入镜像。第三方常见的`ROM`,比如魔趣、`lineageOS`、`PixelExperience`等系统,`ROM`编译完成后,输出目录的就是卡刷包。
|
||||
卡刷指的是刷机过程不需要使用数据线连接电脑,而是将设备启动进入恢复模式,在该模式下,将放在设备上的卡刷包直接刷入设备。卡刷包一般是一个`zip`格式的压缩包文件。目前,比较流行的第三方设备恢复工具是`TWRP`。刷机流程是先刷入`TWRP`,然后将卡刷包传入手机`sdcard`中。再用`TWRP`的刷入镜像。第三方常见的`ROM`,比如魔趣、`lineageOS`、`PixelExperience`等系统,`ROM`编译完成后,默认输出结果就是卡刷包。
|
||||
|
||||
### 1.2.4 改机
|
||||
|
||||
每个设备都有各自的唯一标识和对应的指纹信息。这里的指纹信息,并不是指手指的指纹,而是一个概念的意思。比如每个人指纹不同,是因为手指有很多细微的纹路,纹路都组合在一起时,就会每个人的都不同了。设备也是如此,有很多种设备信息,当这些设备信息组合在一起时,就可以当作是这台设备唯一标识的指纹特征。
|
||||
|
||||
在风控对抗中,有些应用会收集设备的各种信息组合为设备指纹,记录起来。有些设备信息是属于风险设备,就会被特殊处理。而自己定制的`AOSP`,以及谷歌天然支持的`Pixel`手机,就很容易被判定为高风险设备。所以自己编译的`ROM`常常会碰到被检测的情况,识别到属于风险设备后,就可能导致`App`闪退,或者不给正确的结果,或者服务端标记为风险用户等等情况。这时,就需要对获取设备信息的各个接口进行修改,或者直接将设备信息相关的文件修改,伪装成一台正常的手机。有时应用并不会通过系统接口来获取设备指纹,而是直接通过系统目录,或者将系统文件结构作为设备信息,或者是绕过你的修改,通过底层内联汇编执行系统调用,来读取文件获取你的设备信息,这种情况就需要分析和持续的对抗了。
|
||||
在风控对抗中,有些应用会收集设备的各种信息组合为设备指纹,记录起来。有些设备信息是属于风险设备,就会被特殊处理。而自己定制的`AOSP`,以及谷歌天然支持的`Pixel`手机,就很容易被判定为高风险设备。所以自己编译的`ROM`常常会碰到被检测的情况,识别到属于风险设备后,就可能导致`App`闪退,或者无法正常运行,或者服务端标记为风险用户等等情况。这时,就需要对获取设备信息的各个接口进行修改,或者直接将设备信息相关的文件修改,伪装成一台正常的手机。有时应用并不会通过系统接口来获取设备指纹,而是直接通过系统目录,或者将系统文件结构作为设备信息,或者是绕过你的修改,通过底层内联汇编执行系统调用,来读取文件获取你的设备信息,不同的情况就需要分析和持续的对抗。
|
||||
|
||||
## 1.3 安卓系统发展史
|
||||
|
||||
@ -111,13 +131,13 @@ adb pull /sdcard/framework.jar ./
|
||||
|
||||
## 1.4 其他常见的第三方定制系统
|
||||
|
||||
`AOSP`并不是唯一可以定制的`ROM`,同样有很多优秀的第三方团队研发的定制系统。由于`AOSP`基本只对`Google`系的机型适配,所以有使用国内常见测试机的人一般会选择使用第三方的定制`ROM`,这些第三方开源`ROM`都有着各自的优点,有很多人会直接选择在这些已经定制修改过`ROM`上二次开发,对于学习来说,选择哪个`ROM`的区别并不会太大,因为底层一套使用的`AOSP`这一套,只要摸透一款,做好的功能随时可以迁移到其他的系统上。
|
||||
`AOSP`并不是唯一可以定制的`ROM`,同样有很多优秀的第三方团队研发的定制系统。由于`AOSP`基本只对`Google`系的机型适配,所以国内普通用户一般会选择使用第三方的定制`ROM`,这些第三方开源`ROM`都有着各自的优点,有很多人会直接选择在这些已经修改过`ROM`上二次开发,对于学习来说,选择哪个`ROM`的区别并不会太大,因为底层使用的`AOSP`这一套,只要摸透一款,开发的功能也可以迁移到其他的系统上。
|
||||
|
||||
### 1.4.1 Mokee
|
||||
|
||||
官网:https://www.mokeedev.com/
|
||||
|
||||
中文名魔趣,。发起于2012年12月12日,是国内最大的第三方非盈利性开源`ROM`,适配了大量国内主流机型,高达近300种。魔趣是由一群热爱`Android`开源社区的热心志愿者维护,他们致力于为用户提供最新、最安全、最稳定的定制`Android`系统,主要针对的用户群体也是国内群众,所以在功能和操作方面非常贴切国人的使用习惯,同时简单纯净,性能出众,所以有些人会使用魔趣作为日常用的手机。下面是魔趣支持的手机厂商,
|
||||
中文名魔趣,发起于2012年12月12日,是国内最大的第三方非盈利性开源`ROM`,适配了大量国内主流机型,高达近300种。魔趣是由一群热爱`Android`开源社区的热心志愿者维护,他们致力于为用户提供最新、最安全、最稳定的定制`Android`系统,主要针对的用户群体也是国内用户,所以在功能和操作方面非常贴切国人的使用习惯,同时简单纯净,性能出众,因此有着不少用户使用魔趣`ROM`作为日常用的手机。下面是魔趣支持的手机厂商,
|
||||
|
||||
| ARK | 华硕 | Essential | 谷歌 |
|
||||
| :--: | :--: | :-------: | :--: |
|
||||
@ -135,7 +155,7 @@ adb pull /sdcard/framework.jar ./
|
||||
|
||||
官网:https://download.pixelexperience.org/
|
||||
|
||||
这是最接近原生`Android`系统的第三方`ROM`,它是在`Google Pixel`系列设备发布的,拥有着`Pixel`系列设备的原生外观和功能,并且添加了更多可定制的功能。它提供了`Gestures、Substratum、EDXposed`等特殊应用,这些应用让用户可以轻松的定制自己的`Android`设备,它还预装了谷歌插件,并且还提供了大量可定制的主题,以及强大的安全性功能。而正常编译出来的`AOSP`刷入后是没有谷歌插件,并且界面`UI`都是非常简陋的。如果你想要打造一个和原生`Android`非常相似的`ROM`,那么完全可以选择它,原生`Android`的界面风格以及自带谷歌套装,以及适配了更多的手机厂商。下面是它所支持的各大厂商。
|
||||
这是最接近原生`Android`系统的第三方`ROM`,它是在`Google Pixel`系列设备发布的,拥有着`Pixel`系列设备的原生外观和功能,并且添加了更多可定制的功能,它还预装了谷歌插件,并且还提供了大量可定制的主题,以及强大的安全性功能。而正常编译出来的`AOSP`刷入后是没有谷歌插件,并且界面`UI`都是非常简陋的。如果你想要打造一个和原生`Android`非常相似的`ROM`,那么完全可以选择它,原生`Android`的界面风格以及自带谷歌套装,以及适配了更多的手机厂商。下面是它所支持的各大厂商。
|
||||
|
||||
| ASUS | Google | Lenovo | Motorola |
|
||||
| :----: | :-----: | :------: | :------: |
|
||||
@ -157,15 +177,13 @@ adb pull /sdcard/framework.jar ./
|
||||
| Razer | Samsung | SHIFT | Sony |
|
||||
| Xiaomi | Zuk | Extras | |
|
||||
|
||||
|
||||
|
||||
## 1.5 初识系统定制
|
||||
|
||||
除了各大知名团队的开源`ROM`,也有一些深入了解安卓原理的开发人员会自己修改`ROM`定制自己的专属工具,亦或者为团队定制专用的功能。不过定制并不是能解决所有问题,要了解定制的优点和缺点,在各种需求场景采用更合适的方案。
|
||||
|
||||
### 1.5.1 系统定制的优点
|
||||
|
||||
学习系统定制的好处是非常多的,这里我简单列举几点。
|
||||
学习系统定制的好处是非常多的,这里简单列举几点。
|
||||
|
||||
1. 可以通过源码的阅读,深入了解`Android`设计的原理,对异常错误排查,性能优化,以及应用提权等等开发应用层的程序也会得心应手。
|
||||
|
||||
@ -183,7 +201,7 @@ adb pull /sdcard/framework.jar ./
|
||||
|
||||
2. 开发成本大,每次修改完代码都需要重新刷机,很多时候哪怕做一个小小的功能,你在测试的过程都在无限的重复编译刷机。并且需要熟悉源码结构,必须深入理解`Android`系统以便于充分利用系统提供的`API`来制定出更加合理的定制方案,
|
||||
|
||||
3. 维护成本大,即使是一个成型的产品后续难免会有优化和更新,`BUG`是不可能没有的。而想要更新,只能选择全部重新刷机,同样每次新的系统版本发布都需要重新定制和迁移,需要耗费大量的时间和精力。
|
||||
3. 维护成本大,即使是一个成型的产品后续难免会有优化和更新,`BUG`是不可能没有的。个人开发者而言,而想要更新,只能选择全部重新刷机,同样每次新的系统版本都需要重新定制和迁移,需要耗费大量的时间和精力。
|
||||
|
||||
4. 安全系数低,`AOSP`定制的系统安全性较低,所以定制的系统可能存在安全漏洞,导致定制系统比原生系统更容易受到攻击。
|
||||
|
||||
@ -191,6 +209,6 @@ adb pull /sdcard/framework.jar ./
|
||||
|
||||
TODO
|
||||
|
||||
## 1.7 小结
|
||||
## 1.6 小结
|
||||
|
||||
TODO
|
||||
|
Loading…
x
Reference in New Issue
Block a user