====== std.android ====== 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. → [[lyx_-_programmiersprache:units|Standard Library]] · [[lyx_-_programmiersprache:units:x11|std.x11]] ---- ===== Architektur ===== ┌─────────────────────────────────────────────────────┐ │ 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 │ └─────────────────────────────────────────────────────┘ ---- ===== Units ===== ^ Unit ^ Beschreibung ^ | [[lyx_-_programmiersprache:units:android:native_activity|std.android.native_activity]] | ANativeActivity-Lifecycle-Callbacks (onCreate, onResume …) | | [[lyx_-_programmiersprache:units:android:app_glue|std.android.app_glue]] | android_app-Glue-Code: Event-Loop, Hauptthread entkoppeln | | [[lyx_-_programmiersprache:units:android:input|std.android.input]] | AInputEvent: Touch, Key, Motion-Events auslesen | | [[lyx_-_programmiersprache:units:android:sensor|std.android.sensor]] | ASensorManager: Accelerometer, Gyroscope, Magnetometer | | [[lyx_-_programmiersprache:units:android:gles2|std.android.gles2]] | OpenGL ES 2.0 Bindings (Shader, Texturen, Draw Calls) | | [[lyx_-_programmiersprache:units:android:native_window|std.android.native_window]] | ANativeWindow: Surface-Handle für GL-Rendering | | [[lyx_-_programmiersprache:units:android:asset|std.android.asset]] | AAssetManager: Dateien aus APK-Assets lesen | | [[lyx_-_programmiersprache:units:android:log|std.android.log]] | __android_log_print — Logcat-Ausgabe | | [[lyx_-_programmiersprache:units:android:looper|std.android.looper]] | ALooper: Datei-Deskriptor-Events in den Event-Loop einbinden | | [[lyx_-_programmiersprache:units:android:ioctl|std.android.ioctl]] | Low-level ioctl-Aufrufe für Android-Gerätetreiber | | [[lyx_-_programmiersprache:units:android:random|std.android.random]] | Kryptografisch sichere Zufallszahlen via /dev/urandom | | [[lyx_-_programmiersprache:units:android:restrictions|std.android.restrictions]] | Android Enterprise Restrictions (MDM-Richtlinien) auslesen | | [[lyx_-_programmiersprache:units:android:jni|std.android.jni]] | JNI-Typ-Aliases (JNIEnv, jobject, jstring …) | | [[lyx_-_programmiersprache:units:android:manifest_gen|std.android.manifest_gen]] | AndroidManifest.xml programmatisch erzeugen | | [[lyx_-_programmiersprache:units:android:zip_writer|std.android.zip_writer]] | ZIP-Archiv erstellen (Grundlage für APK-Erzeugung) | | [[lyx_-_programmiersprache:units:android:apk_builder|std.android.apk_builder]] | APK-Datei aus Manifest, Ressourcen und .so-Bibliothek bauen | ---- ===== Minimales Beispiel ===== 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