前言:在实际的ROM修改中,Recovery的修改还是会经常遇到的,这篇文章主要讲解如何修改Recovery字符串。
 
首先我们先了解下大概的流程。
1.screen_ui.cpp 中的ScreenRecoveryUI::Init() 负责加载基本资源信息。
2.Init()调用
    LoadLocalizedBitmap("installing_text", &backgroundText[INSTALLING_UPDATE]);
    LoadLocalizedBitmap("erasing_text", &backgroundText[ERASING]);
    LoadLocalizedBitmap("no_command_text", &backgroundText[NO_COMMAND]);
    LoadLocalizedBitmap("error_text", &backgroundText[ERROR]);
    分别对应recovery需要用到的四种字符串资源。
3.LoadLocalizedBitmap 调用res_create_localized_surface
4.res_create_localized_surface 在minui/resources.c中,其中
 snprintf(resPath, sizeof(resPath)-1, "/res/images/%s.png", name);
 我们可以知道是加载了res/images/目录下的图片资源。
5.对应res/images/目录即可找到对应的installing_text.png

6.函数就这样解析图片,然后得到需要的文字资源。
 
其次才是关键:即如何将文字资源放在png图片中呢?
秘密就在development\tools\recovery_l10n 这个文件夹中。
1.recovery_l10n就是谷歌提供的制作字符串图片的APK,通过源码下的mmm编译,可以得到RecoveryLocalizer.apk。
2.打开文件recovery_l10n\res\values-zh-rCN\string.xml
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
    <string name="recovery_installing" msgid="7864047928003865598">"正在安装系统更新… 请勿断电"</string>
    <string name="recovery_erasing" msgid="4612809744968710197">"正在清除… 请勿断电"</string>
    <string name="recovery_no_command" msgid="1915703879031023455">"无命令。"</string>
    <string name="recovery_error" msgid="4550265746256727080">"出错了!"</string>
</resources>
3.这里就可以看到需要用到的四个字符串,修改成需要的文字。
4.重新编译后,安装到对应的设备。打开apk,选择相应的字符串,执行Go。
 

5.通过adb命令既可拿到图片资源了。

6.拿到资源后,通过执行pngcrush来进行图片处理,因为读取pngcrush处理过的png比普通的png快,且内存小。
pugcrush -c 0 text_out.png output.png
至此我们就完成了字符串图片的创建。
最后,将字符串图片重新放入到bootable\recovery\res\image目录下,替换原来的图片,重新编译整个工程即可完成修改了。

如何修改Recovery的字符串资源的更多相关文章

  1. 一步步教你如何源码编译Recovery

    *1 准备Ubuntu作为您的操作系统,笔者的版本是12.04_amd64. *2 准备 Android 源码的编译环境,主要是安装一些编译用到的lib库,以及同步源码的一些工具 ,如GIT,CURL ...

  2. 杂牌机搞机之旅(二)————移植TWRP第三方Recovery并刷入

    原本想把杂牌机作为android破解和开发的测试机,破解的话肯定是安装框架的嘛,毕竟有些是要涉及到脱壳 . 但是,我尝试安装xposed的时候,手机卡在了开机界面,也就是magisk出现了错误,如果想 ...

  3. [Android][Recovery] Recovery下找不到sdcard路径

    做升级的时候,把更新包拷贝到sd卡中,然后调用接口进行重启升级 wossoneri.github.io File update_file = new File("/sdcard/update ...

  4. 记录魅族m1note编译TWRP recovery 3.1.0-0,包括mtk机型的处理方法

    1.安装64位linux系统,我用的是deepin os 15.3 2.将系统升级到最新版本 sudo apt-get update && sudo apt-get upgrade 3 ...

  5. 不懂这个别说是刷机高手!安卓Recovery你知多少

    [PConline 应用]玩过安卓刷机的朋友相信都听说过Recovery,在刷机前,第一步往往是解锁手机,第二部就是刷入Recovery了.利用Recovery读取第三方Rom并刷入系统,才能实现刷机 ...

  6. KingbaseES R3 集群修改system用户密码方案

    方案说明: 对于kingbaseES R3集群修改system密码相比单机环境有一定的复杂性,需要修改的位置如下: 1)数据库中system用户密码,可以用alter user命令修改 2)在reco ...

  7. 使用zfs进行pg的pitr恢复测试

    前段时间做了一下zfs做pg的增量恢复测试,mark一下. 服务器信息: 主机:192.168.173.43 备机:192.168.173.41 主备使用流复制搭建,在备机上面进行了zfs快照备份. ...

  8. postgres配置主从流复制

    postgres主从流复制 postgres在9.0之后引入了主从的流复制机制,所谓流复制,就是从库通过tcp流从主库中同步相应的数据.postgres的主从看过一个视频,大概效率为3w多事务qps. ...

  9. postgresql流复制配置

    一.配置环境: 示例环境 主机名 IP 角色 系统版本 数据目录 pg版本 db1 192.168.128.128 主库 RedHat5.3 /app/postgreSQL/data 9.1.7 db ...

随机推荐

  1. 谈一谈对象池SafeObjectPool能干什么

    前言 首先从ado.net的连接池开始了解,数据库操作通常是 new SqlConnection(). Open(). 使用完后 Close(),整个过程相当耗时,特别是频繁建议套字接连接的过程.ad ...

  2. android事件分发源码分析—笔记

    昨天晚上从源码角度复习了一下android的事件分发机制,今天将笔记整理下放在网上.其实说复习,也是按着<android开发艺术探索>这本书作者的思路做的笔记. 目录 事件是如何从Acti ...

  3. DSAPI多功能.NET函数库组件

    DSAPI.dll不定期更新,增加功能,故无法每次都发到网上,如果需要获得最新版DSAPI.dll的,请到QQ群:419130936群共享里下载. 简介     dsapi.dll是一款基于.net平 ...

  4. 【spring实战第五版遇到的坑】第14章spring.cloud.config.uri和token配置项无效

    本文使用的Spring Boot版本为:2.1.4.RELEASE Spring Cloud版本为:Greenwich.SR1 按照书上的做法,在application.yml中配置配置服务器的地址和 ...

  5. JavaScript对象类型判断注意点

    注意点 不要使用 new Number() . new Boolean() . new String() 创建包装对象:用 parseInt() 或 parseFloat() 来转换任意类型到numb ...

  6. windows之自动化在虚拟机部署操作系统并自带python环境

    (1)使用详情: **************************** *    操作说明     * **************************** 1.修改Config文件夹中的Se ...

  7. Storm入门(九)Storm常见模式之流聚合

    流聚合(stream join)是指将具有共同元组(tuple)字段的数据流(两个或者多个)聚合形成一个新的数据流的过程. 从定义上看,流聚合和SQL中表的聚合(table join)很像,但是二者有 ...

  8. tcp/ip协议详解

    1. 概念介绍 互联网协议(Internet Protocol Suite)是一个网络通信模型,以及一整个网络传输协议家族,为互联网的基础通信架构.它常被通称为 TCP/IP 协议族(英语:TCP/I ...

  9. 蓝牙协议中的SBC编解码原理和仿真

    一.SBC的原理 SBC是subband codec的缩写,中文叫做次频带编码,也叫子带编码.其基本原理是把信号的频率分为若干子带,然后对每个子带进行编码,并根据每个子带的重要性及特点分配不同的位数( ...

  10. 使用 Moq 测试.NET Core 应用 -- Mock 行为

    第一篇文章, 关于Mock的概念介绍: https://www.cnblogs.com/cgzl/p/9294431.html 第二篇文章, 关于方法Mock的介绍: https://www.cnbl ...