android6.0 非常规屏 recovery小机器人显示异常

android6.0 非常规屏 recovery 小机器人显示异常(黑屏,无图片、动画、字串),在常规屏上没有这个问题,所以这应该跟分辨率有关。一头雾水的时候,百度了解到了 recovery 绘制部分的 UI 源码是 bootable\recovery\screen_ui.cpp。

看一下 screen_ui.cpp,费劲好大力气终于发现关于设置绘制图片及字串的起始坐标:

bootable\recovery\screen_ui.cpp
ScreenRecoveryUI::draw_background_locked
iconX = (gr_fb_width() - iconWidth) / 2;
iconY = (gr_fb_height() - (iconHeight+textHeight+40+sh)) / 2 + MTK_ROBOT_MOVE_DOWN_OFFSET;

int textX = (gr_fb_width() - textWidth) / 2;
int textY = ((gr_fb_height() - (iconHeight+textHeight+40+sh)) / 2) + iconHeight + 40;

再来看一下资源文件 bootable\recovery\res,看了看里面图片资源的尺寸,再看看小得可怜的屏,再看看上面的减法运算,有点尴尬,要不尝试把所有图片资源改小试一试?(以下操作均在win7下进行)


图片、动画部分
一、静态图片(icon_error.png 等)
只需适当调整图片尺寸;如不需要动画,可以直接将动画资源(icon_installing.png)替换成静态图片,即可忽略下面的动画修改。

二、动画(icon_installing.png)
需通过 python 脚本 interlace-frames.py (在 bootable\recovery 目录下)合成,步骤如下:
1、安装 python,并把其安装目录及 该目录下的 python\Scripts 目录加入系统环境变量
2、安装 pip(参考命令:python get-pip.py)
3、安装 Pillow(参考命令:pip install Pillow)
4、修改 interlace-frames.py 源码
#import Image
#import PngImagePlugin
from PIL import Image
from PIL import PngImagePlugin

5、合成图片
以将 icon_installing_1.png,icon_installing_2.png 和 icon_installing_3.png 三张图片合成为一张动画 icon_installing.png 为例,在 bootable\recovery 目录下执行如下命令:
python interlace-frames.py icon_installing_1.png icon_installing_2.png icon_installing_3.png icon_installing.png

6、替换系统图片
bootable\recovery\res\icon_installing.png

7、重新编译

如果上述修改后仍无法显示字串,则需参考下面部分修改字串资源:

字串部分
字串资源整合在格式为 png 的图片中,源码自带生成该字串资源的 app —— recovery_l10n,使用方法如下:
1、修改源码(疑为源码 bug,会导致后面无法生成新字串图片)
development\tools\recovery_l10n\src\com\android\recovery_l10n\Main.java
onCreate
ArrayList locales = new ArrayList();
for (String ln : localeNames) {
//int u = ln.indexOf('_');
int u = ln.indexOf('-');
if (u >= 0) {
Log.i(TAG, "locale = " + ln);
locales.add(new Locale(ln.substring(0, u), ln.substring(u+1)));
}
}

2、修改字串(如无需修改字串可跳过此步骤)
字串风格:
development\tools\recovery_l10n\res\layout\main.xml
字串内容:
development\tools\recovery_l10n\res\values\strings.xml
development\tools\recovery_l10n\res\values-zh-rCN\strings.xml
...

3、编译 recovery_l10n(development\tools\recovery_l10n)
mmm -B development\tools\recovery_l10n
生成路径参考如下:
out\target\product\...\system\app\RecoveryLocalizer

4、将生成的 RecoveryLocalizer 文件夹烧入机器 system\app 目录下
adb push out\...\system\app\RecoveryLocalizer system/app/
重新打包软件(make snod) 烧录

5、开启 RecoveryLocalizer app
     可用 adb 指令跳转:
adb shell am start -n com.android.recovery_l10n/com.android.recovery_l10n.Main

6、生成字串图片
逐一选择类型后点击生成图片(最新的生成会把上一次的覆盖,所以每次生成后要及时取出)

android6.0 非常规屏 recovery小机器人显示异常_第1张图片


7、取出生成的图片
adb pull data/data/com.android.recovery_l10n/files/text-out.png ...

8、处理生成的图片
生成的图片还不能直接替换系统图片,需要在Ubuntu环境下作进一步处理
(如未安装 pngcrush,请先安装 :sudo apt-get install pngcrush)
pngcrush -c 0 text-out.png output.png

9、替换系统资源
bootable\recovery\res\***_text.png

10、重新编译


如有错误或更好的方法,欢迎各位批评指正,望不吝赐教!

借花献佛完毕,以上内容参考自以下链接,由衷感谢原作者
http://blog.sina.com.cn/s/blog_dfd0075c0102whto.html

https://blog.csdn.net/wuqingyidongren/article/details/64920467


你可能感兴趣的:(android6.0)