Android NDK-Bindings für Lyx: Native Activity, JNI-Typen, OpenGL ES 2.0, Asset-Manager, Sensor-API, Input-Events und APK-Erzeugung. Ermöglicht die Entwicklung nativer Android-Anwendungen vollständig in Lyx ohne Java/Kotlin.
┌─────────────────────────────────────────────────────┐
│ Anwendungsschicht │
│ native_activity · app_glue · input · sensor │
├─────────────────────────────────────────────────────┤
│ Grafik / Audio │
│ gles2 · native_window · egl (via qt5_egl) │
├─────────────────────────────────────────────────────┤
│ System / IO │
│ asset · log · looper · ioctl · random │
├─────────────────────────────────────────────────────┤
│ Paketierung │
│ jni · manifest_gen · zip_writer · apk_builder │
└─────────────────────────────────────────────────────┘
| Unit | Beschreibung |
|---|---|
| std.android.native_activity | ANativeActivity-Lifecycle-Callbacks (onCreate, onResume …) |
| std.android.app_glue | android_app-Glue-Code: Event-Loop, Hauptthread entkoppeln |
| std.android.input | AInputEvent: Touch, Key, Motion-Events auslesen |
| std.android.sensor | ASensorManager: Accelerometer, Gyroscope, Magnetometer |
| std.android.gles2 | OpenGL ES 2.0 Bindings (Shader, Texturen, Draw Calls) |
| std.android.native_window | ANativeWindow: Surface-Handle für GL-Rendering |
| std.android.asset | AAssetManager: Dateien aus APK-Assets lesen |
| std.android.log | __android_log_print — Logcat-Ausgabe |
| std.android.looper | ALooper: Datei-Deskriptor-Events in den Event-Loop einbinden |
| std.android.ioctl | Low-level ioctl-Aufrufe für Android-Gerätetreiber |
| std.android.random | Kryptografisch sichere Zufallszahlen via /dev/urandom |
| std.android.restrictions | Android Enterprise Restrictions (MDM-Richtlinien) auslesen |
| std.android.jni | JNI-Typ-Aliases (JNIEnv, jobject, jstring …) |
| std.android.manifest_gen | AndroidManifest.xml programmatisch erzeugen |
| std.android.zip_writer | ZIP-Archiv erstellen (Grundlage für APK-Erzeugung) |
| std.android.apk_builder | APK-Datei aus Manifest, Ressourcen und .so-Bibliothek bauen |
import std.android.native_activity;
import std.android.app_glue;
import std.android.log;
fn android_main(app: *android_app): void {
AndroidLogInfo("MyApp", "Anwendung gestartet");
app.onAppCmd := HandleCommand;
app.onInputEvent := HandleInput;
var running: bool := true;
while (running) {
var events: int64 := 0;
var source: *android_poll_source := nil;
ALooperPollAll(0, nil, &events, &source);
if (source != nil) {
source.process(app, source);
}
if (app.destroyRequested != 0) {
running := false;
}
}
}
Letzte Aktualisierung: 2026-05-22