玩转android

1、Android 几个模式

正常模式。也就是正常启动Android操作系统的样子。启动操作系统后,可以在开发者选项中打开USB调试。打开后可以用adb命令对连线的手机执行一些操作:

1
2
3
4
5
6
# 查看当前连接的android设备
adb devices
# 启动shell执行交互式命令
adb shell
# 在设备上执行"ps -A"命令查看所有进程
adb shell ps -A

更多adb命令可以参考这个sheet

fastboot类似于pc的bios,也被人叫做“刷机模式”,可以看到一些设备信息。

1
2
# 使用adb重启bootloader进入fastboot模式
adb reboot bootloader

大部分手机关机后,同时按住音量“+”或“-”,再长按开机键也可以进入fastboot模式

可以使用fastboot命令,查看fastboot模式下的设备

1
2
fastboot devices                 # 查看fastboot连接设备
fastboot reboot # 正常重启设备

fastboot

recovery模式类似于Windows PC的U盘启动器或者MacOS的还原模式。Android的recovery模式和MacOS的还原模式类似,将存储盘的一部分划成recovery分区当作U盘启动器用,里面有一个微型还原系统,可以对手机进行设备还原,重新写入操作系统。

1
2
# 使用adb命令以recovery模式重启手机
adb reboot recovery

recovery mode

除了/recovery分区,android还有/boot/system/data/cache/misc等分区,可以参考有没有哪位能详细讲解一下安卓手机的分区? - 知乎 (zhihu.com)Android系统分区与升级 - 知乎 (zhihu.com)看看各分区的作用,关于Android A/B system分区可以参考A/B(无缝)系统更新

使用下面命令可以看到安卓预设的各种分区。

1
adb shell ls -al /dev/block/platform/soc/1da4000.ufshc/by-name

2、解锁bootloader

PC想要重装操作系统,还是挺简单的。ghost备份的方式安装或者U盘装机。但是安卓刷机就有点麻烦了。首先一个原因就是几乎所有的安卓机都有OEM锁。

android boot process

OEM全称Original Equipment Manufacturer,也就是原始设备制造商为了防止用户刷成其他系统设置的锁。bootloader是fastboot模式下的加载程序,OEM锁就类似于PC上BIOS的密码。

BIOS password

PC操作系统基本被Windows占领了,Windows是闭源的,微软一家发售,所以在PC上顶多就只能对BIOS设置个密码。但Android是谷歌开源的操作系统,华为、小米、VIVO等手机制造商都可以对Android进行定制化。这些定制化系统有很多预装软件,预装软件是很有商业价值的,比如说小米视频等各大预装软件广告如云,小米金融、小米之家等软件带来用户转化。所以手机制造商给设备上锁不让用户装其他系统,就是为了避免给别人徒作嫁衣。如果用户硬要解锁呢,那手机厂商不给保修。

每家手机制造商的解锁方式都不一样,我这里找了华为、小米、一加的解锁方案:

这里以一加为例:

1、在系统设置的开发者选项里找到“OEM解锁”,把它置成允许。

2、正常模式连接adb后可以执行adb reboot bootloader进入fastboot模式(或者关机后同时按下音量+/-后,再长按开机键开机,即可进入fastboot模式)。

3、fastboot模式下执行fastboot oem device-info可以看到boot-loader目前解锁状态,执行fastboot oem unlock后出现一个界面让你选择,选择“unlock the bootloader”即可解锁。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ fastboot oem unlock
...
OKAY [ 0.037s]
finished. total time 0.038s
$ fastboot oem device-info
...
(bootloader) Verity mode: true
(bootloader) Device unlocked: true
(bootloader) Device critical unlocked: false
(bootloader) Charger screen enabled: true
(bootloader) enable_dm_verity: true
(bootloader) have_console: false
(bootloader) selinux_type: SELINUX_TYPE_INVALID
(bootloader) boot_mode: NORMAL_MODE
(bootloader) kmemleak_detect: false
(bootloader) force_training: 0
(bootloader) mount_tempfs: 0
OKAY [ 0.020s]
finished. total time: 0.020s

3、刷recovery分区使用第三方recovery系统

解锁bootloader后,我们可以继续使用原来的操作系统,也可以自由刷机。刷机有几个部分可以刷,一个是用来恢复的/recovery分区,还有一个是正常使用的android操作系统也就是/system分区,还有一个就是/boot内核启动分区。

首先来说刷Recovery系统。

第三方的Recovery系统有很多,其中最有名的就是TWRP(Team Win Recovery Project)项目。

他们的项目在github上也开源了:https://github.com/TeamWin

TWRP支持的设备很多:https://twrp.me/Devices/,大部分机型都可以在这里面找到。

以oneplus5为例:

