Android boot animations

A Python tkinter-based animation tool/library for creating custom Android boot animations. Built across two summers when stock animations just weren’t cutting it anymore.

Backstory

This project is from my high school days when I was tinkering with my phone — rooting, installing custom operating systems, and generally modding it quite a bit. When I found out you could change both the boot image and boot animation, I had to try it.

Changing the boot image is somewhat straightforward (if risky — you’re editing system partitions): extract it with adb, use a packaging tool like Android Image Kitchen, edit the image, repackage it and flash it back. For boot animations, it’s even easier with pre-existing ones — just download a .zip and replace the one in your phone’s root partition.

But for someone who enjoys customizing things, this quickly feels too generic. It doesn’t feel like your phone anymore. So I decided to create custom animations with a twist: the animation fades into your actual homescreen, which felt both personalized and slick.

Animation libraries

The project includes two animation styles, built during two separate summers when I got bored of my old boot animation:

RainDrip — Pixelated raindrops fall down the screen, leaving lasting traces that gradually reveal the lock screen image underneath.

StarFall — Luminous stars and meteors streak across the screen, lighting up parts of the lock screen on impact. Ends with a large meteor causing a flash that fades into the full lock screen.

How it works

Both libraries provide controls for:

  • Spawn timing and frequency of animation elements
  • Size and speed of particles/drops
  • FPS targeting (boot animations share resources with the OS booting, so performance matters — there may be lag even at 24 FPS)
  • Splitting the animation into initial, loop, and ending phases — allowing seamless looping when boot time exceeds animation length

The output is a standard Android boot animation zip (desc.txt + part0/, part1/ frame directories), ready to push to /system/media/ via adb.