利用Github来编译TWRP
哔哩哔哩
Github地址
上周上游仓库变更构建不可用。—2024.10.1
修复完成。—2024.10.5
TWRP构建 和 Orange Fox[All]构建
TWRP设备树生成:https://github.com/momo54181/action_build_twrp_device_tree
TWRP构建:https://github.com/momo54181/Action-TWRP-Builder
Orange Fox(仅a11-12)构建:https://github.com/azwhikaru/Action-OFRP-Builder
Orange Fox[All]构建:https://github.com/momo54181/Lazy_Action-Recoverys-Builder
OFRP的环境变量:https://github.com/momo54181/Action-TWRP-Builder/blob/main/OFRP-Ver.md
TWRP的环境变量:https://github.com/momo54181/Action-TWRP-Builder/blob/main/TWRP-Ver.md
BoardConfig.mk
TW_EXTRA_LANGUAGES := true
——添加更多国家的语言(包括亚洲语言)TW_DEFAULT_LANGUAGE := zh_CN
——设置默认语言为简体中文
BOARD_HAS_NO_REAL_SDCARD:= true
——禁用sdcard分区之类的东西,如果TWRP不适合于您的Recovery分区,可能会节省一些空间。
TW_NO_BATT_PERCENT:= true
——在不支持电池信息的设备上禁用电池百分比显示
TW_CUSTOM_POWER_BUTTON:= 107
——自定义锁屏键所对应的设备按键
TW_NO_REBOOT_BOOTLOADER:= true
——从 重启
菜单中移除 reboot bootloader
按钮
TW_NO_REBOOT_RECOVERY:= true
——从 重启
菜单中移除 reboot recovery
按钮
RECOVERY_TOUCHSCREEN_SWAP_XY:= true
——在X轴和Y轴之间交换触摸映射
RECOVERY_TOUCHSCREEN_FLIP_Y:= true
——翻转触摸y轴的值
RECOVERY_TOUCHSCREEN_FLIP_X:= true
——翻转触摸x轴的值
TWRP_EVENT_LOGGING:= true
——启用触摸事件日志记录来帮助调试触摸屏问题(不要在发布时留下这个选项,它会很快填满你的日志文件)
BOARD_HAS_FLIPPED_SCREEN:= true
——对于颠倒安装的屏幕,将屏幕上下翻(转示例机型:魅族Note5)
TW_MAX_BRIGHTNESS := 255
# 设置最高亮度
TW_DEFAULT_BRIGHTNESS := 155
# 设置默认亮度
TW_IGNORE_MISC_WIPE_DATA
:= true # 是否在清除 data 时忽略 misc(来自fastboot,系统等的命令)
TW_INCLUDE_CRYPTO := true
#是否添加解密支持
TW_INCLUDE_CRYPTO_FBE := true
#是否添加解密支持[FBE]
TARGET_CRYPTFS_HW_PATH := vendor/qcom/opensource/commonsys/cryptfs_hw
# 解密所需依赖的源码路径(高通机型)
RECOVERY_SDCARD_ON_DATA := true
# 设置内部存储的数据是否在 data 分区
TW_USE_TOOLBOX := true
# 是否使用 ToolBox
TWRP_INCLUDE_LOGCAT := true
# 是否启用 logcat
TARGET_USES_LOGD := true
# 是否启用 logcat
recovery.fstab
将标志添加到fstab中列出的分区的末尾,用空格(或制表符)分隔。这些标志只影响该分区,而不影响其他分区。标志由分号分隔。如果你的路径显示名称(显示给用户的名称)有空格,则必须用引号将显示名称括起来。例子如下:
/external_sd vfat /dev/block/mmcblk1p1 flags=display="Micro SDcard";storage;wipeingui;removable
这个分区的标志给它一个显示名称为“Micro SDcard”以显示给用户。wipeingui
使此分区可在高级清除菜单(Advanced Wipe Menu)中进行擦除。removable
标志表示有时该分区可能不存在,以防止在启动期间显示挂载错误。下面是一个完整的标志列表:
removable
——指示分区可能不存在,以防止在boot期间显示挂载错误。
storage
——指示分区可以用作存储,这使得分区可以作为存储器用于备份、恢复、zip安装等。
settingsstorage
——正常情况下应该只设置一个分区作为 settingsstorage
,这个分区用作存储TWRP的设置文件的位置。
canbewiped
——表示分区可以由后端系统擦除,但可能不会在GUI中列出供用户擦除的选项。
userrmrf
——覆盖擦除所用的常规磁盘格式,并且只允许使用 rm -rf
命令擦除分区。
backup=
——backup=1
或 backup=0
backup=1
表示分区可以列出在备份/恢复列表中,而 backup=0
确保该分区不会出现在备份列表中。
wipeingui
——使分区显示在GUI中,允许用户在高级擦除菜单中选择擦除。
wipeduringfactoryreset
——分区将在恢复出厂设置期间被清除。
ignoreblkid
——blkid用来确定TWRP正在使用什么文件系统,这个标志将导致TWRP跳过/忽略blkid的结果,只使用fstab中指定的文件系统。
retainlayoutversion
——使TWRP在索尼Xperia S等设备的 /data
中保留 .layoutversion
文件,这些设备使用 /data/media
,但仍然有一个单独的 /sdcard
分区
symlink=
——导致TWRP在挂载分区时可以运行额外的挂载命令,通常与 /data/media
一起使用,以创建 /sdcard
display=
——为在GUI中列出的分区设置其要显示的名称。
storagename=
——为要在GUI的storage(存储)列表中列出的分区设置名称。
backupname=
——为GUI备份/恢复列表中列出的分区设置一个备份名称。
length=
——通常用于在 /data
分区末端预留空白空间,用于存储解密密钥。当Android的完整设备加密启用时,不设置这个可能导致无法加密设备。
canencryptbackup=
——设置为1或0以启用/禁用,使TWRP加密该分区的备份,如果用户选择加密(只适用于tar备份,不适用于img镜像)
userdataencryptbackup=
——设置为1或0以启用/禁用,使TWRP只加密该分区的userdata部分,某些子文件夹如 /data/app
将不会被加密,以节省时间。
subpartitionof=
——等号后面加上子分区的分区路径。子分区被视为主分区的“一部分”,例如TWRP自动使 /datadata
成为 /data
的子分区。这意味着 /datadata
将不会出现在GUI条目中,但在对 /data
执行这些操作时,/datadata
也同时会被清除、备份、恢复、装载和卸载。
Bug修复
触摸修复
首先要有内核日志,可以到/sys/fs/pstore/查看
搜索关键词:touch
loading ‘tp/20271/FW_NF_ILI9882N_BOE_B8.bin 可以看到加载的文件,如果手机没有就上Github搜
直接把这些文件薅过来就可以。
对于引导文件lk限制的无法触摸是无法修复的。
屏幕反向,触摸却是正向的?
在 BoardConfig.mk
中加入 BOARD_HAS_FLIPPED_SCREEN:= true
这行代码即可解决
屏幕反的,触摸也是反的?
RECOVERY_TOUCHSCREEN_SWAP_XY:= true
——在X轴和Y轴之间交换触摸映射
RECOVERY_TOUCHSCREEN_FLIP_Y:= true
——翻转触摸y轴的值
RECOVERY_TOUCHSCREEN_FLIP_X:= true
——翻转触摸x轴的值
修复 CPU 温度
使用adb shell
+ grep
命令在手机节点里搜索 type 关键词。
1 | xiaolegun@xiaoleGundeMac-Pro ~ adb shell 'grep "cp_master" /sys/class/thermal/*/type' |
我这里选用cp_master
节点来读取温度。我的节点路径为/sys/class/thermal/thermal_zone54
在后面添加 temp 来读取温度,你可以使用cat
来检测节点是否可以正常读取温度
1 | adb shell 'cat /sys/class/thermal/thermal_zone54/temp' |
如果返回如
1 | 28000 |
这种类似的数值,那多半是没有问题的。
我们在 BoardConfig.mk 中加入
1 | TW_CUSTOM_CPU_TEMP_PATH := "/sys/class/thermal/thermal_zone54/temp" |
至此 cpu 温度就修复好了。
刷入TWRP,进入却不能触摸?
有些手机限制了引导加载程序,进入rec模式不提供触摸支持,只有按键可以用,这种情况一般会发生在只使用按键进行选择的Recovery
比如:金立M6 Plus
没有打开触摸驱动
vivo的oled屏幕没有触摸,例如:vivo y7s 正在研究中
没有MTP
常见编译问题
如果要构建vendor_boot构建标识BUILD_TARGET
将recovery改为vendorboot
安卓10以上编译报错
In file included from build/make/target/product/telephony_vendor.mk:24:
device/alldocube/T1030M/device.mk:24: **error: **PRODUCT_STATIC_BOOT_CONTROL_HAL is obsolete. Use shared library module instead. See
解决方法:omni_device.mk或twrp_device.mk中的full_base_telephony.mk改为aosp_base.mk
无法克隆设备树
将仓库设置为公开
构建过程错误
解决方法:
1 | # Inherit some common TWRP stuff. |
替换成上面这个
安卓10编译报错
设备树生成器的问题
TARGET_SCREEN_DENSITY := 480
将480改为320
Data解密
查看加密类型;
如需检查设备是否使用了文件级加密,请运行以下 shell 命令:
1 | adb shell getprop ro.crypto.type |
如果输出为 file
,则表示设备启用了文件级加密。
如果输出为 block
,则表示设备启用了全盘加密。
forceencrypt表示强制加密,改成encryptable意味着加密是让用户主动去选择的。
其他
编译时长参考
安卓6.0:25min
安卓7.0:30min
安卓8.0:35min
安卓9-10:40min
安卓11-12:1h
参考
BoardConfig.mk 的 TWRP 标志 |XDA 论坛 (xdaforums.com)
FAQ 常问问题 来自 ℳℓ矜ℳℓ持 - 酷安 (coolapk.com)
android - TWRP Recovery 编译教程 - 个人文章 - SegmentFault 思否
Razer Phone TWRP 适配心得 - 哔哩哔哩 (bilibili.com)
翻译:【XDA论坛】教程:如何手动编译TWRP Recovery - 知乎 (zhihu.com)
【刷机】首发安卓TWRP和Magisk集成到Boot分区视频教学_哔哩哔哩_bilibili