浅析Android


饱含热情,总会有不经意的美好;满怀期待,总会有突如其来的幸运。

前言

随着5G网络的发展,我们的生活已经逐渐进入了比较成熟的信息时代了!手机和电脑已经慢慢步进了人们的生活和工作当中,成为了密不可分的一部分,方便了生活,也提高了工作的效率!

电脑暂且不聊,手机现在基本上都是人手一部。大多都是日常使用者,加上各厂商的内部独立定制和优化,衍生了许多;很多使用者连手机的新功能都不能完全了解以及运用!

对于安卓的使用和研究开发,我已经陌生了五六年之久了,中途也只是帮朋友的手机解锁刷机这些比较浅层面的接触!介于现在工作的原因,偶尔会有些许闲暇时间,无意间在自己的网盘中翻出来一些之前整理的源码和软件,又引发了自己的兴趣,重拾对Android的热情,就当作三分钟的热度吧!

“刷机”我想很多人都听说过,特别是以前的米粉。这个词之所以为众多人熟悉,是因为不仅仅局限于手机行业之中!但是有多少人了解刷机?刷机有什么优势?为什么要刷机?刷机有哪些作用?刷机可以分为哪几种,怎么刷?借着这次机会,带着这些问题,通过最浅层次的刷机,了解安卓的系统结构!

个人爱好,学到的只是比较局限,如有误区,欢迎指正

个人对于刷机的理解

“刷机”简单的理解就是指对手机的原有系统进行更替换,可以替换为旧版本的系统,根据个人需求定制的系统,新版本的系统,和其他不同本厂商的第三方系统。以此可以达到“短暂”时间提升手机的响应速度;更改手机系统相关的一些东西(如:系统UI界面,自带铃声,软件图片,型号…);更改第三方系统或者其他厂商的系统;升级或者降级系统;修复系统出现的各种bug或者系统损坏造成的功能缺陷(卡顿,发热,费电,显示,相机,信号,声音…),无法使用,无法开机等问题。

刷机方式

目前我所接触到的刷机方法有四种:卡刷、线刷、软刷、厂刷

卡刷

这是很久之前定义的名称,由于内存卡的读写速度和手机中空间位置的利用,且易损坏,不安全,诸多原因,导致现在手机中的内存卡都改为了同固态硬盘的颗粒贴片。而“卡刷”就是利用手机本机的内存卡对手机的系统进行实时更新,局限性比较大,取决于底层的Recovery。

Recvery中,有官方和第三方“Rec”,官方局限性很大,除了清除数据,只能用户刷写官方的卡刷包,且一般只能平刷同系统版本或者升级高系统版本;第三方“Rec”则不同,功能繁多,不仅能刷写第三方的刷机包,还能对系统分区进行调整等一系列操作!在众多的“Rec”中,有着一枝独秀的存在——TERP(Team Win Recovery Project),它是国外Android爱好者一同开发的一款个性化较强的Recovery,拥有强大的功能和自定义接口,支持原生或类原生固件,启用触屏让操作更加方便快捷,一直被安卓玩家所首选喜爱。

线刷

一般是通过Fastboot和驱动,数据线与电脑通信,让电脑将手机所有的字库(硬盘)分区擦除并重新分区写入底层和系统,较为彻底的刷机方式,比较自由的刷机方法(短接触点可点亮大部分黑砖),无视刷机包版本,是否匹配。存在风险;一般被售后和维修师采用。

当Fastboot刷写不彻底或者无法修复软层面所造成的问题时,此时就需要用到另外一种类型——9008模式,也被称为Download模式,可以归类为线刷的一种,但也可以反过来将其归结为线刷,这都不是需要纠结的问题;此模式通常同于挽救“黑砖”,有时候需要拆机短接触点,或者飞线,才能通过驱动被电脑识别,衍生出多种技术,如被用于非法清除手机的账户锁涉及到道德问题,不多余缀!也用于在手机底层的Recovery和Fastboot都被清除或者篡改,无法进入时挽救手机的最后办法;一般与高通的QPST套件配合使用;此方法无法保留用户的资料,除去动硬件,最底层的刷机模式。

