利用ErfanGSI工具将定制ROM移植为GSI
(原文链接:点此跳转 。翻译:九面相柳。转载本文请注明原文链接、本文链接及译者信息)
很多小白可能不理解这篇文章标题的含义,但如果你读过关于GSI镜像的文章,那么你就会明白了。在安卓4.4~6.0的时代,开发者们选择配置接近的手机移植ROM。找到系统版本和硬件接近的手机是很乏味的过程。在安卓8.0中实现了Project Treble之后,移植OEM定制的系统(如MIUI、Flyme等)变得非常容易。简单地说:你可以从小米移植MIUI,从One Plus移植OxygenOS/HydrogenOS,从ZenUI移植ZUI,从Nubia移植UI等等。好吧,你需要一个支持Project Treble的手机,系统版本在8.1及以上。这些GSI在早期的安卓8.0上不起作用。
开发者Erfan Abdi开发的ErfanGSI工具是移植OEM定制rom的最佳工具。一旦你了解了GSI的工作原理,你可以在一两分钟内构建一个GSI。这个工具对用户非常友好,您只需键入一些命令,工具将自动处理其余的移植过程。当然,不要期望从这个工具获得一个完美的无bug的GSI,因为每个厂商的ROM是不同的,系统结构也因设备而异,特别是当处理器不同时,系统差异会更大。bug也将取决于设备的底包对Project Treble支持的完善程度。
开发者Erfan Abdi开发的ErfanGSI工具是移植OEM定制rom的最佳工具。一旦你了解了GSI的工作原理,你可以在一两分钟内构建一个GSI。这个工具对用户非常友好,您只需键入一些命令,工具将自动处理其余的移植过程。当然,不要期望从这个工具获得一个完美的无bug的GSI,因为每个厂商的ROM是不同的,系统结构也因设备而异,特别是当处理器不同时,系统差异会更大。bug也将取决于设备的底包对Project Treble支持的完善程度。
- 本教程面向对Linux有一定了解的用户。它也也可以在Mac上工作,但因为我没有尝试过,所以本文不涉及Mac平台的情况。
- 本教程仅适用于安卓版本为9和10上的ROM。您不能使用此工具移植安卓8.0的ROM。
- 该工具支持移植A-only和A/B分区类型的GSI。它将自动输出两个版本,如果您只想移植A-only版或A/B分区版,那么您必须使用一些不同的命令,文末对这些命令有一些介绍。如果你完全不了解这些,建议先做一下基础工作,去网上搜一下相关的知识。
前期准备:
- 配置较好的电脑:最低双核4G(估计跑起来会很慢)。核心多、内存大,移植起来更快。
- 网络连接:需要用来下载体积巨大的定制ROM,现在MIUI等普遍都在1个G以上。
- Linux系统:例如Ubuntu(译者注:建议小白安装Deepin,对国内用户比较友好。不会安装双系统的可以在虚拟机中安装Deepin,但是得保证主机配置够高。虚拟机至少得分配双核心+4G内存。)。
- 脑子:不解释,干啥都得带脑子来。
如果上边的东西准备齐全了,可以开始下一步,安装这个工具和一些必需的东西。
打开终端,把ErfanGSI下载回来:
git clone --recurse-submodules https://github.com/erfanoabdi/ErfanGSIs.git
然后进入工具文件夹,执行安装命令:
cd ErfanGSIs bash ./setup.sh
如果在安装包期间遇到与权限相关的问题,请使用sudo执行脚本。
待安装过程结束,就可以准备开始移植了。
下一步是找到要移植的ROM了。这些基本上是各厂商发布的用于系统升级卡刷包。需要用到完整的OTA包。比如One Plus在官网上发布了所有的OTA包,也可以在网上找到其他的厂商的刷机包,比如MIUI、flyme等。我们需要用到刷机包下载链接的直链地址,或者也可以将刷机包下载到自己的电脑上。本文会分别介绍两种移植GSI的方式(从ROM直链和已下载的ROM)。
ErfanGSIs支持的9.0系统包括:
- 1. Android Q/10
- ColorOS
- Flyme
- Generic
- MIUI
- Nubia
- OneUI
- OxygenOS
- Pixel
- Xperia
- ZenUI
- ZUI
从直链生成GSI
例如,如果要利用生成One Plus 7 pro的ROM生成GSI,那么进入ErfanGSIs目录,然后执行以下命令:
./url2GSI.sh https://oxygenos.oneplus.net/OnePlus7ProOxygen_21.O.07_OTA_007_all_1905120542_fc480574576b4843.zip OxygenOS
上面的命令包含3个内容。首先是url2GSI,它是一个bash脚本,处理其余的事情。第二个是ROM的网址(移植其他ROM需替换该链接),第三个是ROM的类型,例如此处为OxygenOS。移植其他ROM要相应的进行更改。例如,如果你想移植一个MIUI,那么此处就要输入MIUI。上面的命令同时生成了A-only和A/B两个版本的GSI。它会把GSI镜像放到外面的目录里,通常是超过2GB的img文件。你可以在上传到网上之前用7z压缩它们以减小体积。
利用7z压缩镜像(可选)
只需进入out文件夹,输入7z a 输出压缩包的文件名和镜像文件名:
7z a [输出压缩包的文件名] [待压缩镜像文件名]
例如:有一个名为HydrogenOS-Aonly-9-20190614-ErfanGSI.img.7z的img文件,可输入以下命令将其压缩:
7z a [输出压缩包的文件名] [待压缩镜像文件名]
例如:有一个名为HydrogenOS-Aonly-9-20190614-ErfanGSI.img.7z的img文件,可输入以下命令将其压缩:
7z a HydrogenOS.7z HydrogenOS-Aonly-9-20190614-ErfanGSI.img.7z
只生成A-only或A/B的GSI
根据这部分内容,您还可以在获得最终GSI之前修改ROM。在这里我使用的是一加6T固件的url。
确保您在ErfanGSIs目录中。我习惯在所有命令前都加上sudo来避免权限不足问题。
确保您在ErfanGSIs目录中。我习惯在所有命令前都加上sudo来避免权限不足问题。
- 这些步骤包括下载ROM。ROM将会被下载到“下载”文件夹。请忽略执行此命令后出现的所有错误。
./url2GSI.sh https://oxygenos.oneplus.net/OnePlus6Oxygen_22_OTA_031_all_1905281326_bc947291e7ba4ce3.zip
与之前不同,此处命令最后是不含ROM类型的! - 这一步会解压下载回来的ROM并将系统转换为system.img,并将system.img存储在cache目录中。
- 此步骤用于将system.img挂载到系统文件夹。挂载完之后就可以在生成最终img镜像之前对ROM进行更改。
sudo mount cache/system.img system
现在您将看到一个包含ROM所有内容的system文件夹。然后你可以对其进行修改,比如添加/删除软件,替换字体和图片,修改机型名称等。 - 此步骤将在out文件夹中给出最终的GSI镜像。您可以根据自己的需求更改命令。
此命令的基本结构为:
./make.sh [path to GSI system] [firmware type] [output type] [Output Dir]
Path to GSI system:挂载GSI镜像的目录,例如刚刚我们将GSI挂载到了system目录
Firmware type: 固件类型,是MIUI、ZUI还是OxygenOS或其他
Output type: 输出类型:A-only还是A/B
Output Dir:输出目录
例如,刚才我们将OxygenOS的挂载到了system目录下,现在我想利用生成A-only的镜像,并输出到out文件夹下,可以执行以下命令:./make.sh system OxygenOS Aonly out
生成的GSI镜像就自动保存到out文件夹下了
注意事项
- 对安卓10.0的支持还有些问题,仍有待完善。
- 要移植HydrogenOS,应该使用 OxygenOS:HydrogenOS 作为ROM类型名称。
- 一些GSI可能需要修改surfaceflinger才能启动。如果日志中出现isHDRlayer错误或崩溃。你就需要手动修修改它,这里提供了修改surfaceflinger的教程-修复isHDRlayer (点此查看中文版)
- ColorOS目前还不能在大多数设备上启动。
致谢
声明: 本文由(九面相柳)原创编译,转载请保留链接: 利用ErfanGSI工具将定制ROM移植为GSI