2.4 KiB
Lab builds
A Lab build is DroidDeck app code and resources built on the device itself, by the on-device agent or by hand, and loaded over the installed APK at the next start. Nothing is reinstalled or re-signed, so a tester on a release build keeps their games, sign-ins and settings while trying a change.
How it works
tools/agent/dd-lab-buildbuilds the checkout with Gradle on the device (processReleaseResourcesandmergeDexRelease), packs the linked resources and dex files intooverlay.apk, writesoverlay.json, and stages both in the app'sfiles/lab/next. It then recompiles the app without an app image and restarts DroidDeck.- At start,
LabOverlay(called fromApp.attachBaseContext) promotesnexttoactive, checks that the build was made for this install, puts its dex files ahead of the APK's, and adds its resources throughResourcesLoaderto the app and every activity. Contexts made from them (presentations on the second screen) inherit the loader. - The watermark shows
LAB | <branch> @ <commit>, and Updates has a Lab build card that goes back to the installed version.
What a Lab build cannot change
The manifest, native code (cpp, jniLibs, Rust), Gradle files, App, and LabOverlay itself:
they are loaded before a Lab build can be, or are not part of it. dd-lab-build refuses those
changes; they need a new APK.
Safety
- A build is only used on the install it was built for:
overlay.jsoncarries the APK's commit (apkCommitindroiddeckctl state) and the APK's path, which changes with every install and update. A build for another install is turned off. - Two starts in a row that do not reach a resumed activity for 10 seconds turn the build off.
- It needs Android 11 or later (
ResourcesLoader) and no app image (classes in one load before the Lab build).dd-lab-buildrunscmd package compile -m verifybefore restarting.
Setting up a device
From the DroidDeck terminal, in a checkout of this repository:
tools/agent/setup
It installs Claude Code, git, gh and loopback adb, plus the build toolchain: JDK 17, the Android
SDK platform, and Google's x86-64 aapt2 run under qemu-user. The first Lab build compiles the
whole app and takes about 20 minutes on a Snapdragon 865; later ones are incremental.
~/.cache/dd-lab-build.json reports the stage, task count and current task while it runs.