Adds the JavaVM-side vtable indirection to `library/modules/platform/ android.sx` so the sx caller of `sx_query_safe_insets_jni` (1.25) can obtain a `JNIEnv*` without the C wrapper. `#jni_call` only dispatches through `JNIEnv*`'s vtable (a different table from `JavaVM*`'s), so the JavaVM hop is hand-rolled here. New decls: - `JNI_VERSION_1_6` (0x00010006) and the `ANATIVEACTIVITY_*` byte offsets (8, 24 on 64-bit Android — vm, clazz respectively). - `sx_load_ptr_at(base, offset)` — load a `*void` field at a raw byte offset. Used for both ANativeActivity fields and the JavaVM vtable load. - `sx_load_javavm_fn(vm, slot)` — load function pointer at the given vtable slot. `vm` is `JavaVM*` which points to `JNIInvokeInterface*`; the indirection is `*vm + slot * 8`. - `sx_android_get_env(activity, out_attached)` — calls `GetEnv` (slot 6); on `JNI_EDETACHED` falls through to `AttachCurrentThread` (slot 4), sets `out_attached = true` so caller can balance with `sx_android_detach_env` (slot 5). - `sx_android_activity_clazz(activity)` — reads the jobject at byte offset 24. Chess Android + iOS-sim builds still clean; cross-compile 3/3 green; host 118/119. The new functions dead-strip until step 1.27 wires them into the safe-insets call site in `android.sx::AndroidPlatform.safe_insets`.
24 KiB
24 KiB