Releases: labelle-toolkit/labelle-android
Release list
labelle-android v0.5.0 — Vulkan (auto) is the default renderer
Vulkan is now the default Android renderer.
- The default
renderersetting isauto(wasgles): Vulkan when the device reports Vulkan ≥ 1.1, otherwise GLES. Set"renderer": "gles"inproviders/android.jsonto opt out. Devices without Vulkan 1.1, or where Vulkan init fails, use GLES (device check, bgfx init fallback and crash guard). (#30, PR #39) - Manifest: the default now carries the optional
android.hardware.vulkan.version1.1uses-feature(required="false"). An explicitglesproduces the old manifest. - Missing vs malformed setting: a missing
labelle.renderermeta-data meansauto. A malformed one (a boolean, integer or resource value, or null) or a read failure always means GLES, with a warning and the sourcesetting; invalid meta-data. A bad value can never enable Vulkan. - Crash guard: treats a default
autothat picks Vulkan exactly like an explicitvulkan. - Log line: a default-packaged APK on a Vulkan device logs
renderer: vulkan (source: auto).
Part of labelle-toolkit/labelle-bgfx#172.
labelle-android v0.4.0 — renderer setting, Vulkan crash guard
- Renderer setting: a
"renderer"provider setting inproviders/android.json:gles/vulkan/auto, defaultgles(#26). The packager writes it into the APK as thelabelle.renderermeta-data. Forvulkan/autoit also adds the optional Vulkan 1.1uses-feature. - Launch-time resolution: the renderer is chosen before bgfx starts (#27). Order: intent override (debuggable builds only), then the crash guard, then the setting, then
auto(Vulkan when the device reports Vulkan ≥ 1.1). The result is exported asLABELLE_BGFX_RENDERER. - Vulkan crash guard (#28). A Vulkan start that never reaches a stable run makes the next launch fall back to GLES. Stable means ≥120 presented frames and ≥10 s. It reads the frame count through labelle-bgfx's
labelle_bgfx_frames_presented, which needs a labelle-bgfx release with #183. Markers live inno_backup/, and the guard fails closed. - Docs (#29): "Android emulator testing" (
docs/emulator-testing.md) and "Choosing a renderer" (docs/renderer.md). - Quit:
game.quit()now finishes the Activity on Android (#35).
Part of labelle-toolkit/labelle-bgfx#172.
labelle-android v0.3.1 — doctor accepts --fix
labelle android doctoraccepts and ignores--fix(#24).labelle doctor --fixforwards it to every provider doctor since labelle-cli#521, and the contract now requires doctors to accept it.
labelle-android v0.3.0 — immersive mode service
- Immersive mode moves here from labelle-engine (#23, labelle-engine#902). The new
immersiveservice hides the status and navigation bars in immersive-sticky mode.enable(activity)is the sokol path, called fromsokol_main().applyUiThread(activity)is the bgfx path, called from the shell's focus hook.- It takes the
ANativeActivity*as an opaque pointer, like the other services, so the package still depends onstdonly. - The JNI code is the engine's:
WindowInsetsControlleron API 30+,setSystemUiVisibilityon API 28/29. - Hooks are also installed on an activity that Android recreates in the same process.
- Callers: labelle-assembler with #796 (the release after v0.118.0) emits the calls when a project lists the
androidplugin and sets.android.immersive_mode.
v0.2.1
- Streamed stdout/stderr in the provider tool (#17, cli#446):
bin/labelle-androidcreated its stderr writer in Zig 0.16's positional mode, which writes at its own offset from byte 0. With output redirected to a file (labelle doctor > log 2>&1,labelle build --platform=android > log), the tool's lines overwrote the CLI's. Pipes were unaffected. All the tool's writers now stream (tools/stdio.zig). A redirected-to-file test runs on Linux, macOS and Windows. - README: the
github.com/plugin repo form and the 0.2.1 pin.
No runtime (labelle_android module) changes since v0.2.0. Provider contract unchanged (>=1.2.0 <1.2.1).
labelle-android v0.2.0 — the Android provider
labelle-android is now a labelle-cli provider for the android target (labelle-cli RFC #406, #405), on top of the runtime services from v0.1.x.
- Provider (
plugin.labellemanifest v2, name/namespaceandroid, targetandroid, contract>=1.2.0 <1.2.1, one host toolbin/labelle-android):after buildhookpackage→zig-out/apk/game.apk(release strip + symbols, slimmed assets, launcher icon, manifest, aapt/zipalign/apksigner; byte-identical to the former CLI packager);replace runhookdeploy→adb install -r+am startwith the run options as intent extras;replace bundlehookbundle→ a versioned APK withversionCode = --build-number;- commands
labelle android doctor | run | deploy.
- Settings move from
project.labelle.androidtoproviders/android.json(schema v1, strict; secrets only asenv:/file:). - Requires labelle-cli v2.0.0 (the release that removes built-in Android) and labelle-bgfx ≥ 0.30.0 (older bgfx links a second copy of the JNI helpers → duplicate
labelle_android_*symbols). - Not in this release:
labelle android studio(Gradle export), sokol-Android (#14), projectlessdoctor(run it inside a project).
Pin: .{ .name = "android", .repo = "github.com/labelle-toolkit/labelle-android", .version = "0.2.0" }.
labelle-android v0.1.1
Patch release on top of v0.1.0.
- AAudio (#6, closes #4): early futex wakes no longer shorten the reopen backoff (absolute retry deadline); flaky host tests fixed.
- Video (#7, closes #5): audio decode stops at the 5-minute output cap; a null input buffer and refused output releases are terminal;
eof_seenand the pending count move together; each frame keeps its own colour space; stalled frames are written off. - Audio features (#9, closes #8): proper N-channel → stereo downmix (5.1 per ITU-R BS.775, normalised; LFE dropped; 3-channel no-mask = 2.1), and the audio track's start offset is honoured (pads or trims; the FP intro now trims its 21 ms encoder priming instead of playing 21 ms late).
- Build (#11, closes #10): 32-bit Android targets fail with a clear "64-bit only" message.
labelle-android v0.1.0
First release of labelle-android: shared Android runtime services extracted from labelle-bgfx (labelle-toolkit/labelle-bgfx#149, "services first" phase).
- Launch intent extras → env (
launch_intent), the debuggable knob (debuggable), the 1x1 resume relayout fix (relayout) — JNI helpers compiled against the NDK sysroot the package resolves itself. - AAudio output device (
aaudio): non-blocking start, control-thread disconnect recovery with bounded backoff, started marker on the first mixer pull. - MediaCodec video + audio-track decoding (
video): drain to output EOS, OUTPUT_FORMAT_CHANGED handling, crop and colour metadata (ColorSpace: BT.601/709, limited/full), terminal handling of codec input/output failures. - Build helpers for backends:
addAndroidSysroot,resolveNdk,nativeAppGlueDir,isAndroidTarget.
Consumers depend on the labelle_android module (plugin name android). Verified on-device (SM-T505) through Flying Platform; APK size unchanged.