为黑厂设备移植其他黑厂设备的ColorOS/OxygenOS

一加手机的Ace系列Pro机型都不在国外发售,所以自然而然也没有OxygenOS
而且我相信大部分刷机的人都会有使用Google套件的需求,虽然国内的ColorOS也有,但是ColorOS过于臃肿并且砍了很多原生的功能
相比之下,OxygenOS更简洁更纯粹,没有广告,也没有恶心的快应用

认识分区与提取全量包

使用Fastboot Enhance从相近机型的官方全量包的payload.bin中提取出以下镜像文件,这是所有工作的基础:

镜像文件是否需要处理功能简介
system最核心的安卓系统框架,通常用不动
system_ext系统扩展功能,补apex文件解决开机问题就靠它
product另一个产品级功能分区,一般不动
my_product包含大量硬件特性、UI覆盖、传感器配置,一般需要修复
my_manifest包含机型初始API等级等清单属性,修改以通过启动验证
my_bigball游戏空间等相关功能
my_carrier运营商相关配置
my_engineering工程模式相关
my_heytap欢太账号服务相关
my_preload预装应用,可用欧版包精简
my_region区域特性配置
my_reserve预留分区
my_stock内置应用分区,可在此精简APP

解包与工程准备

使用D.N.A创建一个新的工程,把上面提取的所有镜像文件都扔进这个文件夹,对system_extmy_productmy_manifest进行解包,准备工作就做好了

处理my_product

my_product搞定了就成功一大半,这里提供一种最简单粗暴的修复方法

  • /my_product/overlay里面的东西全删了丢原机(修复相关状态栏例如前摄像头解锁动画)
  • /my_product/vendor/etc全删丢原机,修原机亮度配置
  • /my_product/etc/fusionlight_profile/删了丢原机覆盖原机,修自动亮度

不过想要问题少点还是要认真弄的,以下是针对ColorOS 15的详细处理指南,绝大部分来自于酷安:

修复魔方按钮/三段式

  1. 修改build.prop:build.prop将这个数值改成0
    properties
    ro.oplus.key.actionbutton=
  2. 添加这段内容
    properties
    <oplus-featurename="oplus.software.audio.alert_slider">
    /my_product/etc/permissions/oplus.product.feature_multimedia_unique.xml里面

挖孔位置/屏幕显示异常

  1. 修改build.prop:把下面两个参数换成你原厂系统的值
    properties
    ro.oplus.display.screen.heteromorphism=
    ro.oplus.display.screenhole.positon=
  2. 替换Overlay文件:把/my_product/overlay/下的 oplus_framework_res_overlay.display.productandroid_framework_res_overlay.display.product 换成原厂系统的,如果原厂/odm/overlay/里有这俩文件,直接删了移植包的也行

5.1内核蓝牙罢工

my_productbuild.prop里搜Bluetooth,把所有带这个词并且值等于true的行,要么改成false,要么整行删掉,要么直接用原厂文件覆盖

各种软重启、HDR卡死

  • 文件替换:找到以下文件,原厂系统有就换过去,没有就直接删掉
    • sys_graphic_enhancement_config.json
    • sys_game_manager_config.json
    • oplus.product.display_system_features.xml
  • HDR开关:在build.prop里搜persist.sys.feature.uhdr.support=,如果等于true就改成false,或者直接删了这行

自动亮度/手动亮度失灵

  • build.propbrightness,把整段参数换成原厂的
  • /my_product/vendor/整个文件夹删了,用原厂的替换这是最稳的一招

小布语音唤醒不了

把原厂系统的OVMS_1st_wakeup.bin文件换过来,或者用同CPU型号的ColorOS包里的文件,基本就能解决

分辨率不对/显示缩放异常

  1. XML文件:在oplus.product.feature_multimedia_unique.xml里,找到所有resolution相关的文本,删掉,换原厂的
  2. build.prop参数:把下面这些参数全换成原厂系统的值
    properties
    ro.density.screenzoom.fdh=
    ro.density.screenzoom.qdh=
    ro.oplus.density.fhd_default=
    ro.oplus.density.qhd_default=
    ro.sf.lcd_density=
    ro.oplus.resolution.low=
    ro.oplus.resolution.high=

震动全无/触感反馈缺失

主要处理这两个文件:

  • oplus.feature.android.xml
  • com.oplus.oplus-feature.xml 在里面搜vibrator,把相关段落删掉,换成原厂系统的代码这样打字震动、清理后台震动就都回来了

录像报错(过短/占用)

oplus.product.feature_multimedia_unique.xml里搜Record,把相关文本段落删掉或替换

智慧感知/AON服务异常

  • /my_product/app/AONService整个文件夹换成原厂的
  • oplus_aon_grant_permissions_list.xml换成原厂的
  • (ColorOS 15特殊处理):如果找不到上面的XML,说明代码被移到com.oplus.oplus-feature.xml里了在里面搜aon,删掉相关代码,再把原厂oplus_aon_grant_permissions_list.xml里的代码复制过来

设置里功能缺失(视频插帧/屏幕录制)

这些功能开关基本都在oplus.product.feature_multimedia_unique.xml里,用原厂文件无脑覆盖是最省事的方法

HDR卡死或软重启 (补丁)

my_productbuild.prop里补上:

properties
persist.sys.feature.uhdr.support=true
persist.sys.feature.localhdr_version=1
ro.oplus.display.brightness.apollo.default_brightness=4350
ro.oplus.display.brightness.apollo.min_light_in_dnm=1282,1282
persist.brightness.apollo=1
ro.oplus.display.brightness.apollo.global.btn=3899

屏幕色彩调节无效

去修改my_manifest.img解包后的build.prop! 把下面两个参数改成你手机自身的型号和品牌,比如一加12就填:

properties
ro.product.vendor.model=PJD110
ro.product.vendor.manufacturer=OnePlus

处理my_manifest和system_ext

  • my_manifest/build.prop:找到并删除ro.product.first_api_level=这一行,或者把值改成30这是通过启动验证的关键
  • system_ext/apex/(注意!) 如果是不同CPU的移植,需要把原厂系统的这个目录补过来,相同CPU千万别补!

美化、精简与打包

  • 精简:删预装去my_stock里删;想更纯净就用欧版的img
  • 打包:DNA里,选中所有修改好的文件,选项全部默认,直接打包
  • 测试强烈推荐用DSU侧载进行测试!把打包好的img文件压缩成zip,用DSU Sideloader安装测试,安全无风险,重启就回原系统

正式刷入

关闭AVB2.0验证,进入fastbootd线刷即可

shell
fastboot --disable-verity --disable-verification flash vbmeta vbmeta.img
fastboot reboot fastboot
fastboot system system.img
fastboot system_ext system_ext.img
fastboot product product.img
fastboot my_product my_product.img
fastboot my_manifest my_manifest.img
fastboot my_bigball my_bigball.img
fastboot my_carrier my_carrier.img
fastboot my_engineering my_engineering.img
fastboot my_heytap my_heytap.img
fastboot my_preload my_preload.img
fastboot my_region my_region.img
fastboot my_reserve my_reserve.img
fastboot my_stockmy_stock my_stock.img

想要root还是修补手机原厂的init_boot.img,因为我们没动init_boot.img

类原生5G信号差的解决办法