小试牛刀

你想不想拥有一部高度个性化的手机呢?作者就是一个非常喜欢捣鼓的人,最近买了一部Nubia布拉格手机,外观挺漂亮,但是一开机,那开机动画快要把人眼睛都闪瞎了有木有?!还好没像格力那样搞个人脸上去,再一看,nubia的口号就是“个性,是一种生活方式!”,那开机动画是挺个性的。

一看刷机包,那结构,很明显splash.img就应该是开机第一屏,就拿它开刀了,上网搜索,真有修改开机第一屏的相关信息,说是用bmp图片素材,直接改后缀为img再通过fastboot模式刷入就可以,我用UE大概对比了下文件结构,发现bmp文件结构跟splash.img明显不一样,难道真的可以?但是真的很想把开机第一屏改了,但是没刷过,又有点害怕,因为手机买来才没几天呢,万一刷了变砖,这种情况是不会保修的,而且改开机第一屏搞不好连刷机模式都进不去那就惨了。

但是禁不住好奇心的驱使,发现splash.img的前8个字节是SPLASH!!,后面紧接着是38 04 00 00 80 07 00 00,就是0x00000438,0x00000780,换算成10进制就是1080,1920,很明显这就是分辨率,后面的摸不清楚,直接把bmp的前面16字节改掉就刷进去了,其实心里也是打鼓的,估计成功的概率不到10%,果然,开机没有出现想要的画面,但也没有开不了机,开机显示一个很小的企鹅图标,这是Linux内核预留的标志,估计读取第一屏数据失败就自动用这个了,这一办法宣告失败。

网上的方法大概对以前的老版本凑效,但是在版本更新以后就不行了,于是继续折腾,splash.img前16字节的意义很明显了,就是splash标志+分辨率。再看splash的结束位置为5eedff,于是开始盘算,大胆假设splash仍然采用bmp图像数据,但是有几项标志是默认的,所以直接取消,不在文件中体现,于是1920×1080的24位真彩色图像就需要1920×1080×3字节数据,猜测使用了前段结构+某种算法标识+数据,于是将官方刷机包中的splash.img用UE将某段数据以二进制方式替换成00,再刷入手机,正常启动,但是能看见图像缺失了一条横线,很明显就是被替换掉的,数据是连续的!

经过一系列摸索,决定以“splash前段+偏移+bmp数据”的组合进行尝试,从官方的splash.img来看,偏移段全部为0,因此以官方splash文件为模板,直接将bmp数据以字节对齐的方式替换后面的数据,刷入,fastboot提示刷入成功,重启,自己想要的开机画面终于来了,但是图像是倒着的,嘿嘿!!!难不倒我,网上据说nubia系统读取的是bmp原始矩阵数据,而bmp图像的排列是行内从左到右,行之间是从下到上,所以需要将其垂直翻转,用PS垂直翻转,再将数据导入,合成文件,再刷入手机,哈哈,这次真的完美了!说实话,中兴的第一屏结构实在太简单!不像三星、LG那么难!

开机第一屏第一版

下一步就是做一个简单程序自动化完成这些动作!

数据结构大底摸清了以后,用C语言写了一个简单的工具,命令行使用,经测试没问题!

开机第一屏制作工具第一版
开机第一屏制作工具第一版

下面是我生成的两张开机第一屏:

第一次生成的开机第一屏
第一张开机第一屏

第一张是在有点丑,于是做了第二张。

第二次生成的开机第一屏
第二张开机第一屏

开机第一屏改进版

第一版工具经人反应存在偏移问题,后经过修改出了第二版,有人不会用命令行工具,于是又简单搞了个GUI界面,就是下面的,为了故弄玄虚,搞了些乱七八糟的提示信息!

开机第一屏制作工具第二版
开机第一屏制作工具第二版

最新版Nubia系列手机开机第一屏制作工具,Win10 VS2015编译,兼容XP/7/8/8.1/10。理论上支持修改所有nubia手机的开机第一屏!

素材要求:

  • 24位bmp图像垂直翻转
  • 分辨率1920×1080。

可用本工具生成开机第一屏文件splash-new.img,可在fastboot模式单独刷入,不影响当前使用系统,仅更改开机第一屏。

刷入命令:

1
fastboot -i 0x19d2 flash splash spalsh-new.img

下载地址

链接: http://pan.baidu.com/s/1nvnKVhf 密码: m4ey