把定制ROM移植成sGSI(Android-P)
本文来自xda论坛(原文链接:点此跳转),笔者仅将其翻译为中文,一切版权归原作者所有。若由于刷机造成任何风险及损失,本人及原作者概不负责。
参考此教程可把OEM定制的ROM制作成GSI镜像,可以在支持Project Treble的设备上运行,仅适用于高通平台。
本文介绍了将定制ROM移植成semi-GSI的主要步骤,旨在介绍应该处理的关键文件,而非手把手教学的教程,也许参考本文仅仅能够制作出一个可启动的镜像,我不会保证真给你带来什么收获。

前期准备
- 一台电脑和一部支持PT的手机(官方或土制均可);
- P DP3 semi-GSI(目前大部分OEM厂商的安卓P(9.0)都是基于DP3的);
- 一个你想移植的高通平台的安卓P镜像;
- 最好有最新版本的ROM移植工具(方便解包等操作)
似乎目前只有高通平台的手机有官方P预览版系统,我不确定麒麟和猎户座的手机是否也已经有了安卓P。
理论上,安卓P镜像可以在同一平台的不同芯片之间移植。
当然,搞机有风险,请你做好救砖的准备。
开始移植
首先,解包安卓P的semi-GSI 镜像(以下称为底包)和你要移植的ROM。
(下文中的“lib&lib64”意思是你要替换的文件在lib和lib64下同时存在,请分别替换)
- 将移植包的/system/lib&lib64/libselinux.so替换成底包的;
- 找到移植包/system/etc下以ld.config开头的txt文件,用底包的/system/etc/ld.configs.txt替换;
- 删除 /system/etc/permissions/qti-permissions.jar
- 修改/system/etc/prop.default 关闭adb安全设置并打开调试选项,以便于debug
- 解包移移植包的vendor 镜像,找到OEM厂商在 manifest.xml中添加的服务项;manifest可能会在 /vendor 或者 /vendor/etc/vintf,挑出所有与你在manifest找到的服务项有关的hal,通常它们会位于:
/vendor/bin/hw
/vendor/etc/init
/vendor/lib&lib64/
/vendor/lib&lib64/hw
并找出一些其他与移植包有关的文件如framework, overlays等;
6. 最后把你移植好的system打包成img.
刷入 8.1 的 vendor , P semi-GSI boot 和 vendor 补丁.
刷入你移植好的system.img
添加你在vendor分区找到的额外的文件,还需要修改你的手机的manifexts.xml并添加OEM相关的文件。
可刷入FBE Disabler和permissiver来关闭FBE(文件加密)和seLinux。
格式化data,把adb keys推送到手机里以便于调试,重启。
如果你足够幸运,就可以见到开机动画并开始调试了。
可以用adb命令抓取log.
打开log文件搜索“died”,可以定位到bug的位置,剩下的就看你的经验了。
补充:一些常见问题的解决方案
- dumplicate permission : XXX’
解决方案:在 /system/etc/permissions 的文件中找到XXX ,删除报错的权限; - ‘fail to make lockscreen ready’
解决方案:将底包中的libpuresoftkeymasterdevice.so添加到你的系统中; - 进入系统后重启或黑屏(常见于骁龙845)
解决方案:替换以下文件:
/system/bin/surfaceflinger
/system/lib&lib64/libsurfaceflinger.so and libtimestats_pronto.so
声明: 本文由(九面相柳)原创编译,转载请保留链接: 把定制ROM移植成sGSI(Android-P)