Recovery只有在升级的时候才会呈现给用户,所以界面一般都很简单,没有android上层那么绚丽,所以recovery下面对图片的支持很有限,仅支持png图片显示,所以我们可以看到,recovery下面所有的背景以及提示信息,都是以png格式图片的资源文件存在。一般的厂商都会觉得,原生的机器人很low,都会重新整理一套升级显示的UI,但并非所有的png图片recovery都是支持的,下面我们来分析下recovery下png资源文件的支持。

6.1 资源文件路径以及分类

我们资源文件的路径在SDK中的bootable/recovery/res-相关的目录中,针对不同的DPI的场景,分别有不同的资源文件:

一般情况下,dpi对应的分辨率如下:

mdpi       HVGA            480*320

hdpi       WVGA            800*480                    FWVGA           854*480                    QHD             960*540         xhdpi      720P            1280*720         xxhdpi     1080P           1920*1080

xxxhdpi     4K             4096×2160

针对分辨率,PPI DPI分不清的,可以参考之前的一篇博客:分辨率 PPI DPI概念定义详解http://blog.csdn.net/csdn66_2016/article/details/70331919

6.2 PNG支持的种类

并非所有的PNG图片,在recovery下面都可以显示,这也是很多人会遇到的问题,明明是png图片,怎么还是不能显示呢,recovery原生对png图片的支持如下:

bit_depth         channels        color_type

8                 3                2

<=8                1                0

<=8                1                3

其中bit_depth是位深度, channels是指支持的颜色的种类,color_type是值颜色类型。我们需要记住的是:

bit_depth不能大于8。

color_type值有 PNG_COLOR_TYPE_GRAY(0)

PNG_COLOR_TYPE_RGB(2)

PNG_COLOR_TYPE_PALETTE(3)

channels值,与color_type有关,PNG_COLOR_TYPE_GRAY与PNG_COLOR_TYPE_PALETTE时,只有一种颜色,PNG_COLOR_TYPE_RGB时有三种颜色

6.3 判断PNG属性方法

我们上节描述了,通过三个属性,来看一个png图片是否能在recovery中显示,当我们拿到一个png图片的时候,怎么分析呢,我们可以写个小的获取png info的程序。

第一步:编译libpng.a库文件

我们从官网下载png的源码,http://www.libpng.org/pub/png/libpng.html,然后在服务器解压,然后编译:./configure CC=gcc --prefix=$PWD/_install, make, make install; 然后就可以生成libpng.a以及png.h相关文件了。

第二步:写sample

pnginfo.c

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "png.h" int main(int argc ,char **argv) {
unsigned char header[8];
size_t bytesRead;
int result = 0;
FILE* fp = NULL;
png_structp png_ptr = NULL;
png_infop info_ptr = NULL;
int color_type, bit_depth;
png_uint_32 width;
png_uint_32 height;
png_byte channels; if (argc !=2 ) {
printf("eg:./pnginfo png_name\n");
return -1;
} fp = fopen(argv[1], "rb");
if (fp == NULL) {
result = -1;
goto exit;
} bytesRead = fread(header, 1, sizeof(header), fp);
if (bytesRead != sizeof(header)) {
result = -2;
goto exit;
} if (png_sig_cmp(header, 0, sizeof(header))) {
result = -3;
goto exit;
} png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
if (!png_ptr) {
result = -4;
goto exit;
} info_ptr = png_create_info_struct(png_ptr);
if (!info_ptr) {
result = -5;
goto exit;
} if (setjmp(png_jmpbuf(png_ptr))) {
result = -6;
goto exit;
} png_init_io(png_ptr, fp);
png_set_sig_bytes(png_ptr, sizeof(header));
png_read_info(png_ptr, info_ptr); png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth,
&color_type, NULL, NULL, NULL); channels = png_get_channels(png_ptr, info_ptr); printf("pnginfo bit_depth:%d, channels:%d, color_type:%d\n", bit_depth, channels, color_type); exit:
if (fp != NULL) {
fclose(fp);
fp = NULL;
} printf("pnginfo result:%d\n", result);
return result; }

makefile:

CC=gcc
TARGET=pnginfo %.o:%.c
$(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $< all:pnginfo.o
$(CC) -o $(TARGET) $< -L. -lpng -lz -lm clean:
rm -rf *.o $(TARGET)

执行make即可生成pnginfo

第三步:获取png属性

./pnginfo icon_error.png

6.4 png转换

如果我拿到的png图片,不支持怎么办呢,我们可以使用PS工具,把png图片转换为recovery可支持的格式即可,如果又不太会使用PS工具呢,还有个更简单的方法,采用QQ的截图功能,然后另存为png图片即可,QQ截图保存的png是标准的RGB格式,即bit_depth(8)channels(3)color_type(2)

6.5 总结

通过上述了解,现在知道了recovery的图片资源文件png的信息了,怎么去判断png是否能够在recovery中显示,以及如果制作recovery支持的png背景图片了。

android recovery 升级UI显示之资源文件的更多相关文章

  1. Android Recovery升级原理

    摘要 Recovery模式指的是一种可以对安卓机内部的数据或系统进行修改的模式(类似于windows PE或DOS).也可以称之为安卓的恢复模式,在这个所谓的恢复模式下,我们可以刷入新的安卓系统,或者 ...

  2. Android多版本flavor配置之资源文件和清单文件合并介绍

    知识背景 Android studio升级到3.0之后,gradle增加了多维度管理配置,便于同一个项目中创建应用的不同版本,分别管理依赖项并签署配置.创建产品风味与创建构建类型类似:只需将它们添加到 ...

  3. android开发,assets下面的资源文件不会变化/改动

    我再调试asserts下面的资源文件,发现我改动assets下面的文件内容,在真机上测试的时候还是最原先的内容,没有变,后来,卸载,重装就ok了. 原因: assets下面的资源文件,若覆盖重装,则里 ...

  4. android recovery 升级之USB设备挂载

    Recovery升级过程,通常会从两个地方获取升级包update.zip升级,一般在线升级,会把升级包下载到cache分区,本地升级会从usb或者tf卡中升级.本文讨论下,本地USB升级时,无法挂载U ...

  5. android中拷贝assets下的资源文件到SD卡中(可以超过1M)

    很多手机游戏,在安装APK之后都得需要下载相应的资源包,然后才能进入游戏. 有这样一个需求:就是游戏中需要的资源包打在APK内,随apk一起进行安装到手机中. 这样就不需要,在安装APK之后,去下载资 ...

  6. android recovery升级过程中掉电处理

    一般在升级过程,都会提示用户,请勿断电,不管是android的STB,TV还是PHONE,或者是其他的终端设备,升级过程,基本上都可以看到“正在升级,请勿断电”,然后有个进度条,显示升级的进度. 但是 ...

  7. android 世界各国英文简写代码 资源文件

    今日又用到这段代码,忽然感觉到如果是第一次用的人肯定也会很麻烦.故在此上传一份.后人再用就不必重复做此工作.跟体育老师学过语文,见谅. 提供下载地址 http://download.csdn.net/ ...

  8. android recovery 升级时间与速度研究

    从android4.4到现在android7.1升级,现在的升级包越来越大,一个system分区大小都分配了2G,整个升级包达到了接近500M, 升级包解压之后1G+,奇怪的是,发现了两个不同批次的板 ...

  9. Android Recovery Ui 分析

    Android  recovery和android本质上是两个独立的rootfs, 仅仅是recovery这个rootfs存在的意义就是为android这个rootfs服务,因此被解释为Android ...

随机推荐

  1. Linux下解压.tar.xz格式文件的方法

    前言 对于xz这个压缩相信很多人陌生,但xz是绝大数linux默认就带的一个压缩工具,xz格式比7z还要小. 今天在下载Node.js源码包的时候遇到的这种压缩格式.查了一下资料,这里进行一下记录,分 ...

  2. 金三银四季来了!Java 面试题大放送,能答对70%就去BATJTMD试试~

    摘要: 2019,相对往年我们会发现今年猎头电话少了,大部分企业年终奖缩水,加薪幅度也不如往年,选择好offer就要趁早,现在开始准备吧,刷一波Java面试题,能回答70%就去BATJTMD大胆试试~ ...

  3. Create and Embed an Application Manifest (UAC)

    http://msdn.microsoft.com/en-us/library/bb756929.aspx 可以在VS2008中设置当执行exe时弹出提升管理员权限对话框:xx Property-&g ...

  4. TCP/IP 笔记 - 用户数据报协议和IP分片

    关于本章中的IP分片部分,参考第五章IP分片头部知识点.需要注意的是,TCP有超时重传,UDP的超时重传则依赖上层应用程序实现. 用户数据报协议(UDP) UDP是一个简单的面向无连接.不可靠的数据报 ...

  5. 【awesome-dotnet-core-learning】(2)-Sprache.Calc-表达式计算器

    [awesome-dotnet-core-learning](2)-Sprache.Calc-表达式计算器 示例代码托管在GITHUB上, 欢迎STAR! 严格来说, Sprache.Calc只是上一 ...

  6. 异步加载CSS

    说到加载 CSS 这种事儿不是很简单吗?像这样咯: <link rel="stylesheet" href="cssfile.css"> 这不就完事 ...

  7. 使用css的-moz-element()把html元素当背景图片去

    background:-moz-element(id)定义了一个从任意HTML元件产生的值.此图像是实时的,这意味着如果更改了HTML元素,则会自动更新使用结果值的CSS属性.element() &l ...

  8. SpringBoot入门之集成Druid

    Druid:为监控而生的数据库连接池.这篇先了解下它的简单使用,下篇尝试用它做多数据源配置.主要参考:https://github.com/alibaba/druid/wiki/常见问题 https: ...

  9. spring boot(二): spring boot+jdbctemplate+sql server

    前言 小项目或者做demo时可以使用jdbc+sql server解决即可,这篇就基于spring boot环境使用jdbc连接sql server数据库,和spring mvc系列保持一致. 在sp ...

  10. Python爬虫之多线程下载程序类电子书

      近段时间,笔者发现一个神奇的网站:http://www.allitebooks.com/ ,该网站提供了大量免费的编程方面的电子书,是技术爱好者们的福音.其页面如下:   那么我们是否可以通过Py ...