1
2
3
4
# 将下载的twrp镜像刷入recovery分区
fastboot flash recovery twrp.img
# 重启fastboot
fastboot reboot

请注意,许多设备会在启动期间自动替换自定义recovery。所以需要在刷完分区后第一次进入,按住键组合并启动到 TWRP。启动 TWRP 后,TWRP 将修补库存 ROM,以防止原有ROM 替换 TWRP。如果不遵循此步骤,将不得不重复安装。

4、使用magisk刷boot分区获取root权限

目前都是使用magisk来进行root权限管理,早期的supersu和kingroot已经被淘汰了,

1、从官方ROM包中,提取出boot.img,这个文件就是linux内核boot分区的镜像。

以oneplus5T为例,OnePlus5T官方论坛提供了ROM包下载,解压后找到boot.img

1
2
3
4
5
6
7
8
9
10
11
12
total 6921336
drwxr-xr-x@ 3 holmofy staff 96 8 1 17:20 META-INF
drwxr-xr-x@ 3 holmofy staff 96 8 1 17:20 RADIO
-rw-r--r--@ 1 holmofy staff 23749928 1 1 2009 boot.img
-rw-r--r--@ 1 holmofy staff 8363 1 1 2009 compatibility.zip
drwxr-xr-x@ 16 holmofy staff 512 8 1 17:20 firmware-update
-rw-r--r--@ 1 holmofy staff 2834780160 1 1 2009 system.new.dat
-rw-r--r--@ 1 holmofy staff 0 1 1 2009 system.patch.dat
-rw-r--r--@ 1 holmofy staff 13747 1 1 2009 system.transfer.list
-rw-r--r--@ 1 holmofy staff 677203968 1 1 2009 vendor.new.dat
-rw-r--r--@ 1 holmofy staff 0 1 1 2009 vendor.patch.dat
-rw-r--r--@ 1 holmofy staff 3375 1 1 2009 vendor.transfer.list

2、将boot.img拷贝到手机上,用magisk.apk将boot.img重写一遍,magisk会插入一段代码到boot.img中,生成新的magisk_patched-23000_msSoR.img(文件名后面是一个随机字符串)

3、将magisk生成的img文件拷贝到电脑上

1
2
3
adb reboot-bootloader  # 进入fastboot模式
fastboot flash boot magisk_patched-23000_msSoR.img # 将magisk生成的镜像写入boot分区
fastboot reboot # 重启手机

4、重启手机后,进入magisk应用,会发现已经root成功了。

5、好用的Magisk模块

https://github.com/Magisk-Modules-Repo

Refs:

Installation | Magisk (topjohnwu.github.io)

目前ROOT成功率最高的软件是什么? - 知乎 (zhihu.com)

5、第三方Android ROM操作系统

刷了recovery分区和boot分区,我们还可以刷system分区自定义的ROM,第三方的ROM多如牛毛(毕竟大多数就只是做做界面):

Android Open Source Project: https://github.com/aosp-mirror

直接基于AOSP的扩展:https://github.com/AospExtended

谷歌自己的Pixel,自然就带了很多谷歌的产品:https://github.com/PixelExperience

基于Pixel魔改的:https://github.com/PixelExtended

小米的MIUI,带了很多小米的产品:https://github.com/MiCode

国内的一个开源ROM:https://github.com/MoKee

最小化的miniOS:https://github.com/StatiXOS

还有lineageosGrapheneOSRevengeOSarrowosaokpCorvus-ROMBlissRoms
ProjectSakura)Project-Xtended…好多好多项目。

ROM开发

Android-Kitchen

6、Terminal on Android:Termux

在Android上玩终端,甚至将Android改装成Linux服务器,这些都可以用下面的软件实现。

Termux:提供了android端的终端命令以及pkg包管理器,也支持chroot方式挂在Linux发行版到指定目录,具体可以参考PRoot - Termux Wiki

meefik/linuxdeploy:使用chroot将Linux发行版挂载到android的某个目录,也支持docker容器的方式

Refs:

^ https://android.gadgethacks.com/how-to/best-phones-for-rooting-modding-2020-0175988/

^ https://nexus5.gadgethacks.com/how-to/elementalx-only-custom-kernel-you-need-your-nexus-5-0157196/

^ https://android.gadgethacks.com/how-to/ultimate-guide-using-twrp-only-custom-recovery-youll-ever-need-0156006/

^ https://oneplus.gadgethacks.com/how-to/unroot-revert-your-oneplus-5-5t-100-stock-0182460/

^https://forums.oneplus.com/threads/oneplus-5t-unlock-bootloader-flash-twrp-root-nandroid-efs.685403/

本作品采用 知识共享署名 4.0 国际许可协议 进行许可。

转载时请注明原文链接:https://blog.hufeifei.cn/2021/08/Android/android/

鼓励一下
支付宝微信