软刷

由电脑专业的刷机软件,控制手机,获得权限,通过fastboot刷写第三方recovery并推送刷机包对手机进行刷机(如某精灵,某大师…),对小白比较友好,支持的机型很少,热门的机型占多数,冷门的机型基本没有。另一种版本的卡刷,破除了一些局限性!我是不喜欢的采用这种方式,刷一次基本上底层和系统全乱了!

厂刷

并不是由厂家进行的刷,而是运用厂家提供的硬件设备,扩展电脑外设,对手机的字库(硬盘)擦除并重新写入底层和系统,严重时可以更换硬盘(如字库(硬盘)损坏,扩容…)并重新绑定,结合了硬件层面的线刷,对于技术和经验要求较高!

写了这么多,对于安卓的刷机也阐述的差不多了,而刷机用到的刷机包——安卓的系统,其结构又是怎么样的呢?

自己编译过Android源码人都知道,编译成功后的/out目录下对应输出了很多后缀为“.img”的镜像文件,它们就是各分区对应的文件!算上SD卡的分区,安卓系统一共把ROM,也就是字库(硬盘)分为8各分区:

  • Hboot 分区:启动分区,负责启动,他是SPL所在的分区,即Bootloader,考虑安全的原因,现在的厂家对于这个分区都会上锁。

  • Boot 分区:Ramdisk所在分区,存放着系统内核

  • System 分区:系统分区,存放系统文件

  • Cache 分区:系统缓存数据存放的分区

  • Radio 分区:驱动所在分区,基带、无线存放地

  • Recovery 分区:单词意思,恢复分区,用于卡刷系统,清除数据,切换系统等所用

  • Userdata 分区:用于存放用户数据

  • SDCard 分区:一般为系统和其他分区分割完硬盘所剩的最后容量,即手机的自带内存,这也正是因为许多朋友问到手机内存64G,而实际使用的内存为什么没有64G,除去计算单位的原因,还要被系统以及其他分区占据,所以用户实际能使用的差不多只有50G左右。

system分区详解

该分区是最主要的分区,里面包括了整个系统的文件,在手机端用第三方文件管理便能一目了然!路径为/system,在PC端直接对“system.img”解包,也能达到相应的目的。如果你知道什么是“Root”,那么对于这些文件,你一定不陌生。

/system/app :这个文件夹里面存放的都是系统应用,例如 :设置 相机 安全管家… 如果你想精简系统的无用的app,目标就是这个文件夹了!删除app后,对应的app依赖二进制文件也需要删除;除此之外,里面还有许多系统的UI文件,简单举个例: SystemUI.apk ,很多厂家的状态栏不一样,就是因为它的不一样,解包这个文件就可以修改状态栏,如:时间居中,电池图标,信号图标等等,如果你会Android的逆向和反编译,不妨可以尝试一下,一些个性化比较强的系统可以通过更换主题来达到相应的目的。

/ststem/media :此文件夹主要存放的就是系统的开机动画,现在的厂商一般都移除了开机音乐,之前的小厂商还会放入开机音乐,也存在于这个文件夹,系统的图片,系统铃声…通过此文件夹可以修改开机动画,系统桌面图标的布局,系统UI,系统背景图片等等!

/system/fonts :系统字体库文件夹,各板块的字体都在里面,根据命名即可区分。

/system/xbin :由AOSP构建,存放“Extra”二进制文件,有点像Linux的管理员工具。

/system/bin :该文件夹也是存放着由AOSP构建的本机所有二进制文件,同时还有守护进程;以及所有使用BUILD_EXE CUTABLE构建的除adbd模块。只是被安装在这里,为将LOCAL_MODULE_PATH设置为/sbin,熟悉Linux可能就对此非常眼熟了,这里就不做过多的余缀深挖。

