【Android 12 AOSP学习】Android系统修改开机logo图片及开机动画还有遇到的问题

本文详细介绍了如何在Android 12系统中修改开机logo和开机动画。包括制作bmp格式的logo图片,替换系统默认logo,创建并替换bootanimation.zip文件,理解desc.txt配置,以及通过adb命令临时修改和修改源码实现永久变更。在过程中可能遇到的权限问题和解决方案也进行了说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

标题Android 修改系统开机动画

Linux版本:Ubuntu20.04

Android版本:12

第一阶段

制作logo图片

logo图片的格式一般为bmp格式

logo图片大小一般只支持8M大小,这个需要注意下

需要注意的是,Android开机启动的logo图片一般有两张,第一张是开机logo,第二张是内核启动logo。一般情况下先显示开机logo之后显示内核logo,logo全都显示完成后则进入第二阶段播放Android开机动画。

替换logo

  • 准备 logo
    • 制作新的 logo.bmp、logo_kernel.bmp
      • 图片属性和默认的 logo.bmp 、logo_kernel.bmp一致,否则会出现颠倒异常
      • width,height 都为偶数
  • 替换 logo
    • 替换kernel/logo.bmpkernel/logo_kernel.bmp

如果我们的两张logo图片是一样的话则我们只需要替换一张即可,然后删掉另一张。

重新编译img后查看效果

第二阶段

替换开机动画包

关于bootanimation.zip文件

Android 2之后的开关机动画主要是由一个 名叫 bootanimation.zip 的压缩包组成 ,这个压缩包里面包含数张png格式的图片,还有一个desc.txt的文本文档,Android系统在开机时按desc.txt里面的指令,屏幕上会按文件名称顺序连续的播放一张张的图片,这里面的保存的图片需要按照顺序编号命名。

下面介绍bootanimation.zip文件里面的内容

在bootanimation.zip文件里面有命名规则为 part0、part1 的文件夹以及一个desc.txt文件,后面如果我们还需要增加part文件夹只需按照文件夹命名规则直接新建就行,如part2、part3,文件夹里放的就是我们的png图片。

下面介绍说desc.txt文件的内容

desc.txt 文件里的命令是配置我们的图片以什么样的规则来显示。

desc.txt的内容格式为

# desc.txt文件命令

832 520 30

p 1 0 part0
p 0 0 part1

832 520 30 是控制图片的分辨率,以及图片显示的帧率

832 520 代表图片分辨率

30 代表显示的帧率,1秒内播放30张图片

  • p 1 0 part0 是控制图片以怎样的规律播放
    • 第一位p代表播放的意思;
    • 第二位1代表只播放一次的意思(如果是0则代表循环播放);
    • 第三位默认为0即可,指播放间隔时间为0(在循环播放情况下,代表播放完一轮后,需间隔多少秒再重新播放);
    • 第四位part0则表示这行条命令是对part0目录下的开机图片有效;

第二条命令则是一样的意思

如果图片准备好了,desc.txt里面的命令准备好了,就可以把他们一起打包压缩成zip格式了,在压缩文件时使用的压缩方式为存储

修改Android系统开关机动画

首先准备好 bootanimation 文件里的资源,其中 desc.txt 文件里的分辨率命令大小需要和图片及模拟器分辨率大小一致,然后在 linux 中通过下面的命令执行压缩

