Multi-OEM Dynamic Boot Animation icon

Multi-OEM Dynamic Boot Animation

v2.0guidecommunity

Systemless boot animation engine for MIUI, ColorOS, and Realme UI with random animation cycling and 60-second crash-rescue watchdog.

Community Package•Boot Animations & Splash•by Stinky Panda•MIT•Updated May 17, 2023
Platforms:
✓ Magisk✓ KernelSU✓ APatch
Download v2.0Starting download...
multi-oem-bootanimation-v2.0.zip

Overview

Multi-OEM Dynamic Boot Animation (authored by Stinky Panda) provides a reliable, systemless framework for customizing Android boot sequences across diverse OEM interfaces, including Xiaomi (MIUI/HyperOS), OPPO (ColorOS), Realme (Realme UI), and generic AOSP firmware.

Installing custom boot animations has traditionally been one of the most common causes of bootloops for modders. Mismatched frame dimensions, unsupported image compression (such as deflated rather than store-only ZIP compression), or missing desc.txt terminating newlines cause the native Android bootanimation binary to fault or enter infinite replay loops.

Multi-OEM Dynamic Boot Animation eliminates this vulnerability by wrapping the animation delivery in an autonomous health-check watchdog that monitors startup timing and disengages the overlay if any fault occurs.


Technical Architecture & How It Works

The module operates across three complementary components:

1. Multi-Stage Animation Overlay

Android loads boot animations from prioritized locations:

  1. /product/media/bootanimation.zip
  2. /system/media/bootanimation.zip

The module establishes systemless mounts on these locations, injecting animations packaged with the requisite part structures (part0, part1, etc.) and non-compressed format (zip -0) essential for hardware surface decoders.

2. Startup Watchdog (service.sh)

The module’s late-service daemon monitors the core Android init system property:

sleep 60
if [[ "`getprop init.svc.bootanim`" = "running" ]]; then
    # Boot animation is still looping after 60 seconds -> potential hang
    echo > $MODDIR/disable
    sh $MODDIR/umount.sh
    echo "Device startup failure detected. Module disabled automatically." > $MODDIR/boot_failure.log
    exit
else
    # Startup successful -> execute random animation selection for next boot
    sh $MODDIR/random_animation.sh
fi

If the animation daemon is still actively spinning after 60 seconds, the module concludes that the system has hung, immediately calls umount.sh to unmount the overlay from memory, and writes a recovery flag.

3. Dynamic Animation Shuffler (random_animation.sh)

When the phone reaches normal operation, random_animation.sh scans the module directory for alternate animation archives, randomly selects one using $RANDOM, and stages it as the primary bootanimation.zip for the subsequent device restart.


Adding Custom Animations

To introduce your own animations:

  1. Ensure the animation archive is stored using 0% compression (Store method in 7-Zip or zip -0 -r bootanimation.zip desc.txt part*).
  2. Verify that desc.txt includes a trailing blank line.
  3. Copy the archive into /data/adb/modules/bootanimation/ with a distinct filename (e.g. cyberpunk.zip).

Frequently Asked Questions

What happens if a custom bootanimation.zip is corrupted or invalid?

The built-in service watchdog monitors init.svc.bootanim. If the animation daemon runs continuously for over 60 seconds (a standard indicator that the OS cannot progress to SurfaceFlinger/SystemUI), the script automatically drops a disable flag, triggers umount.sh to detach the faulty animation, and safely reboots the device.

How do I add multiple boot animations for the randomizer to choose from?

Place additional boot animation ZIP archives directly in the module directory (/data/adb/modules/bootanimation/). During each shutdown or reboot cycle, the random_animation.sh script will pick one at random and prepare it for the subsequent boot sequence.