小米 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.img
从 0x00
到 0x5000
导出做为头文件,然后:
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.
参考的文中都有提了,就不另列出来了。