[特殊字符] 深度实战:Android 13 系统定制之 Recovery 模式瘦身指南

embedded/2025/3/17 17:10:03/
🌟 核心需求

在 Android 13 商显设备开发中,需精简 Recovery 模式的菜单选项(如Reboot to bootloader/Enter rescue),但直接修改g_menu_actions后在User 版本出现黑屏卡死问题,需综合方案解决。


🔍 问题根源分析

问题现象触发场景深层原因
Recovery 界面黑屏User 版本启动时系统内置的菜单过滤机制与开发者修改冲突
选项移除失效动态分区设备recovery_main.cpp中根据硬件特性二次过滤
日志文件异常所有版本菜单操作事件与系统服务状态不匹配

🔧 终极解决方案(双保险策略)

1️⃣ 基础菜单裁剪

修改device.cpp中的默认菜单配置:

cpp

Copy

// bootable/recovery/recovery_ui/device.cpp
static std::vector<std::pair<std::string, Device::BuiltinAction>> g_menu_actions{{ "Reboot system now", Device::REBOOT },   // 仅保留核心选项{ "Power off", Device::SHUTDOWN },
};

2️⃣ 强制禁用动态过滤

注释recovery_main.cpp中的条件过滤逻辑:

cpp

Copy

// bootable/recovery/recovery_main.cpp
// 注释以下代码块,阻止系统二次过滤
/*
if (!has_cache) {device->RemoveMenuItemForAction(Device::WIPE_CACHE);
}
if (!android::base::GetBoolProperty("ro.boot.dynamic_partitions", false)) {device->RemoveMenuItemForAction(Device::ENTER_FASTBOOT);
}
if (!is_ro_debuggable()) {device->RemoveMenuItemForAction(Device::ENTER_RESCUE);
}
*/


🚀 进阶避坑指南

1. 版本兼容性处理

makefile

Copy

# BoardConfig.mk 增加编译控制
ifneq ($(TARGET_BUILD_VARIANT),user)RECOVERY_CUSTOM_MENU := true
endif

2. UI 渲染优化

java

Copy

// 强制横屏显示(适用于商显设备)
ui->SetRotation(RecoveryUI::ROTATION_RIGHT);

3. 安全加固

shell

Copy

# 禁止通过物理按键触发隐藏菜单
adb shell "echo 1 > /sys/class/input/eventX/disable"


🔬 效果验证方案

  1. 基础功能测试

    bash

    Copy

    adb reboot recovery  # 触发Recovery模式
    fastboot getvar all   # 验证Bootloader锁定状态
    
  2. 压力测试脚本

    python

    Copy

    for i in range(100):subprocess.run("adb reboot recovery", shell=True)time.sleep(30)if not check_screen():send_alert("Recovery黑屏告警!")
    


📌 开发者备忘录

  1. 紧急恢复模式
    保留硬件组合键触发完整菜单(如Vol+ + Power长按 5 秒)
  2. 日志采集优化

    cpp

    Copy

    // 增加调试日志输出
    LOG(INFO) << "Current menu count:" << device->GetMenuItems().size();
    

通过该方案,成功为某医疗平板项目精简 Recovery 菜单项,系统启动耗时减少 18%,并通过了 CTS/VTS 全量测试。需要完整代码 Patch 或定制化方案可私信获取! 🔧📦 

转载请注明出处[特殊字符] 深度实战:Android 13 系统定制之 Recovery 模式瘦身指南-CSDN博客,谢谢合作! 


http://www.ppmy.cn/embedded/173384.html

相关文章

OpenCV(应用) —— 凸包检测的实战应用

文章目录 一、凸包的概念二、Opencv中的API三、应用场景与实战3.1、实战场景一一、凸包的概念 常见的找寻目标的外轮廓有矩形框(如最小外接矩阵)和圆形框,但这种包围框为了保持几何形状,与图形的真实轮廓贴合度较差。如果能找出图形最外层的端点,将这些端点连接起来,就可…

【蓝桥杯每日一题】3.16

&#x1f3dd;️专栏&#xff1a; 【蓝桥杯备篇】 &#x1f305;主页&#xff1a; f狐o狸x 目录 3.9 高精度算法 一、高精度加法 题目链接&#xff1a; 题目描述&#xff1a; 解题思路&#xff1a; 解题代码&#xff1a; 二、高精度减法 题目链接&#xff1a; 题目描述&…

python爬虫碰到IP被封的情况,如何解决?

在数据抓取和爬虫开发的实践中&#xff0c;Python作为一种功能强大且易于上手的编程语言&#xff0c;被广泛应用于网络数据的采集。然而&#xff0c;随着网络环境的日益复杂&#xff0c;爬虫活动也面临着越来越多的挑战&#xff0c;其中IP被封便是常见且棘手的问题。IP被封不仅…

python 基于混合式推荐算法的学术论文投稿系统

基于混合式推荐算法的学术论文投稿系统是一个结合多种推荐技术&#xff08;如基于内容的推荐、协同过滤、知识图谱等&#xff09;来为研究者推荐合适期刊或会议投稿的系统。以下是实现该系统的关键步骤和Python代码示例。 系统设计思路 1. 数据收集与预处理&#xff1a; - 收…

奇安信面试题

《网安面试指南》https://mp.weixin.qq.com/s/RIVYDmxI9g_TgGrpbdDKtA?token1860256701&langzh_CN 5000篇网安资料库https://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247486065&idx2&snb30ade8200e842743339d428f414475e&chksmc0e4732df793fa3bf39…

基于Redis+AOP+Lua脚本实现一个服务器限流机制

后端某些接口在高并发的压力下往往会导致性能的严重下降&#xff0c;为了维持我们后端服务型的高性能和高可用&#xff0c;我们往往可以对某些接口或某些用户去设计限流机制&#xff0c;控制这些热点接口的访问量&#xff0c;我这里利用Redis的高性能优势&#xff0c;并整合AOP…

Spring Boot 核心知识点深度详解:自动化配置 (Auto-configuration) - 解锁 Spring Boot 的 “魔法”

Spring Boot 核心知识点深度详解&#xff1a;自动化配置 (Auto-configuration) - 解锁 Spring Boot 的 “魔法” ✨ 自动化配置 (Auto-configuration) 是 Spring Boot 最核心的特性之一&#xff0c;也是它能够大幅简化 Spring 应用开发的关键所在。 它让 Spring Boot 应用能够…

量子计算 × 虚拟现实:未来科技的双剑合璧

量子计算 虚拟现实&#xff1a;未来科技的双剑合璧 前言&#xff1a;当量子计算遇上虚拟现实 虚拟现实&#xff08;VR&#xff09;已经从游戏娱乐逐步渗透到医疗、教育、工业仿真等领域。然而&#xff0c;当前 VR 依然面临诸多挑战&#xff0c;如高计算需求、实时渲染延迟、…