文章

小米 9se 手机自定义启动画面 splash/logo

折腾一下 小米 9se 的 splash, 就是刚启动开机时显示的那个 logo 画面.

网上一直找不到 mi9se 的 splash 的做法,找了好一会儿找到红米4 的 splash 脚本,毕竟太老估计没参考价值,然后在 XDA 上找到了 mi9 的: Mi 9 Splash / Boot Image creation script. , 嗯,看来有戏。

首先

logo 分区 dd 下来,毕竟我是有 root 的人,我记得以前都是在 splash 分区的,我也一起 dd 了,根据上面 XDA 的文,不在 splash 分区,我也看了 splash.img, 都是填充的 00

1
2
su
dd if=/dev/block/bootdevice/by-name/logo of=/sdcard/logo.img

根据 XDA 上所说在偏移量 0x4000 位置定义了 logo 相关图片的信息,look:

折腾了一下,还是跟 mi9 有些差别,其中:

  • 0x5000: 第一张图片位置
  • 0x740000: 第二张图片位置
  • 0xe7b000: 第三张图片位置
  • 0x15b6000: 第四张图片位置
  • 0x1cf1000: 第五张图片位置

前四张图片大小均为 0x73b000, 第五张图片大小 0x26a000, 为了知道每张图的作用,我得把图导出来看看,所以 WinHEX 是个神器啊:

首先 编辑 > 定义选块

接首 编辑 > 复制选块 > 至新文件 , 保存为 bmp 就是图片了。图片全导出后就知道每张图的作用了。

图片定义:

  • pic1.bmp : 启动画面
  • pic2.bmp : fastboot 画面
  • pic3.bmp : 未解锁画面
  • pic4.bmp : 已经解锁画面
  • pic5.bmp : 系统损坏

最后能看出 1~4 的图片一样大小,所以我就在想是不是参数一样的 位图 都是一样大小的,经我这菜鸡 ps 高手确认过眼神,是的。所以最后一张是 8 位的,ps 导不出 8 位的 位图。也许是我操作不对。

最后我最后一图也是用的 24 位的,修改了最后一图的 文件大小。试一下嘛。

拿了 XDA 上找到的 mi9_logo-1080-2340.py 修改了一下, 我把它取名 mi9se_logo-1080-2340.py:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import io

offset0 = 0x4000
offset1 = 0x5000
offset2 = 0x740000
offset3 = 0xE7B000
offset4 = 0x15B6000
offset5 = 0x1CF1000

outpt = open("logo_new_mi9se.img", "wb")

# 8bit @pic5.bmp
emptyContent0 =  [0 for i in range(0x1F5B000)]
# 24bit @pic5.bmp
emptyContent1 =  [0 for i in range(0x242C000)]

# 8bit @pic5.bmp
mi9seOffset0 = [0x4C, 0x4F, 0x47, 0x4F, 0x21, 0x21, 0x21, 0x21, 0x05, 0x00, 0x00, 0x00, 0x40, 0x07, 0x00, 0x00,
               0x7B, 0x0E, 0x00, 0x00, 0xB6, 0x15, 0x00, 0x00, 0xF1, 0x1C, 0x00, 0x00, 0x3B, 0x07, 0x00, 0x00,
               0x3B, 0x07, 0x00, 0x00, 0x3B, 0x07, 0x00, 0x00, 0x3B, 0x07, 0x00, 0x00, 0x6A, 0x02, 0x00, 0x00]

# 24bit @pic5.bmp
mi9seOffset1 = [0x4C, 0x4F, 0x47, 0x4F, 0x21, 0x21, 0x21, 0x21, 0x05, 0x00, 0x00, 0x00, 0x40, 0x07, 0x00, 0x00,
               0x7B, 0x0E, 0x00, 0x00, 0xB6, 0x15, 0x00, 0x00, 0xF1, 0x1C, 0x00, 0x00, 0x3B, 0x07, 0x00, 0x00,
               0x3B, 0x07, 0x00, 0x00, 0x3B, 0x07, 0x00, 0x00, 0x3B, 0x07, 0x00, 0x00, 0x3B, 0x07, 0x00, 0x00]


outpt.write(bytearray(emptyContent1))

outpt.seek(offset0)
outpt.write(bytearray(mi9seOffset1))

outpt.seek(offset1)
img = open("pic1.bmp", "rb")
outpt.write(img.read())

outpt.seek(offset2)
img = open("pic2.bmp", "rb")
outpt.write(img.read())

outpt.seek(offset3)
img = open("pic3.bmp", "rb")
outpt.write(img.read())

outpt.seek(offset4)
img = open("pic4.bmp", "rb")
outpt.write(img.read())

outpt.seek(offset5)
img = open("pic5.bmp", "rb")
outpt.write(img.read())

outpt.close()

找了几张帅气的照片转成 bmp ,激动的运行 python mi9se_logo-1080-2340.py, 就有了 logo_new_mi9se.img.

然后

1
2
fastboot flash logo logo_new_mi9se.img
fastboot reboot

结果出来了,就是我那帅气的照片。

另外根据 github 上的 Xiaomi_Splash_Creator 源码,我就把 dd 出来的 logo.img0x000x5000 导出做为头文件,然后:

1
cat mi9se/header1.img pic1.bmp pic2.bmp pic3.bmp pic4.bmp pic5.bmp > logo_new_mi9se.img

刷了进去,效果一毛一样的。

到此结束。

稍等一下,我把这些放 github 上了: mi9-mi9se-logo-image-creation-script.

参考的文中都有提了,就不另列出来了。

本文由作者按照 CC BY 4.0 进行授权