当前位置: 首页 > news >正文

去除恢复出厂设置中UI文字显示

文章目录

  • 需求
    • 场景
  • 一、代码跟踪与分析
    • 在线文字搜索
    • RK平台本地源码搜索
    • 实际测试验证
    • 代码推理
  • 二、实现方案
  • 三、延伸知识
  • 四、知识总结


需求

需求:去除恢复出厂设置中UI文字显示

场景

Android 相关产品各种方向旋转、强制横竖屏等需求,导致在恢复出厂设置中,部分文字没有显示正常,方向显示异常了。 比如如下图所示:
在这里插入图片描述

一、代码跟踪与分析

既然文字显示出来了,那我们根据文字显示找出具体位置然后屏蔽不就完了呀。

在线文字搜索

Android12在线源码搜索关键字 清除中
在这里插入图片描述

RK平台本地源码搜索

在这里插入图片描述

实际测试验证

无论在线还是本地源码搜索,关键字位置是同一个问题,其中可以看出来 app 位置的肯定不是,因为恢复出厂设置情况下,理论上不会有app 还在运行的,最大可能是 “清除中”

实际测试验证,上面三个地方 通过添加tag,比如111清除中 、222清除中 编译烧录固件发现都不是,并没有按照添加的tag 显示,还是显示 清除中。

代码推理

恢复出厂设置过程中,系统流程肯定在 /bootable/recovery/ 中,在线源码如下:
recovery
在这里插入图片描述

继续看看这个目录相关代码,文件结构,资源文件,如下:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
这个不就是动画和资源文件吗? 难道在recovery 中,通过图片里面取文字???

继续反推通过图片找具体位置:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

思路其实就是通过反向不断推理,在源码里面找,通过文件名、方法名和注释找到核心代码,最终实现功能。

二、实现方案

通过上面反向推理,最终实现方案,通过屏蔽即可:


修改点:draw_background_locked 方法,绘制Surface 时候,屏蔽掉绘制DrawTextIcon 相关内容//const auto& text_surface = GetCurrentText();//int text_x = (ScreenWidth() - gr_get_width(text_surface)) / 2;//int text_y = GetTextBaseline();//gr_color(255, 255, 255, 255);//DrawTextIcon(text_x, text_y, text_surface);

三、延伸知识

当前场景下需要去除文字显示,对于部分产品可能需要更改文字,这个时候可以参考网上介绍内容处理,更新图片等。

四、知识总结

  • /bootable/recovery 模块资源加载方式,映射到小系统对当前界面实现方式
  • 替换、隐藏文案是实现方式

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 3.无人机介绍
  • 《人工智能安全治理框架》1.0版
  • 【算法】模拟退火
  • [linux 驱动]i2c总线设备驱动详解与实战
  • 揭开Facebook AI的神秘面纱:如何利用人工智能提升社交体验
  • C++ | Leetcode C++题解之第395题至少有K个重复字符的最长子串
  • 还能买燃油车吗
  • Pygame中Sprite类实现多帧动画3-1
  • 一个例子彻底搞懂对线程模型的理解 !
  • 【Puppeteer】‘left‘ is already pressed, ‘${button}‘ is already pressed 的解决办法
  • Qt常用控件——QRadioButton和QCheckBox
  • 【VSCode v1.93.0】手动配置远程remote-ssh
  • 开源可视化大屏superset Docker环境部署
  • 计算机网络练级第一级————认识网络
  • VSTO常见的异常
  • 30天自制操作系统-2
  • 5、React组件事件详解
  • C++11: atomic 头文件
  • canvas绘制圆角头像
  •  D - 粉碎叛乱F - 其他起义
  • HTTP中的ETag在移动客户端的应用
  • isset在php5.6-和php7.0+的一些差异
  • Java IO学习笔记一
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • mysql_config not found
  • React as a UI Runtime(五、列表)
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • vue中实现单选
  • 从输入URL到页面加载发生了什么
  • 今年的LC3大会没了?
  • 经典排序算法及其 Java 实现
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 学习使用ExpressJS 4.0中的新Router
  • 函数计算新功能-----支持C#函数
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • #《AI中文版》V3 第 1 章 概述
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • (2024最新)CentOS 7上在线安装MySQL 5.7|喂饭级教程
  • (pojstep1.1.2)2654(直叙式模拟)
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (蓝桥杯每日一题)love
  • (南京观海微电子)——I3C协议介绍
  • (十三)Flask之特殊装饰器详解
  • (五)activiti-modeler 编辑器初步优化
  • (五)关系数据库标准语言SQL
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (一)十分简易快速 自己训练样本 opencv级联haar分类器 车牌识别
  • (原)本想说脏话,奈何已放下
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • (转)setTimeout 和 setInterval 的区别
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .Net IOC框架入门之一 Unity
  • .NET MVC第五章、模型绑定获取表单数据