====== 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