Skip to content

Releases: labelle-toolkit/labelle-android

labelle-android v0.5.0 — Vulkan (auto) is the default renderer

Choose a tag to compare

@apotema apotema released this 01 Oct 02:15
dadab4c

Vulkan is now the default Android renderer.

  • The default renderer setting is auto (was gles): Vulkan when the device reports Vulkan ≥ 1.1, otherwise GLES. Set "renderer": "gles" in providers/android.json to 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.version 1.1 uses-feature (required="false"). An explicit gles produces the old manifest.
  • Missing vs malformed setting: a missing labelle.renderer meta-data means auto. A malformed one (a boolean, integer or resource value, or null) or a read failure always means GLES, with a warning and the source setting; invalid meta-data. A bad value can never enable Vulkan.
  • Crash guard: treats a default auto that picks Vulkan exactly like an explicit vulkan.
  • 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

Choose a tag to compare

@apotema apotema released this 30 Sep 15:46
6bcad92
  • Renderer setting: a "renderer" provider setting in providers/android.json: gles / vulkan / auto, default gles (#26). The packager writes it into the APK as the labelle.renderer meta-data. For vulkan/auto it also adds the optional Vulkan 1.1 uses-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 as LABELLE_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 in no_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

Choose a tag to compare

@apotema apotema released this 29 Sep 19:38
e76df12
  • labelle android doctor accepts and ignores --fix (#24). labelle doctor --fix forwards 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

Choose a tag to compare

@apotema apotema released this 28 Sep 19:12
537f2b6
  • Immersive mode moves here from labelle-engine (#23, labelle-engine#902). The new immersive service hides the status and navigation bars in immersive-sticky mode.
    • enable(activity) is the sokol path, called from sokol_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 on std only.
    • The JNI code is the engine's: WindowInsetsController on API 30+, setSystemUiVisibility on 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 android plugin and sets .android.immersive_mode.

v0.2.1

Choose a tag to compare

@apotema apotema released this 27 Sep 05:22
  • Streamed stdout/stderr in the provider tool (#17, cli#446): bin/labelle-android created 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

Choose a tag to compare

@apotema apotema released this 27 Sep 01:36
8caa8aa

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.labelle manifest v2, name/namespace android, target android, contract >=1.2.0 <1.2.1, one host tool bin/labelle-android):
    • after build hook package → zig-out/apk/game.apk (release strip + symbols, slimmed assets, launcher icon, manifest, aapt/zipalign/apksigner; byte-identical to the former CLI packager);
    • replace run hook deploy → adb install -r + am start with the run options as intent extras;
    • replace bundle hook bundle → a versioned APK with versionCode = --build-number;
    • commands labelle android doctor | run | deploy.
  • Settings move from project.labelle .android to providers/android.json (schema v1, strict; secrets only as env:/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), projectless doctor (run it inside a project).

Pin: .{ .name = "android", .repo = "github.com/labelle-toolkit/labelle-android", .version = "0.2.0" }.

labelle-android v0.1.1

Choose a tag to compare

@apotema apotema released this 26 Sep 19:20

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_seen and 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

Choose a tag to compare

@apotema apotema released this 26 Sep 18:27
df5b78e

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.