我们平时目测的开机logo一般是两种:静态的和动画的。其实在实现logo的过程中,有四幅图片:(1)、uboot显示;(2)、kernel显示logo_linux_clut244.ppm;(3)、android第一幅intilogo.rle;(4)、android第二幅,bootanimation。前三幅一般我们做成相同的,(4)为动画显示。启动过程如下所示。
 

android系统开机画面 安卓手机开机画面_linux

 

一、kernel显示

大多数android厂商会设置logo.img来替代kernel显示,将logo分区擦除,可看到kernel显示结果。

#手机解锁bootloader和开发者模式
#检查设备是否连接
adb devices
#进入bootloader
adb reboot bootloader
#检查设备是否连接
fastboot devices
#擦除logo分区
fastboot erase logo

查看android设备的分区情况,

找到源码kernel\drivers\video\logo\目录,在这个目录下你会发现logo_linux_clut224.ppm文件,这个就是开机画面的图片,如要替换成自己的Logo,则把自己的Logo图片(png格式)转换成ppm格式,替换这个文件,同时删除logo_linux_clut224.c logo_linux_clut224.o文件,重新编译烧录即可。

 

注:将png图片改成.ppm格式。首先你要有个 和自己屏幕分辨率一样 或者 小于屏幕分辨率的图片,如logo_linux_clut224.png

    ①将png图片转成pnm

     pngtopnm logo_linux_clut224.png >logo_linux_clut224.pnm

    ②将pnm图片的颜色数限制在224色

    pnmquant 224 logo_linux_clut224.pnm > logo_linux_clut224_backup.pnm(此处生成后的名字不可与前者相同,否则会报错)

    ③将pnm图片转换成我们需要的ppm

    pnmtoplainpnm logo_linux_clut224_backup.pnm >logo_linux_clut224.ppm

 

<source>/kernel/goldfish/drivers/video/ 
<source>/kernel/goldfish/drivers/video/logo/ 
...


二、Android 开机动画

Android的开机动画是由Linux本地守护程序bootanimation专门控制实现的,其代码在:frameworks/base/cmds/bootanimation/目录下,修改Android开机动画有两种方式:

Ø 蒙板图片替换:

替换frameworks/base/core/res/assets/images/目录下的两个图片文件:android-logo-mask.png和android-logo-shine.png。android-logo-mask.png是镂空蒙板图片,android-logo-shine.png是镂空蒙板后面的闪光png图片。两个图片通过叠加移动来达到动画效果。

Android系统默认的开机动画是由两张图片android-logo-mask.png和android-logo-shine.png通过程序调用实现的动画效果(明暗变化)。 
这两张图片保存在<android-source>/frameworks/base/core/res/assets/images中。

简单替换的方法就是自定义png图片,替换 android-logo-mask.png文件,并重新编译:

$ mmm -B frameworks/base/core/res/

会生成新的<android-source>/out/target/product/xxx/system/framework/framework-res.apk文件,替换的图片就在其中。

Android5.1的android字样貌似是不能单独更改的,可以用开机动画替换,和5.1之前的版本相比在init.c代码中做了一些改动:

android系统开机画面 安卓手机开机画面_开机动画_02

开机画面显示的重点函数console_init_action()并没有调用load_565rle_image(INIT_image_FILE),即在调用到console_init_action()函数后,指定的开机画面为ANDROID字样。 
load_565rle_image()函数也是不存在的。这就是android 5.1和之前不同之处,这也就说明了android5.1后,”android开机LOGO”不能替换了,只能通过替换开机动画来达到效果。将开机动画替换后,ANDROID字样也随之改变,因此通过直接更换开机动画来达到目的即可。

<source>/system/core/init/ 
<source>/system/core/init/init.c 
<source>/system/core/init/logo.c 

 

Ø 逐帧动画替换:

在/data/local/或/system/media/目录创建bootanimation.zip文件,该压缩包文件里存放有逐帧动画及控制脚本。

制作Android开机动画文件时,文件bootanimation.zip压缩模式需为存储模式。如果不是存储模式,开机界面将会出现黑屏的情况,无法正常播放。

压缩命令如下:

zip -r -0 bootanimation.zip part0 desc.txt

执行上面命令,即可将part0目录,part1目录,desc.txt文件以存储的压缩方式压缩为bootanimation.zip。

目录结构:
dosc.txt    part0 

dosc.txt内容

//part0内图像像素 540*960 每帧(s)播放11张图片
540 960 11
// 1:重复播放一次,但是“0”侧代表无限循环播放   0:前后两帧之间间隔时间/帧数
p 1 0 part0

part0 目录中的图片的命名要是连续的,比如pic_001, pic_002, _pic_003 … 图片格式png或jpg都可

假如你拿到一个gif文件,那么如何将其制作成开机动画呢?首先将该动画使用PS打开(我是用的是PS6),然后等其加载完成后,gif的每一帧都会被加载出来。而我们需要做的就是将他们导出来,同时需要修改尺寸为自己手机尺寸。然后每一帧名称为有序排列。操作步骤如下!

加载完成后,点击"文件"->"导出"->"渲染视频"弹出一个选项框:

android系统开机画面 安卓手机开机画面_开机动画_03

名称只需要保留.jpg,如果是xxx.jpg的话,生成的图片会是xxx001.jpg这种形式了。

选择文件夹为你导出图片的路径。接下来那个选项选择photoshop图像序列,起始编号为1,位数根据图片最大数量选择,图片分辨率,左边为宽,右边为高,帧数一般默认为30 fps,设置完了之后点击渲染。即可快速将gif动画分解为对应分辨率和序列名称的开机动画图片资源。再按照1中说说的目录结构制作即可。


修改第一屏画面

#splash存放目录
/dev/block/platform/soc/7824900.sdhci/by-name
#拷贝到本地 splash或logo 文件
dd splash ~/