利用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支持的完善程度。

  1. 本教程面向对Linux有一定了解的用户。它也也可以在Mac上工作,但因为我没有尝试过,所以本文不涉及Mac平台的情况。
  2. 本教程仅适用于安卓版本为9和10上的ROM。您不能使用此工具移植安卓8.0的ROM。
  3. 该工具支持移植A-only和A/B分区类型的GSI。它将自动输出两个版本,如果您只想移植A-only版或A/B分区版,那么您必须使用一些不同的命令,文末对这些命令有一些介绍。如果你完全不了解这些,建议先做一下基础工作,去网上搜一下相关的知识。

前期准备:

  1. 配置较好的电脑:最低双核4G(估计跑起来会很慢)。核心多、内存大,移植起来更快。
  2. 网络连接:需要用来下载体积巨大的定制ROM,现在MIUI等普遍都在1个G以上。
  3. Linux系统:例如Ubuntu(译者注:建议小白安装Deepin,对国内用户比较友好。不会安装双系统的可以在虚拟机中安装Deepin,但是得保证主机配置够高。虚拟机至少得分配双核心+4G内存。)。
  4. 脑子:不解释,干啥都得带脑子来。

如果上边的东西准备齐全了,可以开始下一步,安装这个工具和一些必需的东西。

打开终端,把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. 1. Android Q/10
  2. ColorOS
  3. Flyme
  4. Generic
  5. MIUI
  6. Nubia
  7. OneUI
  8. OxygenOS
  9. Pixel
  10. Xperia
  11. ZenUI
  12. 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.7z HydrogenOS-Aonly-9-20190614-ErfanGSI.img.7z

只生成A-only或A/B的GSI

根据这部分内容,您还可以在获得最终GSI之前修改ROM。在这里我使用的是一加6T固件的url。
确保您在ErfanGSIs目录中。我习惯在所有命令前都加上sudo来避免权限不足问题。

  1. 这些步骤包括下载ROM。ROM将会被下载到“下载”文件夹。请忽略执行此命令后出现的所有错误。
    ./url2GSI.sh https://oxygenos.oneplus.net/OnePlus6Oxygen_22_OTA_031_all_1905281326_bc947291e7ba4ce3.zip
    与之前不同,此处命令最后是不含ROM类型的!
  2. 这一步会解压下载回来的ROM并将系统转换为system.img,并将system.img存储在cache目录中。
  3. 此步骤用于将system.img挂载到系统文件夹。挂载完之后就可以在生成最终img镜像之前对ROM进行更改。
    sudo mount cache/system.img system
    现在您将看到一个包含ROM所有内容的system文件夹。然后你可以对其进行修改,比如添加/删除软件,替换字体和图片,修改机型名称等。
  4. 此步骤将在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文件夹下了

注意事项

  1. 对安卓10.0的支持还有些问题,仍有待完善。
  2. 要移植HydrogenOS,应该使用 OxygenOS:HydrogenOS 作为ROM类型名称。
  3. 一些GSI可能需要修改surfaceflinger才能启动。如果日志中出现isHDRlayer错误或崩溃。你就需要手动修修改它,这里提供了修改surfaceflinger的教程-修复isHDRlayer点此查看中文版
  4. ColorOS目前还不能在大多数设备上启动。

致谢

  1. Erfan Abdi以及所有参与的开发人员;
  2. 已经移植好的GSI下载链接:点此跳转

xda原贴:点此跳转

声明: 本文由(九面相柳)原创编译,转载请保留链接: 利用ErfanGSI工具将定制ROM移植为GSI

利用ErfanGSI工具将定制ROM移植为GSI:等您坐沙发呢!

发表评论