The system selects a boot animation zipfile from the following locations, in order:
/system/media/bootanimation-encrypted.zip (if getprop("vold.decrypt") = '1')
/system/media/bootanimation.zip
/oem/media/bootanimation.zip
The bootanimation.zip
archive file includes:
desc.txt - a text file
part0 \
part1 \ directories full of PNG frames
... /
partN /
The first line defines the general parameters of the animation:
WIDTH HEIGHT FPS [PROGRESS]
Next, provide an optional line for dynamic coloring attributes, should dynamic coloring be used.
See the dyanmic coloring section for format details. Skip if you don’t use dynamic coloring.
It is followed by a number of rows of the form:
TYPE COUNT PAUSE PATH [FADE [#RGBHEX [CLOCK1 [CLOCK2]]]]
p
– this part will play unless interrupted by the end of the bootc
– this part will play to completion, no matter whatf
– same as p
but in addition the specified number of frames is being faded out whilef
part is faded out, other subsequent f
part0
)f
TYPE) number of frames to fade out when interrupted where 0
meansf ... 0
behave like p
and doesn’t count it as a fading#RRGGBB
CLOCK1
is provided it is the y-coordinate of the clock and the x-coordinatec
CLOCK1
and CLOCK2
are provided then CLOCK1
is the x-coordinate and CLOCK2
isc
c
– will centre the textn
– will position the text n pixels from the start; left edge for x-axis, bottom edge-n
– will position the text n pixels from the end; right edge for x-axis, top edge-24
or c -24
will position the text 24 pixels from the top of the screen,16 c
will position the text 16 pixels from the left of the screen, centred-32 32
will position the text such that the bottom right corner is 32 pixels aboveThere is also a special TYPE, $SYSTEM
, that loads /system/media/bootanimation.zip
and plays that.
The file used to draw the time on top of the boot animation. The font format is as follows:
The file used to draw the boot progress in percentage on top of the boot animation. The font format
follows the same specification as the one described for clock_font.png.
Each part is scanned and loaded directly from the zip archive. Within a part directory, every file
(except trim.txt
and audio.wav
; see next sections) is expected to be a PNG file that represents
one frame in that part (at the specified resolution). For this reason it is important that frames be
named sequentially (e.g. part000.png
, part001.png
, …) and added to the zip archive in that
order.
To save on memory, textures may be trimmed by their background color. trim.txt sequentially lists
the trim output for each frame in its directory, so the frames may be properly positioned.
Output should be of the form: WxH+X+Y
. Example:
713x165+388+914
708x152+388+912
707x139+388+911
649x92+388+910
If the file is not present, each frame is assumed to be the same size as the animation.
Each part may optionally play a wav
sample when it starts. To enable this, add a file
with the name audio.wav
in the part directory.
The system will end the boot animation (first completing any incomplete or even entirely unplayed
parts that are of type c
) when the system is finished booting. (This is accomplished by setting
the system property service.bootanim.exit
to a nonzero string.)
Use zopflipng
if you have it, otherwise pngcrush
will do. e.g.:
for fn in *.png ; do
zopflipng -m ${fn}s ${fn}s.new && mv -f ${fn}s.new ${fn}
# or: pngcrush -q ....
done
Some animations benefit from being reduced to 256 colors:
pngquant --force --ext .png *.png
# alternatively: mogrify -colors 256 anim-tmp/*/*.png
cd
zip -0qry -i \*.txt \*.png \*.wav @ ../bootanimation.zip *.txt part*
Note that the ZIP archive is not actually compressed! The PNG files are already as compressed
as they can reasonably get, and there is unlikely to be any redundancy between files.
Dynamic coloring is a render mode that draws the boot animation using a color transition.
In this mode, instead of directly rendering the PNG images, it treats the R, G, B, A channels
of input images as area masks of dynamic colors, which interpolates between start and end colors
based on animation progression.
To enable it, add the following line as the second line of desc.txt:
dynamic_colors PATH #RGBHEX0 #RGBHEX1 #RGBHEX2 #RGBHEX3
#RRGGBB
.#RRGGBB
.#RRGGBB
.#RRGGBB
.The end colors will be read from the following system properties:
When missing, the end colors will default to the start colors, effectively producing no color
transition.
Prepare your PNG images so that the R, G, B, A channels indicates the areas to draw color1,
color2, color3 and color4 respectively.