Repository navigation
LiveWall for Android 1.0.0
The first release of the Android port. A live wallpaper built around one
constraint: it should cost almost nothing when you aren't looking at it.
When the wallpaper stops being visible — any app in front, screen off, device
locked — the MediaCodec and its buffer pool are destroyed, not paused. The
last frame stays on screen composited by SurfaceFlinger at no cost, and playback
resumes from the saved timestamp.
| State | Memory (PSS) | CPU |
|---|---|---|
| Video, 1920×1080 24 fps, wallpaper visible | 44 MB | 12.3% |
| Video, wallpaper hidden | 32 MB | 0.00% |
come from an API 35 arm64 emulator with hw.gpu.enabled=no — software AVC decode
and a SwiftShader GL stack, i.e. every fixed-function block this design depends
on replaced by the CPU. No hardware-device measurements have been taken. The
teardown result on the second row is codec-independent and stands; the
visible-state CPU figure is not a phone number and is not quoted as one.
111 KB. No AndroidX, no Compose, no Material, no media3, no bundled ffmpeg
— the shipped runtime classpath is the Kotlin standard library and nothing else.
Install
Requires Android 10 (API 29) or newer.
adb install LiveWall-android-1.0.0.apkThen open LiveWall, add a video, and set it as your wallpaper. Videos are
converted on import and only the converted file is played; your original is never
copied or modified.
The APK is signed with a self-signed key, not distributed through Play, so your
device will ask you to allow installation from this source. Signing certificate:
CN=LiveWall, O=Fegno Technologies, C=IN
SHA-256 f5:6b:aa:64:f4:4c:ad:a6:e9:65:b4:33:cc:f4:3a:33:8b:5f:81:92:e3:d5:d2:4b:6a:9e:14:75:73:29:43:28
Or build it yourself — see platforms/android/README.md:
cd platforms/android && ./tools/build.sh installKnown limits
- No hardware-device measurements, as above.
- OEM skins are untested. Some launchers keep the wallpaper permanently
hidden behind a blur layer, some never report visibility correctly, and some
aggressively kill wallpaper services. Nothing here has been exercised beyond
stock Android. - The gradient mode is not free, unlike its macOS counterpart —
SurfaceFlinger will not animate a buffer for you, so the drift is redrawn from
the app process at 10 fps. - No parallax on launcher scroll, deliberately: it would mean redrawing at
the panel's refresh rate rather than the wallpaper's. - One wallpaper. No playlist, no separate lock-screen wallpaper.
- The thermal and low-battery gates are coded but not observed firing — the
conditions are awkward to stage deliberately. - 10-bit is best-effort. It needs both an encoder advertising HEVC Main10 and
an EGL config with 10 bits per channel; where either is missing the import
quietly produces 8-bit and records that.
Verified for this build
55 unit tests — frame pacing, output sizing, fit geometry, index decoding — pass
against the tagged tree. The decode and transcode paths need a real codec and
live in androidTest, which needs a device; they were not run for this release.
The macOS port is
where this design was worked out and measured. The Windows and Linux ports are in
the tree but are not released.