#以store方式压缩,进入配置文件当前的目录执行下面命令
zip -0 -r ../bootanimation.zip ./*
#或
zip -0qry -i \*.txt \*.png \*.wav @ ../bootanimation.zip *.txt part

压缩完成后,会在上一级目录生成 bootanimation.zip 文件

启动模拟器

emulator -writable-system

这里我们需要使用这个命令启动模拟器emulator -writable-system ,因为普通的emulator命令没有读写权限,而使用这个命令后就可以了

(1)临时修改的方法

下面来安装adb命令来通过liunx系统操作Android设备

sudo apt-get install adb

新开一个终端,我们通过命令将我们制作好的 bootanimation.zip 文件push到android设备的 system/media 目录中将其中的bootanimation.zip 文件替换掉

adb root    # 开启root权限
adb remount # 重新挂载设备
adb push /home/use/下载/bootanimation.zip /system/media/bootanimation.zip # 将/home/use/下载 目录下的bootanimation.zip文件替换 /system/media 目录下的 bootanimation.zip

/home/use/下载/bootanimation.zip这个路径是根据你linux系统下的bootanimation.zip文件路径来的

我们替换成功后进入shell为bootanimation.zip文件设置权限

adb shell  # 进入设备终端
su
mount -o remount,rw /system  # 设置/system目录为可写
cd /system/media/  
chmod 777 bootanimation.zip

权限设置好后可以执行下面的命令来运行开机动画

adb shell
setprop ctl.start bootanim #执行开机动画
getprop ctl.start bootanim #停止开机动画

(2)通过修改代码的办法

我们首先找到这个目录 ~/Android_12_AOSP/packages/services/Car/car_product/bootanimations

将目录下的 bootanimation.zip 文件替换成我们制作的

然后我们找到~/Android_12_AOSP/packages/services/Car/car_product/build/car.mk文件

在car.mk文件里添加以下内容

# Boot animation
PRODUCT_COPY_FILES += \
packages/services/Car/car_product/bootanimations/bootanimation.zip:system/media/bootanimation.zip

意思是将前面文件在编译时copy到后面目录也就是设备对应目录位置。然后我们重新编译,重启模拟器即可看到效果

遇到的问题和解决方法

在替换bootanimation.zip文件中遇到的问题差不多全是因为没有android设备的写入权限造成的

在启动模拟器时通过下面命令来以可写模式启动设备

emulator -writable-system

官网上的介绍是如下,链接为https://developer.android.google.cn/studio/run/emulator-commandline?hl=zh-cn#startup-options

-writable-system  
使用此选项在模拟会话期间创建可写系统映像。为此,请执行以下操作:
1、使用 -writable-system 选项启动虚拟设备。
2、从命令终端输入 adb remount 命令,让模拟器以读/写方式重新装载 system/(默认情况下,它以只读方式装载)。

运行adb remount报错

avb_ops_user.cpp:217: ERROR: Error writing data.
avb_user_verity.c:205: ERROR: Error writing to partition 'vbmeta'
Skipping /system for remount
[liblp]bool android::fs_mgr::WritePrimaryMetadata(int, const android::fs_mgr::LpMetadata &, uint32_t, const std::string &, const std::function<bool (int, const std::string &)> &) write 540 bytes failed: Operation not permitted
[libfs_mgr]add partition scratch
Can not mount overlayfs for partitions: No such file or directory
failed to remount partition dev:/dev/block/dm-1 mnt:/vendor: Read-only file system
Consider providing all the dependencies to enable overlayfs
remount failed
avb_ops_user.cpp:217: ERROR: Error writing data. avb_user_verity.c:205: ERROR: Error writing to partition 'vbmeta' Skipping /system for remount

运行 mount -o remount,rw /system 报错

mount: '/system' not in /proc/mounts

运行 adb push /home/use/下载/bootanimation.zip /system/media/bootanimation.zip 报错

adb: unable to connect for root: no devices/emulators found

以上问题差不多都是因为没有写入权限造成的,以写入命令启动模拟器后在执行上面这些命令就能解决问题

参考文章:

[1] https://blog.youkuaiyun.com/u012301841/article/details/51598115
[2] https://blog.youkuaiyun.com/weixin_41388144/article/details/109405440
[3] https://blog.youkuaiyun.com/weixin_43790707/article/details/108239130
[4] https://blog.youkuaiyun.com/JaniceZhou37/article/details/122867290

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值