前言
本文基于 HyperOS 编写,大部分都是需要 Root 的操作。
设置 prop
在 /data/adb/service.d/ 下新建 hide_prop.sh 文件,脚本来自 shamiko, 如果已经有了,则不加,内容如下:
#!/system/bin/sh
# Stop when safe mode is enabled
#if [ -f "/data/adb/Box-Brain/safemode" ]; then
# echo " Permission denied by Safe Mode"
# exit 1
#fi
check_reset_prop() {
local NAME=$1
local EXPECTED=$2
local VALUE=$(resetprop $NAME)
[ -z $VALUE ] || [ $VALUE = $EXPECTED ] || resetprop -n $NAME $EXPECTED
}
contains_reset_prop() {
local NAME=$1
local CONTAINS=$2
local NEWVAL=$3
[[ "$(resetprop $NAME)" = *"$CONTAINS"* ]] && resetprop -n $NAME $NEWVAL
}
resetprop -w sys.boot_completed 0
check_reset_prop "ro.boot.vbmeta.device_state" "locked"
check_reset_prop "ro.boot.verifiedbootstate" "green"
check_reset_prop "ro.boot.flash.locked" "1"
check_reset_prop "ro.boot.veritymode" "enforcing"
check_reset_prop "ro.boot.warranty_bit" "0"
check_reset_prop "ro.warranty_bit" "0"
check_reset_prop "ro.debuggable" "0"
check_reset_prop "ro.force.debuggable" "0"
check_reset_prop "ro.secure" "1"
check_reset_prop "ro.adb.secure" "1"
check_reset_prop "ro.build.type" "user"
check_reset_prop "ro.build.tags" "release-keys"
check_reset_prop "ro.vendor.boot.warranty_bit" "0"
check_reset_prop "ro.vendor.warranty_bit" "0"
check_reset_prop "vendor.boot.vbmeta.device_state" "locked"
check_reset_prop "vendor.boot.verifiedbootstate" "green"
check_reset_prop "sys.oem_unlock_allowed" "0"
# MIUI specific
check_reset_prop "ro.secureboot.lockstate" "locked"
# Realme specific
check_reset_prop "ro.boot.realmebootstate" "green"
check_reset_prop "ro.boot.realme.lockstate" "1"
# Hide that we booted from recovery when magisk is in recovery mode
contains_reset_prop "ro.bootmode" "recovery" "unknown"
contains_reset_prop "ro.boot.bootmode" "recovery" "unknown"
contains_reset_prop "vendor.boot.bootmode" "recovery" "unknown"其他设置
在 /data/adb/service.d/ 下新建 my_custom.sh 文件,内容如下:
PS: HWUI 相关的 Android 16 以下使用可能会有问题
# boot 分区校验
resetprop ro.boot.vbmeta.digest 签名,签名可以通过密钥认证获取(verifiedBootHash)
# 开启 ADB over TCPIP 端口 5555
resetprop service.adb.tcp.port 5555
# 基础Vulkan开关
resetprop ro.hwui.use_vulkan true
# 渲染引擎后端设置
resetprop debug.hwui.renderer skiavk
# [skiagl] [skiaglthreaded] [skiavk] [skiavkthreaded]
resetprop debug.renderengine.backend skiavkthreaded
# Vulkan 启用标志
resetprop debug.renderengine.vulkan true
# 附加 [媒体多线程化]
resetprop debug.stagefright.renderengine.backend threaded
# HWUI日志等级 0 ~ 4 0表示基本禁用
resetprop debug.hwui.level 0
# 禁用系统调试 处于干净状态 减少开销
resetprop debug.renderengine.skia_atrace_enabled false
# CPU快速升降频的开关 类似于 scene 的 gpu boost 但这里是针对 CPU 默认关闭,减少多余的性能开销
resetprop debug.sf.enable_adpf_cpu_hint falseKonaBess 降压超频
得根据自己设备的 GPU 来微调,啥都不懂的话可以去网上找别人同型号的 CPU 来配置通用降压(基本上就是冗余很高,但是也比官方的功耗要来的低)。
GPU 场景可以考虑刷入其他版本的 GPU 驱动,来获得更好的效果,记得提前备份 boot 和 vendor 分区。推荐在 Recovery 中刷入,而不是使用面具刷入( momo 能检测到修改)。
省电与续航
系统改为黑暗模式
使用 scene 的调度,墓碑使用 smillet pro / Noactive / 冰箱
系统优化
HyperCeiler: https://github.com/ReChronoRain/HyperCeiler 模块
scrcpy 电脑连接手机
https://github.com/Genymobile/scrcpy
- -d 有线连接
- —tcpip 无线连接,不写端口为默认 5555, 注意授权和端口号
- —turn-screen-off 连接后关闭屏幕
- —max-fps 最大帧率
- —video-codec 视频编码方式
- —stay-awake 保持唤醒状态 (打开开发者选项的一直唤醒)
- —keyboard=uhid 键盘输入方式 / -K 修复输入法无法输入中文
- —mouse=uhid 鼠标输入方式 / -M
scrcpy -d --turn-screen-off --keyboard=uhid
scrcpy --tcpip=10.0.0.10 --video-codec=h265 --max-fps=120 --turn-screen-off --keyboard=uhiddex2oat 编译
Android 的 dex2oat 是一个核心工具,属于 Android Runtime (ART) 的一部分。它的主要作用是将 Android 应用程序的 DEX 字节码编译成本地机器码(通常是 ELF 格式的 .oat 文件),这个过程称为 Ahead-Of-Time (AOT) 编译。
一句话总结:通过预先编译 DEX 字节码为本地机器码,显著提升应用启动速度、运行性能,但是编译出来的 .oat 文件相比于原版会占用更多的存储空间,增加的大小我认为可以接受。
# 对所有函数进行aot,就是无差别对可能需要的函数进行编译,这个编译模式相对完整,且效率高,推荐使用
cmd package compile -m speed -a# 尝试应用所有可能的优化,甚至包括一些在 speed 中默认不开启的激进但可能收益不高的优化。
cmd package compile -m everything -a其他:
- speed-profile: 针对配置文件下的系统默认建议编译项目进行编译,此项也许是系统的默认编译配置
- reset: 重置所有应用的编译状态,强制重新编译所有应用。
其他
清理 HyperCeiler 模块残留属性(不一定有效,仅做记录)
在 /data/adb/service.d/ 下新建 clear_hyperceiler.sh 文件,内容如下:
#!/system/bin/sh
# 清理 HyperCeiler 模块残留属性,代码来自酷安@奶糖味柚子
RESETPROP_BIN=$(command -v resetprop)
echo "=== 开始清理 HyperCeiler 残留 ==="
# 找出所有 hyperceiler 相关属性
PROPS=$(getprop | grep -oE 'persist\.hyperceiler\.[^]]+')
if [ -z "$PROPS" ]; then
echo "未发现 HyperCeiler 残留属性"
exit 0
fi
for PROP_NAME in $PROPS; do
OLD_VALUE=$(getprop "$PROP_NAME")
echo "发现属性: $PROP_NAME = $OLD_VALUE"
# 使用 resetprop 清理
if [ -n "$RESETPROP_BIN" ]; then
$RESETPROP_BIN "$PROP_NAME" ""
else
setprop "$PROP_NAME" ""
fi
# 如果 /data/property 存在,尝试删除对应文件
if [ -d /data/property ]; then
PROP_FILE="/data/property/${PROP_NAME}"
if [ -f "$PROP_FILE" ]; then
rm -f "$PROP_FILE"
echo "已删除文件: $PROP_FILE"
fi
fi
# 验证
NEW_VALUE=$(getprop "$PROP_NAME")
if [ -z "$NEW_VALUE" ]; then
echo "✅ $PROP_NAME 已清理"
else
echo "❌ $PROP_NAME 清理失败,当前值: $NEW_VALUE"
fi
done
echo "=== HyperCeiler 残留清理完成 ==="