system/etc :存放系统配置文件的文件夹,比如设置的各种设置,桌面图标位置,APN接入点配置等等

system/framework :单词意思,系统框架存放点,Java平台核心文件,里面大多为.jar和被.odex,都是缺一不可的核心文件!

system/lib :系统底层库文件,例如平台运行库等等

system/usr :个人用户文件夹,一些个性化设置存放点,键盘布局,时区文件,共享…和etc较为相似,可以这么理解。只是etc存放的是核心配置。

system/lost found :类似于回收站,只要是yaffs系统貌似都会有

其他的文件夹这里就不做多余的解释了,如果你需要定制或者修改个性化设置,了解清除以上已是绰绰有余了。

根目录各文件夹详解

system文件夹上面已经解释的比较详细了,这里就略过了,只是下面一下根目录的文件夹和上面system文件夹中的文件夹有联系,不过在系统中的作用却是类似。

先从系统启动开始。

init :你会发现有很多此类开头的文件,但只有init为主要启动程序,ini在Windows中本来就是配置文件,这个程序就是系统启动到文件系统是所要必须运行的依赖程序。

init.goldfish.rc & init.rc :系统初始化需要加载的文件

这里就顺带解释解释一下;init.rc定义为初始化脚本,将/system/modules和/system/xbin挂载为cramfs,保护系统,避免被无意破坏。

default.prop :默认配置文件和build.prop类似

build.prop :配置了系统的一些相关设置和数据,例如手机型号等等

lib :所有共享库的文件都在这里,后缀为.so

modules :f非常重要的文件夹,存放内核模块和模块配置文件,主要为fs和net

xbin :类似于Linux系统文件下的“Sbin”;存放了一些系统管理和配置工具

sbin :这就要和上面的线刷联系起来了,熟悉adb命令一看可能就知道,该文件夹主要存放的就是用于adb调试的相关程序!

proc :我理解为工程项目信息文件夹,可为运行时多种文件提供系统信息,波动范围为整个系统。不为某一个特定的程序服务。

dev :存放设备节点文件

etc :和“system/etc”相连,准确来说这个才是上级目录,而“system”中的算子目录,被此文件夹指向

cache :临时文件缓存地,一般为软件或者用户使用时所产生

data :这个文件夹打开可能就豁然开朗了,用户日常使用所安装的软件以及其生成的数据存放地。

sqlite_stmt_journals : 用与存放临时文件数据,根目录下的tmpfs文件系统。

sdcard :SD卡中挂载目录,为FAT32文件系统

root :一般为空文件夹

差不多也进行了一个系统化的了解,大多文件和文件夹都有解释,上文多有提及“root”,接下来我们看看“root”。

安卓中的Root

“Root”中文意思为“根,底部”;最底层,最彻底的意思,反过来就是拥有最高的权限;类似与windows中的管理员权限,一旦获取拥有此权限后,便能对手机的任意文件进行删除,修改,也可以在任意位置新增任意文件。比如卸载一些系统自带的无用app,当然了,这也是我们最初的想法,而要想对系统进行一些更加个性化,深度化的定制,这是最基础,也是深度玩家必经之路,但会破坏系统的完整性,稳定性,安全性;从而导致不能正常的进行OTA在线增量对系统进行升级,其对于流畅度而言,个人认为并没有太大的影响;对于硬件层面,更是没有影响;如果你想要恢复,重刷一下官方的包即可恢复至初。

相之而言,现在比较热门的“面具Magisk”,就是为此而生,通过挂载单独的分区,此分区与系统文件相隔离,独立加载自定义内容,第三方所有改动都在所挂载的分区,从系统分区的角度而言,系统文件本身并没有被修改,依旧可以正常OTA更新系统,备受玩机玩家所青睐。


文章作者: 筱雨涵
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 筱雨涵 !
  目录