[ffigen][jnigen] Prepare to publish everything! (#3488)
diff --git a/pkgs/ffigen/CHANGELOG.md b/pkgs/ffigen/CHANGELOG.md
index 614d61d..3360254 100644
--- a/pkgs/ffigen/CHANGELOG.md
+++ b/pkgs/ffigen/CHANGELOG.md
@@ -1,4 +1,4 @@
-## 21.0.0-wip
+## 21.0.0
 
 - Propagate `@Deprecated` annotations from C/ObjC headers into generated Dart
   bindings. Deprecation messages from `__attribute__((deprecated("msg")))` and
diff --git a/pkgs/ffigen/pubspec.yaml b/pkgs/ffigen/pubspec.yaml
index fd5bf56..abbf0ad 100644
--- a/pkgs/ffigen/pubspec.yaml
+++ b/pkgs/ffigen/pubspec.yaml
@@ -3,7 +3,7 @@
 # BSD-style license that can be found in the LICENSE file.
 
 name: ffigen
-version: 21.0.1-wip
+version: 21.0.0
 description: >
   Generator for FFI bindings, using LibClang to parse C, Objective-C, and Swift
   files.
@@ -43,7 +43,7 @@
   dart_flutter_team_lints: ^3.5.2
   json_schema: ^5.1.1
   leak_tracker: ^11.0.2
-  objective_c: ^9.4.1
+  objective_c: ^9.5.0
   test: ^1.26.2
 
 dependency_overrides:
diff --git a/pkgs/jni/CHANGELOG.md b/pkgs/jni/CHANGELOG.md
index 92cad32..0a5a7b5 100644
--- a/pkgs/jni/CHANGELOG.md
+++ b/pkgs/jni/CHANGELOG.md
@@ -1,10 +1,13 @@
-## 1.0.1-wip
+## 1.0.1
 
 - Improve error message when JNI is used before Flutter plugin initialization.
 - Improve no such method error handling.
 - Fix memory leaks and deadlocks that can happen in callbacks, if the target
   isolate is shut down.
 - Support versions 3.x of `package:package_config`.
+- Make some internal-only FFI structs opaque. This is technically a breaking
+  change, but it's extremely unlikely that any users are using these internal
+  structs (and doing so would be a mistake).
 
 ## 1.0.0
 
diff --git a/pkgs/jni/ffigen.yaml b/pkgs/jni/ffigen.yaml
index 41c2e39..65e99a5 100644
--- a/pkgs/jni/ffigen.yaml
+++ b/pkgs/jni/ffigen.yaml
@@ -65,6 +65,16 @@
     - 'wait_for'
     # keep-sorted end
 structs:
+  dependency-only: opaque
+  include:
+    - 'JniResult'
+    - 'JniPointerResult'
+    - 'JniClassLookupResult'
+    - 'JniExceptionDetails'
+    - 'JavaVMInitArgs'
+    - 'JavaVMOption'
+    - 'GlobalJniEnvStruct'
+    - 'JNINativeMethod'
   exclude:
     - 'JniContext'
     - 'JniLocks'
@@ -72,15 +82,15 @@
     - '_JNIEnv'
     - 'JNIInvokeInterface'
     - '__va_list_tag'
-    - 'CallbackResult'
   rename:
     ## opaque struct definitions, base types of jfieldID and jmethodID
     '_Dart_FinalizableHandle': 'Dart_FinalizableHandle_'
     '_jfieldID': 'jfieldID_'
-    '_jmethodID':
-      'jmethodID_'
-      #'JNI(.*)': 'Jni$1'
+    '_jmethodID': 'jmethodID_'
 unions:
+  dependency-only: opaque
+  include:
+    - 'jvalue'
   rename:
     'jvalue': 'JValue'
 globals:
diff --git a/pkgs/jni/lib/jni.dart b/pkgs/jni/lib/jni.dart
index 57ada4b..5bb51c6 100644
--- a/pkgs/jni/lib/jni.dart
+++ b/pkgs/jni/lib/jni.dart
@@ -64,6 +64,12 @@
 
 export 'src/core_bindings.dart'
     show
+        $JCollection,
+        $JIterator,
+        $JList,
+        $JMap,
+        $JMap$JEntry,
+        $JSet,
         JArrayList,
         JArrayList$$Methods,
         JBoolean,
diff --git a/pkgs/jni/lib/src/third_party/jni_bindings_generated.dart b/pkgs/jni/lib/src/third_party/jni_bindings_generated.dart
index 9172a2f..603d699 100644
--- a/pkgs/jni/lib/src/third_party/jni_bindings_generated.dart
+++ b/pkgs/jni/lib/src/third_party/jni_bindings_generated.dart
@@ -351,21 +351,12 @@
   late final ffi.Pointer<pthread_key_t> _tlsKey =
       _lookup<pthread_key_t>('tlsKey');
 
-  Dartpthread_key_t get tlsKey => _tlsKey.value;
+  Dart__darwin_pthread_key_t get tlsKey => _tlsKey.value;
 
-  set tlsKey(Dartpthread_key_t value) => _tlsKey.value = value;
+  set tlsKey(Dart__darwin_pthread_key_t value) => _tlsKey.value = value;
 }
 
-final class CallbackResult extends ffi.Struct {
-  external MutexLock lock;
-
-  external ConditionVariable cond;
-
-  @ffi.Int()
-  external int ready;
-
-  external JObjectPtr object;
-}
+final class CallbackResult extends ffi.Opaque {}
 
 typedef ConditionVariable = pthread_cond_t;
 typedef Dart_FinalizableHandle = ffi.Pointer<Dart_FinalizableHandle_>;
@@ -2727,3076 +2718,10 @@
 typedef JMethodIDPtr = ffi.Pointer<jmethodID_>;
 
 /// JNI invocation interface.
-final class JNIInvokeInterface extends ffi.Struct {
-  external ffi.Pointer<ffi.Void> reserved0;
-
-  external ffi.Pointer<ffi.Void> reserved1;
-
-  external ffi.Pointer<ffi.Void> reserved2;
-
-  external ffi.Pointer<
-          ffi.NativeFunction<JIntMarker Function(ffi.Pointer<JavaVM$1> vm)>>
-      DestroyJavaVM;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JIntMarker Function(
-              ffi.Pointer<JavaVM$1> vm,
-              ffi.Pointer<ffi.Pointer<JniEnv>> p_env,
-              ffi.Pointer<ffi.Void> thr_args)>> AttachCurrentThread;
-
-  external ffi.Pointer<
-          ffi.NativeFunction<JIntMarker Function(ffi.Pointer<JavaVM$1> vm)>>
-      DetachCurrentThread;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JIntMarker Function(
-              ffi.Pointer<JavaVM$1> vm,
-              ffi.Pointer<ffi.Pointer<ffi.Void>> p_env,
-              JIntMarker version)>> GetEnv;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JIntMarker Function(
-              ffi.Pointer<JavaVM$1> vm,
-              ffi.Pointer<ffi.Pointer<JniEnv>> p_env,
-              ffi.Pointer<ffi.Void> thr_args)>> AttachCurrentThreadAsDaemon;
-
-  static ffi.Pointer<JNIInvokeInterface> $allocate(
-    ffi.Allocator $allocator, {
-    required ffi.Pointer<ffi.Void> reserved0,
-    required ffi.Pointer<ffi.Void> reserved1,
-    required ffi.Pointer<ffi.Void> reserved2,
-    required ffi.Pointer<
-            ffi.NativeFunction<JIntMarker Function(ffi.Pointer<JavaVM$1> vm)>>
-        DestroyJavaVM,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JIntMarker Function(
-                    ffi.Pointer<JavaVM$1> vm,
-                    ffi.Pointer<ffi.Pointer<JniEnv>> p_env,
-                    ffi.Pointer<ffi.Void> thr_args)>>
-        AttachCurrentThread,
-    required ffi.Pointer<
-            ffi.NativeFunction<JIntMarker Function(ffi.Pointer<JavaVM$1> vm)>>
-        DetachCurrentThread,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JIntMarker Function(
-                    ffi.Pointer<JavaVM$1> vm,
-                    ffi.Pointer<ffi.Pointer<ffi.Void>> p_env,
-                    JIntMarker version)>>
-        GetEnv,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JIntMarker Function(
-                    ffi.Pointer<JavaVM$1> vm,
-                    ffi.Pointer<ffi.Pointer<JniEnv>> p_env,
-                    ffi.Pointer<ffi.Void> thr_args)>>
-        AttachCurrentThreadAsDaemon,
-  }) =>
-      $allocator<JNIInvokeInterface>()
-        ..ref.reserved0 = reserved0
-        ..ref.reserved1 = reserved1
-        ..ref.reserved2 = reserved2
-        ..ref.DestroyJavaVM = DestroyJavaVM
-        ..ref.AttachCurrentThread = AttachCurrentThread
-        ..ref.DetachCurrentThread = DetachCurrentThread
-        ..ref.GetEnv = GetEnv
-        ..ref.AttachCurrentThreadAsDaemon = AttachCurrentThreadAsDaemon;
-}
+final class JNIInvokeInterface extends ffi.Opaque {}
 
 /// Table of interface function pointers.
-final class JNINativeInterface extends ffi.Struct {
-  external ffi.Pointer<ffi.Void> reserved0;
-
-  external ffi.Pointer<ffi.Void> reserved1;
-
-  external ffi.Pointer<ffi.Void> reserved2;
-
-  external ffi.Pointer<ffi.Void> reserved3;
-
-  external ffi.Pointer<
-          ffi.NativeFunction<JIntMarker Function(ffi.Pointer<JniEnv$1> env)>>
-      GetVersion;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JClassPtr Function(
-              ffi.Pointer<JniEnv$1> env,
-              ffi.Pointer<ffi.Char> name,
-              JObjectPtr loader,
-              ffi.Pointer<JByteMarker> buf,
-              JSizeMarker bufLen)>> DefineClass;
-
-  external ffi.Pointer<
-          ffi.NativeFunction<
-              JClassPtr Function(
-                  ffi.Pointer<JniEnv$1> env, ffi.Pointer<ffi.Char> name)>>
-      FindClass;
-
-  external ffi.Pointer<
-          ffi.NativeFunction<
-              JMethodIDPtr Function(
-                  ffi.Pointer<JniEnv$1> env, JObjectPtr method)>>
-      FromReflectedMethod;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JFieldIDPtr Function(
-              ffi.Pointer<JniEnv$1> env, JObjectPtr field)>> FromReflectedField;
-
-  /// spec doesn't show jboolean parameter
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JObjectPtr Function(
-              ffi.Pointer<JniEnv$1> env,
-              JClassPtr cls,
-              JMethodIDPtr methodId,
-              JBooleanMarker isStatic)>> ToReflectedMethod;
-
-  external ffi.Pointer<
-          ffi.NativeFunction<
-              JClassPtr Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz)>>
-      GetSuperclass;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JBooleanMarker Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz1,
-              JClassPtr clazz2)>> IsAssignableFrom;
-
-  /// spec doesn't show jboolean parameter
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JObjectPtr Function(ffi.Pointer<JniEnv$1> env, JClassPtr cls,
-              JFieldIDPtr fieldID, JBooleanMarker isStatic)>> ToReflectedField;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JIntMarker Function(
-              ffi.Pointer<JniEnv$1> env, JThrowablePtr obj)>> Throw;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JIntMarker Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-              ffi.Pointer<ffi.Char> message)>> ThrowNew;
-
-  external ffi.Pointer<
-          ffi.NativeFunction<JThrowablePtr Function(ffi.Pointer<JniEnv$1> env)>>
-      ExceptionOccurred;
-
-  external ffi
-      .Pointer<ffi.NativeFunction<ffi.Void Function(ffi.Pointer<JniEnv$1> env)>>
-      ExceptionDescribe;
-
-  external ffi
-      .Pointer<ffi.NativeFunction<ffi.Void Function(ffi.Pointer<JniEnv$1> env)>>
-      ExceptionClear;
-
-  external ffi.Pointer<
-          ffi.NativeFunction<
-              ffi.Void Function(
-                  ffi.Pointer<JniEnv$1> env, ffi.Pointer<ffi.Char> msg)>>
-      FatalError;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JIntMarker Function(
-              ffi.Pointer<JniEnv$1> env, JIntMarker capacity)>> PushLocalFrame;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JObjectPtr Function(
-              ffi.Pointer<JniEnv$1> env, JObjectPtr result)>> PopLocalFrame;
-
-  external ffi.Pointer<
-          ffi.NativeFunction<
-              JObjectPtr Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj)>>
-      NewGlobalRef;
-
-  external ffi.Pointer<
-          ffi.NativeFunction<
-              ffi.Void Function(
-                  ffi.Pointer<JniEnv$1> env, JObjectPtr globalRef)>>
-      DeleteGlobalRef;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(
-              ffi.Pointer<JniEnv$1> env, JObjectPtr localRef)>> DeleteLocalRef;
-
-  external ffi.Pointer<
-          ffi.NativeFunction<
-              JBooleanMarker Function(
-                  ffi.Pointer<JniEnv$1> env, JObjectPtr ref1, JObjectPtr ref2)>>
-      IsSameObject;
-
-  external ffi.Pointer<
-          ffi.NativeFunction<
-              JObjectPtr Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj)>>
-      NewLocalRef;
-
-  external ffi.Pointer<
-          ffi.NativeFunction<
-              JIntMarker Function(
-                  ffi.Pointer<JniEnv$1> env, JIntMarker capacity)>>
-      EnsureLocalCapacity;
-
-  external ffi.Pointer<
-          ffi.NativeFunction<
-              JObjectPtr Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz)>>
-      AllocObject;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JObjectPtr Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-              JMethodIDPtr methodID)>> NewObject;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JObjectPtr Function(ffi.Pointer<JniEnv$1>, JClassPtr, JMethodIDPtr,
-              ffi.Pointer<ffi.Void>)>> NewObjectV;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JObjectPtr Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-              JMethodIDPtr methodID, ffi.Pointer<JValue> args)>> NewObjectA;
-
-  external ffi.Pointer<
-          ffi.NativeFunction<
-              JClassPtr Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj)>>
-      GetObjectClass;
-
-  external ffi.Pointer<
-          ffi.NativeFunction<
-              JBooleanMarker Function(
-                  ffi.Pointer<JniEnv$1> env, JObjectPtr obj, JClassPtr clazz)>>
-      IsInstanceOf;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JMethodIDPtr Function(
-              ffi.Pointer<JniEnv$1> env,
-              JClassPtr clazz,
-              ffi.Pointer<ffi.Char> name,
-              ffi.Pointer<ffi.Char> sig)>> GetMethodID;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JObjectPtr Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-              JMethodIDPtr methodID)>> CallObjectMethod;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JObjectPtr Function(ffi.Pointer<JniEnv$1>, JObjectPtr, JMethodIDPtr,
-              ffi.Pointer<ffi.Void>)>> CallObjectMethodV;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JObjectPtr Function(
-              ffi.Pointer<JniEnv$1> env,
-              JObjectPtr obj,
-              JMethodIDPtr methodID,
-              ffi.Pointer<JValue> args)>> CallObjectMethodA;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JBooleanMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-              JMethodIDPtr methodID)>> CallBooleanMethod;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JBooleanMarker Function(ffi.Pointer<JniEnv$1>, JObjectPtr,
-              JMethodIDPtr, ffi.Pointer<ffi.Void>)>> CallBooleanMethodV;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JBooleanMarker Function(
-              ffi.Pointer<JniEnv$1> env,
-              JObjectPtr obj,
-              JMethodIDPtr methodId,
-              ffi.Pointer<JValue> args)>> CallBooleanMethodA;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JByteMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-              JMethodIDPtr methodID)>> CallByteMethod;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JByteMarker Function(ffi.Pointer<JniEnv$1>, JObjectPtr, JMethodIDPtr,
-              ffi.Pointer<ffi.Void>)>> CallByteMethodV;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JByteMarker Function(
-              ffi.Pointer<JniEnv$1> env,
-              JObjectPtr obj,
-              JMethodIDPtr methodID,
-              ffi.Pointer<JValue> args)>> CallByteMethodA;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JCharMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-              JMethodIDPtr methodID)>> CallCharMethod;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JCharMarker Function(ffi.Pointer<JniEnv$1>, JObjectPtr, JMethodIDPtr,
-              ffi.Pointer<ffi.Void>)>> CallCharMethodV;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JCharMarker Function(
-              ffi.Pointer<JniEnv$1> env,
-              JObjectPtr obj,
-              JMethodIDPtr methodID,
-              ffi.Pointer<JValue> args)>> CallCharMethodA;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JShortMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-              JMethodIDPtr methodID)>> CallShortMethod;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JShortMarker Function(ffi.Pointer<JniEnv$1>, JObjectPtr, JMethodIDPtr,
-              ffi.Pointer<ffi.Void>)>> CallShortMethodV;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JShortMarker Function(
-              ffi.Pointer<JniEnv$1> env,
-              JObjectPtr obj,
-              JMethodIDPtr methodID,
-              ffi.Pointer<JValue> args)>> CallShortMethodA;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JIntMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-              JMethodIDPtr methodID)>> CallIntMethod;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JIntMarker Function(ffi.Pointer<JniEnv$1>, JObjectPtr, JMethodIDPtr,
-              ffi.Pointer<ffi.Void>)>> CallIntMethodV;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JIntMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-              JMethodIDPtr methodID, ffi.Pointer<JValue> args)>> CallIntMethodA;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JLongMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-              JMethodIDPtr methodID)>> CallLongMethod;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JLongMarker Function(ffi.Pointer<JniEnv$1>, JObjectPtr, JMethodIDPtr,
-              ffi.Pointer<ffi.Void>)>> CallLongMethodV;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JLongMarker Function(
-              ffi.Pointer<JniEnv$1> env,
-              JObjectPtr obj,
-              JMethodIDPtr methodID,
-              ffi.Pointer<JValue> args)>> CallLongMethodA;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JFloatMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-              JMethodIDPtr methodID)>> CallFloatMethod;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JFloatMarker Function(ffi.Pointer<JniEnv$1>, JObjectPtr, JMethodIDPtr,
-              ffi.Pointer<ffi.Void>)>> CallFloatMethodV;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JFloatMarker Function(
-              ffi.Pointer<JniEnv$1> env,
-              JObjectPtr obj,
-              JMethodIDPtr methodID,
-              ffi.Pointer<JValue> args)>> CallFloatMethodA;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JDoubleMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-              JMethodIDPtr methodID)>> CallDoubleMethod;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JDoubleMarker Function(ffi.Pointer<JniEnv$1>, JObjectPtr,
-              JMethodIDPtr, ffi.Pointer<ffi.Void>)>> CallDoubleMethodV;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JDoubleMarker Function(
-              ffi.Pointer<JniEnv$1> env,
-              JObjectPtr obj,
-              JMethodIDPtr methodID,
-              ffi.Pointer<JValue> args)>> CallDoubleMethodA;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-              JMethodIDPtr methodID)>> CallVoidMethod;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(ffi.Pointer<JniEnv$1>, JObjectPtr, JMethodIDPtr,
-              ffi.Pointer<ffi.Void>)>> CallVoidMethodV;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(
-              ffi.Pointer<JniEnv$1> env,
-              JObjectPtr obj,
-              JMethodIDPtr methodID,
-              ffi.Pointer<JValue> args)>> CallVoidMethodA;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JObjectPtr Function(
-              ffi.Pointer<JniEnv$1> env,
-              JObjectPtr obj,
-              JClassPtr clazz,
-              JMethodIDPtr methodID)>> CallNonvirtualObjectMethod;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JObjectPtr Function(
-              ffi.Pointer<JniEnv$1>,
-              JObjectPtr,
-              JClassPtr,
-              JMethodIDPtr,
-              ffi.Pointer<ffi.Void>)>> CallNonvirtualObjectMethodV;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JObjectPtr Function(
-              ffi.Pointer<JniEnv$1> env,
-              JObjectPtr obj,
-              JClassPtr clazz,
-              JMethodIDPtr methodID,
-              ffi.Pointer<JValue> args)>> CallNonvirtualObjectMethodA;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JBooleanMarker Function(
-              ffi.Pointer<JniEnv$1> env,
-              JObjectPtr obj,
-              JClassPtr clazz,
-              JMethodIDPtr methodID)>> CallNonvirtualBooleanMethod;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JBooleanMarker Function(
-              ffi.Pointer<JniEnv$1>,
-              JObjectPtr,
-              JClassPtr,
-              JMethodIDPtr,
-              ffi.Pointer<ffi.Void>)>> CallNonvirtualBooleanMethodV;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JBooleanMarker Function(
-              ffi.Pointer<JniEnv$1> env,
-              JObjectPtr obj,
-              JClassPtr clazz,
-              JMethodIDPtr methodID,
-              ffi.Pointer<JValue> args)>> CallNonvirtualBooleanMethodA;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JByteMarker Function(
-              ffi.Pointer<JniEnv$1> env,
-              JObjectPtr obj,
-              JClassPtr clazz,
-              JMethodIDPtr methodID)>> CallNonvirtualByteMethod;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JByteMarker Function(ffi.Pointer<JniEnv$1>, JObjectPtr, JClassPtr,
-              JMethodIDPtr, ffi.Pointer<ffi.Void>)>> CallNonvirtualByteMethodV;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JByteMarker Function(
-              ffi.Pointer<JniEnv$1> env,
-              JObjectPtr obj,
-              JClassPtr clazz,
-              JMethodIDPtr methodID,
-              ffi.Pointer<JValue> args)>> CallNonvirtualByteMethodA;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JCharMarker Function(
-              ffi.Pointer<JniEnv$1> env,
-              JObjectPtr obj,
-              JClassPtr clazz,
-              JMethodIDPtr methodID)>> CallNonvirtualCharMethod;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JCharMarker Function(ffi.Pointer<JniEnv$1>, JObjectPtr, JClassPtr,
-              JMethodIDPtr, ffi.Pointer<ffi.Void>)>> CallNonvirtualCharMethodV;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JCharMarker Function(
-              ffi.Pointer<JniEnv$1> env,
-              JObjectPtr obj,
-              JClassPtr clazz,
-              JMethodIDPtr methodID,
-              ffi.Pointer<JValue> args)>> CallNonvirtualCharMethodA;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JShortMarker Function(
-              ffi.Pointer<JniEnv$1> env,
-              JObjectPtr obj,
-              JClassPtr clazz,
-              JMethodIDPtr methodID)>> CallNonvirtualShortMethod;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JShortMarker Function(ffi.Pointer<JniEnv$1>, JObjectPtr, JClassPtr,
-              JMethodIDPtr, ffi.Pointer<ffi.Void>)>> CallNonvirtualShortMethodV;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JShortMarker Function(
-              ffi.Pointer<JniEnv$1> env,
-              JObjectPtr obj,
-              JClassPtr clazz,
-              JMethodIDPtr methodID,
-              ffi.Pointer<JValue> args)>> CallNonvirtualShortMethodA;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JIntMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-              JClassPtr clazz, JMethodIDPtr methodID)>> CallNonvirtualIntMethod;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JIntMarker Function(ffi.Pointer<JniEnv$1>, JObjectPtr, JClassPtr,
-              JMethodIDPtr, ffi.Pointer<ffi.Void>)>> CallNonvirtualIntMethodV;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JIntMarker Function(
-              ffi.Pointer<JniEnv$1> env,
-              JObjectPtr obj,
-              JClassPtr clazz,
-              JMethodIDPtr methodID,
-              ffi.Pointer<JValue> args)>> CallNonvirtualIntMethodA;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JLongMarker Function(
-              ffi.Pointer<JniEnv$1> env,
-              JObjectPtr obj,
-              JClassPtr clazz,
-              JMethodIDPtr methodID)>> CallNonvirtualLongMethod;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JLongMarker Function(ffi.Pointer<JniEnv$1>, JObjectPtr, JClassPtr,
-              JMethodIDPtr, ffi.Pointer<ffi.Void>)>> CallNonvirtualLongMethodV;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JLongMarker Function(
-              ffi.Pointer<JniEnv$1> env,
-              JObjectPtr obj,
-              JClassPtr clazz,
-              JMethodIDPtr methodID,
-              ffi.Pointer<JValue> args)>> CallNonvirtualLongMethodA;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JFloatMarker Function(
-              ffi.Pointer<JniEnv$1> env,
-              JObjectPtr obj,
-              JClassPtr clazz,
-              JMethodIDPtr methodID)>> CallNonvirtualFloatMethod;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JFloatMarker Function(ffi.Pointer<JniEnv$1>, JObjectPtr, JClassPtr,
-              JMethodIDPtr, ffi.Pointer<ffi.Void>)>> CallNonvirtualFloatMethodV;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JFloatMarker Function(
-              ffi.Pointer<JniEnv$1> env,
-              JObjectPtr obj,
-              JClassPtr clazz,
-              JMethodIDPtr methodID,
-              ffi.Pointer<JValue> args)>> CallNonvirtualFloatMethodA;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JDoubleMarker Function(
-              ffi.Pointer<JniEnv$1> env,
-              JObjectPtr obj,
-              JClassPtr clazz,
-              JMethodIDPtr methodID)>> CallNonvirtualDoubleMethod;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JDoubleMarker Function(
-              ffi.Pointer<JniEnv$1>,
-              JObjectPtr,
-              JClassPtr,
-              JMethodIDPtr,
-              ffi.Pointer<ffi.Void>)>> CallNonvirtualDoubleMethodV;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JDoubleMarker Function(
-              ffi.Pointer<JniEnv$1> env,
-              JObjectPtr obj,
-              JClassPtr clazz,
-              JMethodIDPtr methodID,
-              ffi.Pointer<JValue> args)>> CallNonvirtualDoubleMethodA;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(
-              ffi.Pointer<JniEnv$1> env,
-              JObjectPtr obj,
-              JClassPtr clazz,
-              JMethodIDPtr methodID)>> CallNonvirtualVoidMethod;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(ffi.Pointer<JniEnv$1>, JObjectPtr, JClassPtr,
-              JMethodIDPtr, ffi.Pointer<ffi.Void>)>> CallNonvirtualVoidMethodV;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(
-              ffi.Pointer<JniEnv$1> env,
-              JObjectPtr obj,
-              JClassPtr clazz,
-              JMethodIDPtr methodID,
-              ffi.Pointer<JValue> args)>> CallNonvirtualVoidMethodA;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JFieldIDPtr Function(
-              ffi.Pointer<JniEnv$1> env,
-              JClassPtr clazz,
-              ffi.Pointer<ffi.Char> name,
-              ffi.Pointer<ffi.Char> sig)>> GetFieldID;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JObjectPtr Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-              JFieldIDPtr fieldID)>> GetObjectField;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JBooleanMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-              JFieldIDPtr fieldID)>> GetBooleanField;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JByteMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-              JFieldIDPtr fieldID)>> GetByteField;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JCharMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-              JFieldIDPtr fieldID)>> GetCharField;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JShortMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-              JFieldIDPtr fieldID)>> GetShortField;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JIntMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-              JFieldIDPtr fieldID)>> GetIntField;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JLongMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-              JFieldIDPtr fieldID)>> GetLongField;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JFloatMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-              JFieldIDPtr fieldID)>> GetFloatField;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JDoubleMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-              JFieldIDPtr fieldID)>> GetDoubleField;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-              JFieldIDPtr fieldID, JObjectPtr val)>> SetObjectField;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-              JFieldIDPtr fieldID, JBooleanMarker val)>> SetBooleanField;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-              JFieldIDPtr fieldID, JByteMarker val)>> SetByteField;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-              JFieldIDPtr fieldID, JCharMarker val)>> SetCharField;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-              JFieldIDPtr fieldID, JShortMarker val)>> SetShortField;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-              JFieldIDPtr fieldID, JIntMarker val)>> SetIntField;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-              JFieldIDPtr fieldID, JLongMarker val)>> SetLongField;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-              JFieldIDPtr fieldID, JFloatMarker val)>> SetFloatField;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-              JFieldIDPtr fieldID, JDoubleMarker val)>> SetDoubleField;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JMethodIDPtr Function(
-              ffi.Pointer<JniEnv$1> env,
-              JClassPtr clazz,
-              ffi.Pointer<ffi.Char> name,
-              ffi.Pointer<ffi.Char> sig)>> GetStaticMethodID;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JObjectPtr Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-              JMethodIDPtr methodID)>> CallStaticObjectMethod;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JObjectPtr Function(ffi.Pointer<JniEnv$1>, JClassPtr, JMethodIDPtr,
-              ffi.Pointer<ffi.Void>)>> CallStaticObjectMethodV;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JObjectPtr Function(
-              ffi.Pointer<JniEnv$1> env,
-              JClassPtr clazz,
-              JMethodIDPtr methodID,
-              ffi.Pointer<JValue> args)>> CallStaticObjectMethodA;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JBooleanMarker Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-              JMethodIDPtr methodID)>> CallStaticBooleanMethod;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JBooleanMarker Function(ffi.Pointer<JniEnv$1>, JClassPtr,
-              JMethodIDPtr, ffi.Pointer<ffi.Void>)>> CallStaticBooleanMethodV;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JBooleanMarker Function(
-              ffi.Pointer<JniEnv$1> env,
-              JClassPtr clazz,
-              JMethodIDPtr methodID,
-              ffi.Pointer<JValue> args)>> CallStaticBooleanMethodA;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JByteMarker Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-              JMethodIDPtr methodID)>> CallStaticByteMethod;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JByteMarker Function(ffi.Pointer<JniEnv$1>, JClassPtr, JMethodIDPtr,
-              ffi.Pointer<ffi.Void>)>> CallStaticByteMethodV;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JByteMarker Function(
-              ffi.Pointer<JniEnv$1> env,
-              JClassPtr clazz,
-              JMethodIDPtr methodID,
-              ffi.Pointer<JValue> args)>> CallStaticByteMethodA;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JCharMarker Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-              JMethodIDPtr methodID)>> CallStaticCharMethod;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JCharMarker Function(ffi.Pointer<JniEnv$1>, JClassPtr, JMethodIDPtr,
-              ffi.Pointer<ffi.Void>)>> CallStaticCharMethodV;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JCharMarker Function(
-              ffi.Pointer<JniEnv$1> env,
-              JClassPtr clazz,
-              JMethodIDPtr methodID,
-              ffi.Pointer<JValue> args)>> CallStaticCharMethodA;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JShortMarker Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-              JMethodIDPtr methodID)>> CallStaticShortMethod;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JShortMarker Function(ffi.Pointer<JniEnv$1>, JClassPtr, JMethodIDPtr,
-              ffi.Pointer<ffi.Void>)>> CallStaticShortMethodV;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JShortMarker Function(
-              ffi.Pointer<JniEnv$1> env,
-              JClassPtr clazz,
-              JMethodIDPtr methodID,
-              ffi.Pointer<JValue> args)>> CallStaticShortMethodA;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JIntMarker Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-              JMethodIDPtr methodID)>> CallStaticIntMethod;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JIntMarker Function(ffi.Pointer<JniEnv$1>, JClassPtr, JMethodIDPtr,
-              ffi.Pointer<ffi.Void>)>> CallStaticIntMethodV;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JIntMarker Function(
-              ffi.Pointer<JniEnv$1> env,
-              JClassPtr clazz,
-              JMethodIDPtr methodID,
-              ffi.Pointer<JValue> args)>> CallStaticIntMethodA;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JLongMarker Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-              JMethodIDPtr methodID)>> CallStaticLongMethod;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JLongMarker Function(ffi.Pointer<JniEnv$1>, JClassPtr, JMethodIDPtr,
-              ffi.Pointer<ffi.Void>)>> CallStaticLongMethodV;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JLongMarker Function(
-              ffi.Pointer<JniEnv$1> env,
-              JClassPtr clazz,
-              JMethodIDPtr methodID,
-              ffi.Pointer<JValue> args)>> CallStaticLongMethodA;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JFloatMarker Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-              JMethodIDPtr methodID)>> CallStaticFloatMethod;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JFloatMarker Function(ffi.Pointer<JniEnv$1>, JClassPtr, JMethodIDPtr,
-              ffi.Pointer<ffi.Void>)>> CallStaticFloatMethodV;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JFloatMarker Function(
-              ffi.Pointer<JniEnv$1> env,
-              JClassPtr clazz,
-              JMethodIDPtr methodID,
-              ffi.Pointer<JValue> args)>> CallStaticFloatMethodA;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JDoubleMarker Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-              JMethodIDPtr methodID)>> CallStaticDoubleMethod;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JDoubleMarker Function(ffi.Pointer<JniEnv$1>, JClassPtr, JMethodIDPtr,
-              ffi.Pointer<ffi.Void>)>> CallStaticDoubleMethodV;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JDoubleMarker Function(
-              ffi.Pointer<JniEnv$1> env,
-              JClassPtr clazz,
-              JMethodIDPtr methodID,
-              ffi.Pointer<JValue> args)>> CallStaticDoubleMethodA;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-              JMethodIDPtr methodID)>> CallStaticVoidMethod;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(ffi.Pointer<JniEnv$1>, JClassPtr, JMethodIDPtr,
-              ffi.Pointer<ffi.Void>)>> CallStaticVoidMethodV;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(
-              ffi.Pointer<JniEnv$1> env,
-              JClassPtr clazz,
-              JMethodIDPtr methodID,
-              ffi.Pointer<JValue> args)>> CallStaticVoidMethodA;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JFieldIDPtr Function(
-              ffi.Pointer<JniEnv$1> env,
-              JClassPtr clazz,
-              ffi.Pointer<ffi.Char> name,
-              ffi.Pointer<ffi.Char> sig)>> GetStaticFieldID;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JObjectPtr Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-              JFieldIDPtr fieldID)>> GetStaticObjectField;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JBooleanMarker Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-              JFieldIDPtr fieldID)>> GetStaticBooleanField;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JByteMarker Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-              JFieldIDPtr fieldID)>> GetStaticByteField;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JCharMarker Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-              JFieldIDPtr fieldID)>> GetStaticCharField;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JShortMarker Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-              JFieldIDPtr fieldID)>> GetStaticShortField;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JIntMarker Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-              JFieldIDPtr fieldID)>> GetStaticIntField;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JLongMarker Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-              JFieldIDPtr fieldID)>> GetStaticLongField;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JFloatMarker Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-              JFieldIDPtr fieldID)>> GetStaticFloatField;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JDoubleMarker Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-              JFieldIDPtr fieldID)>> GetStaticDoubleField;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-              JFieldIDPtr fieldID, JObjectPtr val)>> SetStaticObjectField;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-              JFieldIDPtr fieldID, JBooleanMarker val)>> SetStaticBooleanField;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-              JFieldIDPtr fieldID, JByteMarker val)>> SetStaticByteField;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-              JFieldIDPtr fieldID, JCharMarker val)>> SetStaticCharField;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-              JFieldIDPtr fieldID, JShortMarker val)>> SetStaticShortField;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-              JFieldIDPtr fieldID, JIntMarker val)>> SetStaticIntField;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-              JFieldIDPtr fieldID, JLongMarker val)>> SetStaticLongField;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-              JFieldIDPtr fieldID, JFloatMarker val)>> SetStaticFloatField;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-              JFieldIDPtr fieldID, JDoubleMarker val)>> SetStaticDoubleField;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JStringPtr Function(
-              ffi.Pointer<JniEnv$1> env,
-              ffi.Pointer<JCharMarker> unicodeChars,
-              JSizeMarker len)>> NewString;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JSizeMarker Function(
-              ffi.Pointer<JniEnv$1> env, JStringPtr string)>> GetStringLength;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Pointer<JCharMarker> Function(
-              ffi.Pointer<JniEnv$1> env,
-              JStringPtr string,
-              ffi.Pointer<JBooleanMarker> isCopy)>> GetStringChars;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(ffi.Pointer<JniEnv$1> env, JStringPtr string,
-              ffi.Pointer<JCharMarker> isCopy)>> ReleaseStringChars;
-
-  external ffi.Pointer<
-          ffi.NativeFunction<
-              JStringPtr Function(
-                  ffi.Pointer<JniEnv$1> env, ffi.Pointer<ffi.Char> bytes)>>
-      NewStringUTF;
-
-  external ffi.Pointer<
-          ffi.NativeFunction<
-              JSizeMarker Function(
-                  ffi.Pointer<JniEnv$1> env, JStringPtr string)>>
-      GetStringUTFLength;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Pointer<ffi.Char> Function(
-              ffi.Pointer<JniEnv$1> env,
-              JStringPtr string,
-              ffi.Pointer<JBooleanMarker> isCopy)>> GetStringUTFChars;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(ffi.Pointer<JniEnv$1> env, JStringPtr string,
-              ffi.Pointer<ffi.Char> utf)>> ReleaseStringUTFChars;
-
-  external ffi.Pointer<
-          ffi.NativeFunction<
-              JSizeMarker Function(ffi.Pointer<JniEnv$1> env, JArrayPtr array)>>
-      GetArrayLength;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JObjectArrayPtr Function(
-              ffi.Pointer<JniEnv$1> env,
-              JSizeMarker length,
-              JClassPtr elementClass,
-              JObjectPtr initialElement)>> NewObjectArray;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JObjectPtr Function(ffi.Pointer<JniEnv$1> env, JObjectArrayPtr array,
-              JSizeMarker index)>> GetObjectArrayElement;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(ffi.Pointer<JniEnv$1> env, JObjectArrayPtr array,
-              JSizeMarker index, JObjectPtr val)>> SetObjectArrayElement;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JBooleanArrayPtr Function(
-              ffi.Pointer<JniEnv$1> env, JSizeMarker length)>> NewBooleanArray;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JByteArrayPtr Function(
-              ffi.Pointer<JniEnv$1> env, JSizeMarker length)>> NewByteArray;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JCharArrayPtr Function(
-              ffi.Pointer<JniEnv$1> env, JSizeMarker length)>> NewCharArray;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JShortArrayPtr Function(
-              ffi.Pointer<JniEnv$1> env, JSizeMarker length)>> NewShortArray;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JIntArrayPtr Function(
-              ffi.Pointer<JniEnv$1> env, JSizeMarker length)>> NewIntArray;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JLongArrayPtr Function(
-              ffi.Pointer<JniEnv$1> env, JSizeMarker length)>> NewLongArray;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JFloatArrayPtr Function(
-              ffi.Pointer<JniEnv$1> env, JSizeMarker length)>> NewFloatArray;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JDoubleArrayPtr Function(
-              ffi.Pointer<JniEnv$1> env, JSizeMarker length)>> NewDoubleArray;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Pointer<JBooleanMarker> Function(
-              ffi.Pointer<JniEnv$1> env,
-              JBooleanArrayPtr array,
-              ffi.Pointer<JBooleanMarker> isCopy)>> GetBooleanArrayElements;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Pointer<JByteMarker> Function(
-              ffi.Pointer<JniEnv$1> env,
-              JByteArrayPtr array,
-              ffi.Pointer<JBooleanMarker> isCopy)>> GetByteArrayElements;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Pointer<JCharMarker> Function(
-              ffi.Pointer<JniEnv$1> env,
-              JCharArrayPtr array,
-              ffi.Pointer<JBooleanMarker> isCopy)>> GetCharArrayElements;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Pointer<JShortMarker> Function(
-              ffi.Pointer<JniEnv$1> env,
-              JShortArrayPtr array,
-              ffi.Pointer<JBooleanMarker> isCopy)>> GetShortArrayElements;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Pointer<JIntMarker> Function(
-              ffi.Pointer<JniEnv$1> env,
-              JIntArrayPtr array,
-              ffi.Pointer<JBooleanMarker> isCopy)>> GetIntArrayElements;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Pointer<JLongMarker> Function(
-              ffi.Pointer<JniEnv$1> env,
-              JLongArrayPtr array,
-              ffi.Pointer<JBooleanMarker> isCopy)>> GetLongArrayElements;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Pointer<JFloatMarker> Function(
-              ffi.Pointer<JniEnv$1> env,
-              JFloatArrayPtr array,
-              ffi.Pointer<JBooleanMarker> isCopy)>> GetFloatArrayElements;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Pointer<JDoubleMarker> Function(
-              ffi.Pointer<JniEnv$1> env,
-              JDoubleArrayPtr array,
-              ffi.Pointer<JBooleanMarker> isCopy)>> GetDoubleArrayElements;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(
-              ffi.Pointer<JniEnv$1> env,
-              JBooleanArrayPtr array,
-              ffi.Pointer<JBooleanMarker> elems,
-              JIntMarker mode)>> ReleaseBooleanArrayElements;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(
-              ffi.Pointer<JniEnv$1> env,
-              JByteArrayPtr array,
-              ffi.Pointer<JByteMarker> elems,
-              JIntMarker mode)>> ReleaseByteArrayElements;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(
-              ffi.Pointer<JniEnv$1> env,
-              JCharArrayPtr array,
-              ffi.Pointer<JCharMarker> elems,
-              JIntMarker mode)>> ReleaseCharArrayElements;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(
-              ffi.Pointer<JniEnv$1> env,
-              JShortArrayPtr array,
-              ffi.Pointer<JShortMarker> elems,
-              JIntMarker mode)>> ReleaseShortArrayElements;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(
-              ffi.Pointer<JniEnv$1> env,
-              JIntArrayPtr array,
-              ffi.Pointer<JIntMarker> elems,
-              JIntMarker mode)>> ReleaseIntArrayElements;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(
-              ffi.Pointer<JniEnv$1> env,
-              JLongArrayPtr array,
-              ffi.Pointer<JLongMarker> elems,
-              JIntMarker mode)>> ReleaseLongArrayElements;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(
-              ffi.Pointer<JniEnv$1> env,
-              JFloatArrayPtr array,
-              ffi.Pointer<JFloatMarker> elems,
-              JIntMarker mode)>> ReleaseFloatArrayElements;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(
-              ffi.Pointer<JniEnv$1> env,
-              JDoubleArrayPtr array,
-              ffi.Pointer<JDoubleMarker> elems,
-              JIntMarker mode)>> ReleaseDoubleArrayElements;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(
-              ffi.Pointer<JniEnv$1> env,
-              JBooleanArrayPtr array,
-              JSizeMarker start,
-              JSizeMarker len,
-              ffi.Pointer<JBooleanMarker> buf)>> GetBooleanArrayRegion;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(
-              ffi.Pointer<JniEnv$1> env,
-              JByteArrayPtr array,
-              JSizeMarker start,
-              JSizeMarker len,
-              ffi.Pointer<JByteMarker> buf)>> GetByteArrayRegion;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(
-              ffi.Pointer<JniEnv$1> env,
-              JCharArrayPtr array,
-              JSizeMarker start,
-              JSizeMarker len,
-              ffi.Pointer<JCharMarker> buf)>> GetCharArrayRegion;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(
-              ffi.Pointer<JniEnv$1> env,
-              JShortArrayPtr array,
-              JSizeMarker start,
-              JSizeMarker len,
-              ffi.Pointer<JShortMarker> buf)>> GetShortArrayRegion;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(
-              ffi.Pointer<JniEnv$1> env,
-              JIntArrayPtr array,
-              JSizeMarker start,
-              JSizeMarker len,
-              ffi.Pointer<JIntMarker> buf)>> GetIntArrayRegion;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(
-              ffi.Pointer<JniEnv$1> env,
-              JLongArrayPtr array,
-              JSizeMarker start,
-              JSizeMarker len,
-              ffi.Pointer<JLongMarker> buf)>> GetLongArrayRegion;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(
-              ffi.Pointer<JniEnv$1> env,
-              JFloatArrayPtr array,
-              JSizeMarker start,
-              JSizeMarker len,
-              ffi.Pointer<JFloatMarker> buf)>> GetFloatArrayRegion;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(
-              ffi.Pointer<JniEnv$1> env,
-              JDoubleArrayPtr array,
-              JSizeMarker start,
-              JSizeMarker len,
-              ffi.Pointer<JDoubleMarker> buf)>> GetDoubleArrayRegion;
-
-  /// spec shows these without const; some jni.h do, some don't
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(
-              ffi.Pointer<JniEnv$1> env,
-              JBooleanArrayPtr array,
-              JSizeMarker start,
-              JSizeMarker len,
-              ffi.Pointer<JBooleanMarker> buf)>> SetBooleanArrayRegion;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(
-              ffi.Pointer<JniEnv$1> env,
-              JByteArrayPtr array,
-              JSizeMarker start,
-              JSizeMarker len,
-              ffi.Pointer<JByteMarker> buf)>> SetByteArrayRegion;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(
-              ffi.Pointer<JniEnv$1> env,
-              JCharArrayPtr array,
-              JSizeMarker start,
-              JSizeMarker len,
-              ffi.Pointer<JCharMarker> buf)>> SetCharArrayRegion;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(
-              ffi.Pointer<JniEnv$1> env,
-              JShortArrayPtr array,
-              JSizeMarker start,
-              JSizeMarker len,
-              ffi.Pointer<JShortMarker> buf)>> SetShortArrayRegion;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(
-              ffi.Pointer<JniEnv$1> env,
-              JIntArrayPtr array,
-              JSizeMarker start,
-              JSizeMarker len,
-              ffi.Pointer<JIntMarker> buf)>> SetIntArrayRegion;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(
-              ffi.Pointer<JniEnv$1> env,
-              JLongArrayPtr array,
-              JSizeMarker start,
-              JSizeMarker len,
-              ffi.Pointer<JLongMarker> buf)>> SetLongArrayRegion;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(
-              ffi.Pointer<JniEnv$1> env,
-              JFloatArrayPtr array,
-              JSizeMarker start,
-              JSizeMarker len,
-              ffi.Pointer<JFloatMarker> buf)>> SetFloatArrayRegion;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(
-              ffi.Pointer<JniEnv$1> env,
-              JDoubleArrayPtr array,
-              JSizeMarker start,
-              JSizeMarker len,
-              ffi.Pointer<JDoubleMarker> buf)>> SetDoubleArrayRegion;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JIntMarker Function(
-              ffi.Pointer<JniEnv$1> env,
-              JClassPtr clazz,
-              ffi.Pointer<JNINativeMethod> methods,
-              JIntMarker nMethods)>> RegisterNatives;
-
-  external ffi.Pointer<
-          ffi.NativeFunction<
-              JIntMarker Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz)>>
-      UnregisterNatives;
-
-  external ffi.Pointer<
-          ffi.NativeFunction<
-              JIntMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj)>>
-      MonitorEnter;
-
-  external ffi.Pointer<
-          ffi.NativeFunction<
-              JIntMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj)>>
-      MonitorExit;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JIntMarker Function(ffi.Pointer<JniEnv$1> env,
-              ffi.Pointer<ffi.Pointer<JavaVM$1>> vm)>> GetJavaVM;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(
-              ffi.Pointer<JniEnv$1> env,
-              JStringPtr str,
-              JSizeMarker start,
-              JSizeMarker len,
-              ffi.Pointer<JCharMarker> buf)>> GetStringRegion;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(
-              ffi.Pointer<JniEnv$1> env,
-              JStringPtr str,
-              JSizeMarker start,
-              JSizeMarker len,
-              ffi.Pointer<ffi.Char> buf)>> GetStringUTFRegion;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Pointer<ffi.Void> Function(
-              ffi.Pointer<JniEnv$1> env,
-              JArrayPtr array,
-              ffi.Pointer<JBooleanMarker> isCopy)>> GetPrimitiveArrayCritical;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(
-              ffi.Pointer<JniEnv$1> env,
-              JArrayPtr array,
-              ffi.Pointer<ffi.Void> carray,
-              JIntMarker mode)>> ReleasePrimitiveArrayCritical;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Pointer<JCharMarker> Function(
-              ffi.Pointer<JniEnv$1> env,
-              JStringPtr str,
-              ffi.Pointer<JBooleanMarker> isCopy)>> GetStringCritical;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.Void Function(ffi.Pointer<JniEnv$1> env, JStringPtr str,
-              ffi.Pointer<JCharMarker> carray)>> ReleaseStringCritical;
-
-  external ffi.Pointer<
-          ffi.NativeFunction<
-              JWeakPtr Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj)>>
-      NewWeakGlobalRef;
-
-  external ffi.Pointer<
-          ffi.NativeFunction<
-              ffi.Void Function(ffi.Pointer<JniEnv$1> env, JWeakPtr obj)>>
-      DeleteWeakGlobalRef;
-
-  external ffi.Pointer<
-          ffi
-          .NativeFunction<JBooleanMarker Function(ffi.Pointer<JniEnv$1> env)>>
-      ExceptionCheck;
-
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          JObjectPtr Function(
-              ffi.Pointer<JniEnv$1> env,
-              ffi.Pointer<ffi.Void> address,
-              JLongMarker capacity)>> NewDirectByteBuffer;
-
-  external ffi.Pointer<
-          ffi.NativeFunction<
-              ffi.Pointer<ffi.Void> Function(
-                  ffi.Pointer<JniEnv$1> env, JObjectPtr buf)>>
-      GetDirectBufferAddress;
-
-  external ffi.Pointer<
-          ffi.NativeFunction<
-              JLongMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr buf)>>
-      GetDirectBufferCapacity;
-
-  /// added in JNI 1.6
-  external ffi.Pointer<
-      ffi.NativeFunction<
-          ffi.UnsignedInt Function(
-              ffi.Pointer<JniEnv$1> env, JObjectPtr obj)>> GetObjectRefType;
-
-  static ffi.Pointer<JNINativeInterface> $allocate(
-    ffi.Allocator $allocator, {
-    required ffi.Pointer<ffi.Void> reserved0,
-    required ffi.Pointer<ffi.Void> reserved1,
-    required ffi.Pointer<ffi.Void> reserved2,
-    required ffi.Pointer<ffi.Void> reserved3,
-    required ffi.Pointer<
-            ffi.NativeFunction<JIntMarker Function(ffi.Pointer<JniEnv$1> env)>>
-        GetVersion,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JClassPtr Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    ffi.Pointer<ffi.Char> name,
-                    JObjectPtr loader,
-                    ffi.Pointer<JByteMarker> buf,
-                    JSizeMarker bufLen)>>
-        DefineClass,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JClassPtr Function(
-                    ffi.Pointer<JniEnv$1> env, ffi.Pointer<ffi.Char> name)>>
-        FindClass,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JMethodIDPtr Function(
-                    ffi.Pointer<JniEnv$1> env, JObjectPtr method)>>
-        FromReflectedMethod,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JFieldIDPtr Function(
-                    ffi.Pointer<JniEnv$1> env, JObjectPtr field)>>
-        FromReflectedField,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JObjectPtr Function(ffi.Pointer<JniEnv$1> env, JClassPtr cls,
-                    JMethodIDPtr methodId, JBooleanMarker isStatic)>>
-        ToReflectedMethod,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JClassPtr Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz)>>
-        GetSuperclass,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JBooleanMarker Function(ffi.Pointer<JniEnv$1> env,
-                    JClassPtr clazz1, JClassPtr clazz2)>>
-        IsAssignableFrom,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JObjectPtr Function(ffi.Pointer<JniEnv$1> env, JClassPtr cls,
-                    JFieldIDPtr fieldID, JBooleanMarker isStatic)>>
-        ToReflectedField,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JIntMarker Function(
-                    ffi.Pointer<JniEnv$1> env, JThrowablePtr obj)>>
-        Throw,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JIntMarker Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-                    ffi.Pointer<ffi.Char> message)>>
-        ThrowNew,
-    required ffi.Pointer<
-            ffi
-            .NativeFunction<JThrowablePtr Function(ffi.Pointer<JniEnv$1> env)>>
-        ExceptionOccurred,
-    required ffi.Pointer<
-            ffi.NativeFunction<ffi.Void Function(ffi.Pointer<JniEnv$1> env)>>
-        ExceptionDescribe,
-    required ffi.Pointer<
-            ffi.NativeFunction<ffi.Void Function(ffi.Pointer<JniEnv$1> env)>>
-        ExceptionClear,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(
-                    ffi.Pointer<JniEnv$1> env, ffi.Pointer<ffi.Char> msg)>>
-        FatalError,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JIntMarker Function(
-                    ffi.Pointer<JniEnv$1> env, JIntMarker capacity)>>
-        PushLocalFrame,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JObjectPtr Function(
-                    ffi.Pointer<JniEnv$1> env, JObjectPtr result)>>
-        PopLocalFrame,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JObjectPtr Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj)>>
-        NewGlobalRef,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(
-                    ffi.Pointer<JniEnv$1> env, JObjectPtr globalRef)>>
-        DeleteGlobalRef,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(
-                    ffi.Pointer<JniEnv$1> env, JObjectPtr localRef)>>
-        DeleteLocalRef,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JBooleanMarker Function(ffi.Pointer<JniEnv$1> env,
-                    JObjectPtr ref1, JObjectPtr ref2)>>
-        IsSameObject,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JObjectPtr Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj)>>
-        NewLocalRef,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JIntMarker Function(
-                    ffi.Pointer<JniEnv$1> env, JIntMarker capacity)>>
-        EnsureLocalCapacity,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JObjectPtr Function(
-                    ffi.Pointer<JniEnv$1> env, JClassPtr clazz)>>
-        AllocObject,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JObjectPtr Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-                    JMethodIDPtr methodID)>>
-        NewObject,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JObjectPtr Function(ffi.Pointer<JniEnv$1>, JClassPtr,
-                    JMethodIDPtr, ffi.Pointer<ffi.Void>)>>
-        NewObjectV,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JObjectPtr Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-                    JMethodIDPtr methodID, ffi.Pointer<JValue> args)>>
-        NewObjectA,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JClassPtr Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj)>>
-        GetObjectClass,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JBooleanMarker Function(ffi.Pointer<JniEnv$1> env,
-                    JObjectPtr obj, JClassPtr clazz)>>
-        IsInstanceOf,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JMethodIDPtr Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    JClassPtr clazz,
-                    ffi.Pointer<ffi.Char> name,
-                    ffi.Pointer<ffi.Char> sig)>>
-        GetMethodID,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JObjectPtr Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-                    JMethodIDPtr methodID)>>
-        CallObjectMethod,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JObjectPtr Function(ffi.Pointer<JniEnv$1>, JObjectPtr,
-                    JMethodIDPtr, ffi.Pointer<ffi.Void>)>>
-        CallObjectMethodV,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JObjectPtr Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-                    JMethodIDPtr methodID, ffi.Pointer<JValue> args)>>
-        CallObjectMethodA,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JBooleanMarker Function(ffi.Pointer<JniEnv$1> env,
-                    JObjectPtr obj, JMethodIDPtr methodID)>>
-        CallBooleanMethod,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JBooleanMarker Function(ffi.Pointer<JniEnv$1>, JObjectPtr,
-                    JMethodIDPtr, ffi.Pointer<ffi.Void>)>>
-        CallBooleanMethodV,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JBooleanMarker Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    JObjectPtr obj,
-                    JMethodIDPtr methodId,
-                    ffi.Pointer<JValue> args)>>
-        CallBooleanMethodA,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JByteMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-                    JMethodIDPtr methodID)>>
-        CallByteMethod,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JByteMarker Function(ffi.Pointer<JniEnv$1>, JObjectPtr,
-                    JMethodIDPtr, ffi.Pointer<ffi.Void>)>>
-        CallByteMethodV,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JByteMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-                    JMethodIDPtr methodID, ffi.Pointer<JValue> args)>>
-        CallByteMethodA,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JCharMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-                    JMethodIDPtr methodID)>>
-        CallCharMethod,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JCharMarker Function(ffi.Pointer<JniEnv$1>, JObjectPtr,
-                    JMethodIDPtr, ffi.Pointer<ffi.Void>)>>
-        CallCharMethodV,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JCharMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-                    JMethodIDPtr methodID, ffi.Pointer<JValue> args)>>
-        CallCharMethodA,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JShortMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-                    JMethodIDPtr methodID)>>
-        CallShortMethod,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JShortMarker Function(ffi.Pointer<JniEnv$1>, JObjectPtr,
-                    JMethodIDPtr, ffi.Pointer<ffi.Void>)>>
-        CallShortMethodV,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JShortMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-                    JMethodIDPtr methodID, ffi.Pointer<JValue> args)>>
-        CallShortMethodA,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JIntMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-                    JMethodIDPtr methodID)>>
-        CallIntMethod,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JIntMarker Function(ffi.Pointer<JniEnv$1>, JObjectPtr,
-                    JMethodIDPtr, ffi.Pointer<ffi.Void>)>>
-        CallIntMethodV,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JIntMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-                    JMethodIDPtr methodID, ffi.Pointer<JValue> args)>>
-        CallIntMethodA,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JLongMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-                    JMethodIDPtr methodID)>>
-        CallLongMethod,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JLongMarker Function(ffi.Pointer<JniEnv$1>, JObjectPtr,
-                    JMethodIDPtr, ffi.Pointer<ffi.Void>)>>
-        CallLongMethodV,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JLongMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-                    JMethodIDPtr methodID, ffi.Pointer<JValue> args)>>
-        CallLongMethodA,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JFloatMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-                    JMethodIDPtr methodID)>>
-        CallFloatMethod,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JFloatMarker Function(ffi.Pointer<JniEnv$1>, JObjectPtr,
-                    JMethodIDPtr, ffi.Pointer<ffi.Void>)>>
-        CallFloatMethodV,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JFloatMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-                    JMethodIDPtr methodID, ffi.Pointer<JValue> args)>>
-        CallFloatMethodA,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JDoubleMarker Function(ffi.Pointer<JniEnv$1> env,
-                    JObjectPtr obj, JMethodIDPtr methodID)>>
-        CallDoubleMethod,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JDoubleMarker Function(ffi.Pointer<JniEnv$1>, JObjectPtr,
-                    JMethodIDPtr, ffi.Pointer<ffi.Void>)>>
-        CallDoubleMethodV,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JDoubleMarker Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    JObjectPtr obj,
-                    JMethodIDPtr methodID,
-                    ffi.Pointer<JValue> args)>>
-        CallDoubleMethodA,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-                    JMethodIDPtr methodID)>>
-        CallVoidMethod,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(ffi.Pointer<JniEnv$1>, JObjectPtr,
-                    JMethodIDPtr, ffi.Pointer<ffi.Void>)>>
-        CallVoidMethodV,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-                    JMethodIDPtr methodID, ffi.Pointer<JValue> args)>>
-        CallVoidMethodA,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JObjectPtr Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-                    JClassPtr clazz, JMethodIDPtr methodID)>>
-        CallNonvirtualObjectMethod,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JObjectPtr Function(ffi.Pointer<JniEnv$1>, JObjectPtr,
-                    JClassPtr, JMethodIDPtr, ffi.Pointer<ffi.Void>)>>
-        CallNonvirtualObjectMethodV,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JObjectPtr Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    JObjectPtr obj,
-                    JClassPtr clazz,
-                    JMethodIDPtr methodID,
-                    ffi.Pointer<JValue> args)>>
-        CallNonvirtualObjectMethodA,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JBooleanMarker Function(ffi.Pointer<JniEnv$1> env,
-                    JObjectPtr obj, JClassPtr clazz, JMethodIDPtr methodID)>>
-        CallNonvirtualBooleanMethod,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JBooleanMarker Function(ffi.Pointer<JniEnv$1>, JObjectPtr,
-                    JClassPtr, JMethodIDPtr, ffi.Pointer<ffi.Void>)>>
-        CallNonvirtualBooleanMethodV,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JBooleanMarker Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    JObjectPtr obj,
-                    JClassPtr clazz,
-                    JMethodIDPtr methodID,
-                    ffi.Pointer<JValue> args)>>
-        CallNonvirtualBooleanMethodA,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JByteMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-                    JClassPtr clazz, JMethodIDPtr methodID)>>
-        CallNonvirtualByteMethod,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JByteMarker Function(ffi.Pointer<JniEnv$1>, JObjectPtr,
-                    JClassPtr, JMethodIDPtr, ffi.Pointer<ffi.Void>)>>
-        CallNonvirtualByteMethodV,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JByteMarker Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    JObjectPtr obj,
-                    JClassPtr clazz,
-                    JMethodIDPtr methodID,
-                    ffi.Pointer<JValue> args)>>
-        CallNonvirtualByteMethodA,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JCharMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-                    JClassPtr clazz, JMethodIDPtr methodID)>>
-        CallNonvirtualCharMethod,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JCharMarker Function(ffi.Pointer<JniEnv$1>, JObjectPtr,
-                    JClassPtr, JMethodIDPtr, ffi.Pointer<ffi.Void>)>>
-        CallNonvirtualCharMethodV,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JCharMarker Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    JObjectPtr obj,
-                    JClassPtr clazz,
-                    JMethodIDPtr methodID,
-                    ffi.Pointer<JValue> args)>>
-        CallNonvirtualCharMethodA,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JShortMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-                    JClassPtr clazz, JMethodIDPtr methodID)>>
-        CallNonvirtualShortMethod,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JShortMarker Function(ffi.Pointer<JniEnv$1>, JObjectPtr,
-                    JClassPtr, JMethodIDPtr, ffi.Pointer<ffi.Void>)>>
-        CallNonvirtualShortMethodV,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JShortMarker Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    JObjectPtr obj,
-                    JClassPtr clazz,
-                    JMethodIDPtr methodID,
-                    ffi.Pointer<JValue> args)>>
-        CallNonvirtualShortMethodA,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JIntMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-                    JClassPtr clazz, JMethodIDPtr methodID)>>
-        CallNonvirtualIntMethod,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JIntMarker Function(ffi.Pointer<JniEnv$1>, JObjectPtr,
-                    JClassPtr, JMethodIDPtr, ffi.Pointer<ffi.Void>)>>
-        CallNonvirtualIntMethodV,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JIntMarker Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    JObjectPtr obj,
-                    JClassPtr clazz,
-                    JMethodIDPtr methodID,
-                    ffi.Pointer<JValue> args)>>
-        CallNonvirtualIntMethodA,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JLongMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-                    JClassPtr clazz, JMethodIDPtr methodID)>>
-        CallNonvirtualLongMethod,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JLongMarker Function(ffi.Pointer<JniEnv$1>, JObjectPtr,
-                    JClassPtr, JMethodIDPtr, ffi.Pointer<ffi.Void>)>>
-        CallNonvirtualLongMethodV,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JLongMarker Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    JObjectPtr obj,
-                    JClassPtr clazz,
-                    JMethodIDPtr methodID,
-                    ffi.Pointer<JValue> args)>>
-        CallNonvirtualLongMethodA,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JFloatMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-                    JClassPtr clazz, JMethodIDPtr methodID)>>
-        CallNonvirtualFloatMethod,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JFloatMarker Function(ffi.Pointer<JniEnv$1>, JObjectPtr,
-                    JClassPtr, JMethodIDPtr, ffi.Pointer<ffi.Void>)>>
-        CallNonvirtualFloatMethodV,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JFloatMarker Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    JObjectPtr obj,
-                    JClassPtr clazz,
-                    JMethodIDPtr methodID,
-                    ffi.Pointer<JValue> args)>>
-        CallNonvirtualFloatMethodA,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JDoubleMarker Function(ffi.Pointer<JniEnv$1> env,
-                    JObjectPtr obj, JClassPtr clazz, JMethodIDPtr methodID)>>
-        CallNonvirtualDoubleMethod,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JDoubleMarker Function(ffi.Pointer<JniEnv$1>, JObjectPtr,
-                    JClassPtr, JMethodIDPtr, ffi.Pointer<ffi.Void>)>>
-        CallNonvirtualDoubleMethodV,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JDoubleMarker Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    JObjectPtr obj,
-                    JClassPtr clazz,
-                    JMethodIDPtr methodID,
-                    ffi.Pointer<JValue> args)>>
-        CallNonvirtualDoubleMethodA,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-                    JClassPtr clazz, JMethodIDPtr methodID)>>
-        CallNonvirtualVoidMethod,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(ffi.Pointer<JniEnv$1>, JObjectPtr, JClassPtr,
-                    JMethodIDPtr, ffi.Pointer<ffi.Void>)>>
-        CallNonvirtualVoidMethodV,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    JObjectPtr obj,
-                    JClassPtr clazz,
-                    JMethodIDPtr methodID,
-                    ffi.Pointer<JValue> args)>>
-        CallNonvirtualVoidMethodA,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JFieldIDPtr Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-                    ffi.Pointer<ffi.Char> name, ffi.Pointer<ffi.Char> sig)>>
-        GetFieldID,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JObjectPtr Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-                    JFieldIDPtr fieldID)>>
-        GetObjectField,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JBooleanMarker Function(ffi.Pointer<JniEnv$1> env,
-                    JObjectPtr obj, JFieldIDPtr fieldID)>>
-        GetBooleanField,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JByteMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-                    JFieldIDPtr fieldID)>>
-        GetByteField,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JCharMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-                    JFieldIDPtr fieldID)>>
-        GetCharField,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JShortMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-                    JFieldIDPtr fieldID)>>
-        GetShortField,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JIntMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-                    JFieldIDPtr fieldID)>>
-        GetIntField,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JLongMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-                    JFieldIDPtr fieldID)>>
-        GetLongField,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JFloatMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-                    JFieldIDPtr fieldID)>>
-        GetFloatField,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JDoubleMarker Function(ffi.Pointer<JniEnv$1> env,
-                    JObjectPtr obj, JFieldIDPtr fieldID)>>
-        GetDoubleField,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-                    JFieldIDPtr fieldID, JObjectPtr val)>>
-        SetObjectField,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-                    JFieldIDPtr fieldID, JBooleanMarker val)>>
-        SetBooleanField,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-                    JFieldIDPtr fieldID, JByteMarker val)>>
-        SetByteField,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-                    JFieldIDPtr fieldID, JCharMarker val)>>
-        SetCharField,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-                    JFieldIDPtr fieldID, JShortMarker val)>>
-        SetShortField,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-                    JFieldIDPtr fieldID, JIntMarker val)>>
-        SetIntField,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-                    JFieldIDPtr fieldID, JLongMarker val)>>
-        SetLongField,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-                    JFieldIDPtr fieldID, JFloatMarker val)>>
-        SetFloatField,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj,
-                    JFieldIDPtr fieldID, JDoubleMarker val)>>
-        SetDoubleField,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JMethodIDPtr Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    JClassPtr clazz,
-                    ffi.Pointer<ffi.Char> name,
-                    ffi.Pointer<ffi.Char> sig)>>
-        GetStaticMethodID,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JObjectPtr Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-                    JMethodIDPtr methodID)>>
-        CallStaticObjectMethod,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JObjectPtr Function(ffi.Pointer<JniEnv$1>, JClassPtr,
-                    JMethodIDPtr, ffi.Pointer<ffi.Void>)>>
-        CallStaticObjectMethodV,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JObjectPtr Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-                    JMethodIDPtr methodID, ffi.Pointer<JValue> args)>>
-        CallStaticObjectMethodA,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JBooleanMarker Function(ffi.Pointer<JniEnv$1> env,
-                    JClassPtr clazz, JMethodIDPtr methodID)>>
-        CallStaticBooleanMethod,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JBooleanMarker Function(ffi.Pointer<JniEnv$1>, JClassPtr,
-                    JMethodIDPtr, ffi.Pointer<ffi.Void>)>>
-        CallStaticBooleanMethodV,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JBooleanMarker Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    JClassPtr clazz,
-                    JMethodIDPtr methodID,
-                    ffi.Pointer<JValue> args)>>
-        CallStaticBooleanMethodA,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JByteMarker Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-                    JMethodIDPtr methodID)>>
-        CallStaticByteMethod,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JByteMarker Function(ffi.Pointer<JniEnv$1>, JClassPtr,
-                    JMethodIDPtr, ffi.Pointer<ffi.Void>)>>
-        CallStaticByteMethodV,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JByteMarker Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-                    JMethodIDPtr methodID, ffi.Pointer<JValue> args)>>
-        CallStaticByteMethodA,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JCharMarker Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-                    JMethodIDPtr methodID)>>
-        CallStaticCharMethod,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JCharMarker Function(ffi.Pointer<JniEnv$1>, JClassPtr,
-                    JMethodIDPtr, ffi.Pointer<ffi.Void>)>>
-        CallStaticCharMethodV,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JCharMarker Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-                    JMethodIDPtr methodID, ffi.Pointer<JValue> args)>>
-        CallStaticCharMethodA,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JShortMarker Function(ffi.Pointer<JniEnv$1> env,
-                    JClassPtr clazz, JMethodIDPtr methodID)>>
-        CallStaticShortMethod,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JShortMarker Function(ffi.Pointer<JniEnv$1>, JClassPtr,
-                    JMethodIDPtr, ffi.Pointer<ffi.Void>)>>
-        CallStaticShortMethodV,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JShortMarker Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    JClassPtr clazz,
-                    JMethodIDPtr methodID,
-                    ffi.Pointer<JValue> args)>>
-        CallStaticShortMethodA,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JIntMarker Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-                    JMethodIDPtr methodID)>>
-        CallStaticIntMethod,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JIntMarker Function(ffi.Pointer<JniEnv$1>, JClassPtr,
-                    JMethodIDPtr, ffi.Pointer<ffi.Void>)>>
-        CallStaticIntMethodV,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JIntMarker Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-                    JMethodIDPtr methodID, ffi.Pointer<JValue> args)>>
-        CallStaticIntMethodA,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JLongMarker Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-                    JMethodIDPtr methodID)>>
-        CallStaticLongMethod,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JLongMarker Function(ffi.Pointer<JniEnv$1>, JClassPtr,
-                    JMethodIDPtr, ffi.Pointer<ffi.Void>)>>
-        CallStaticLongMethodV,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JLongMarker Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-                    JMethodIDPtr methodID, ffi.Pointer<JValue> args)>>
-        CallStaticLongMethodA,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JFloatMarker Function(ffi.Pointer<JniEnv$1> env,
-                    JClassPtr clazz, JMethodIDPtr methodID)>>
-        CallStaticFloatMethod,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JFloatMarker Function(ffi.Pointer<JniEnv$1>, JClassPtr,
-                    JMethodIDPtr, ffi.Pointer<ffi.Void>)>>
-        CallStaticFloatMethodV,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JFloatMarker Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    JClassPtr clazz,
-                    JMethodIDPtr methodID,
-                    ffi.Pointer<JValue> args)>>
-        CallStaticFloatMethodA,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JDoubleMarker Function(ffi.Pointer<JniEnv$1> env,
-                    JClassPtr clazz, JMethodIDPtr methodID)>>
-        CallStaticDoubleMethod,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JDoubleMarker Function(ffi.Pointer<JniEnv$1>, JClassPtr,
-                    JMethodIDPtr, ffi.Pointer<ffi.Void>)>>
-        CallStaticDoubleMethodV,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JDoubleMarker Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    JClassPtr clazz,
-                    JMethodIDPtr methodID,
-                    ffi.Pointer<JValue> args)>>
-        CallStaticDoubleMethodA,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-                    JMethodIDPtr methodID)>>
-        CallStaticVoidMethod,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(ffi.Pointer<JniEnv$1>, JClassPtr,
-                    JMethodIDPtr, ffi.Pointer<ffi.Void>)>>
-        CallStaticVoidMethodV,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-                    JMethodIDPtr methodID, ffi.Pointer<JValue> args)>>
-        CallStaticVoidMethodA,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JFieldIDPtr Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-                    ffi.Pointer<ffi.Char> name, ffi.Pointer<ffi.Char> sig)>>
-        GetStaticFieldID,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JObjectPtr Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-                    JFieldIDPtr fieldID)>>
-        GetStaticObjectField,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JBooleanMarker Function(ffi.Pointer<JniEnv$1> env,
-                    JClassPtr clazz, JFieldIDPtr fieldID)>>
-        GetStaticBooleanField,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JByteMarker Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-                    JFieldIDPtr fieldID)>>
-        GetStaticByteField,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JCharMarker Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-                    JFieldIDPtr fieldID)>>
-        GetStaticCharField,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JShortMarker Function(ffi.Pointer<JniEnv$1> env,
-                    JClassPtr clazz, JFieldIDPtr fieldID)>>
-        GetStaticShortField,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JIntMarker Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-                    JFieldIDPtr fieldID)>>
-        GetStaticIntField,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JLongMarker Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-                    JFieldIDPtr fieldID)>>
-        GetStaticLongField,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JFloatMarker Function(ffi.Pointer<JniEnv$1> env,
-                    JClassPtr clazz, JFieldIDPtr fieldID)>>
-        GetStaticFloatField,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JDoubleMarker Function(ffi.Pointer<JniEnv$1> env,
-                    JClassPtr clazz, JFieldIDPtr fieldID)>>
-        GetStaticDoubleField,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-                    JFieldIDPtr fieldID, JObjectPtr val)>>
-        SetStaticObjectField,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-                    JFieldIDPtr fieldID, JBooleanMarker val)>>
-        SetStaticBooleanField,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-                    JFieldIDPtr fieldID, JByteMarker val)>>
-        SetStaticByteField,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-                    JFieldIDPtr fieldID, JCharMarker val)>>
-        SetStaticCharField,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-                    JFieldIDPtr fieldID, JShortMarker val)>>
-        SetStaticShortField,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-                    JFieldIDPtr fieldID, JIntMarker val)>>
-        SetStaticIntField,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-                    JFieldIDPtr fieldID, JLongMarker val)>>
-        SetStaticLongField,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-                    JFieldIDPtr fieldID, JFloatMarker val)>>
-        SetStaticFloatField,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-                    JFieldIDPtr fieldID, JDoubleMarker val)>>
-        SetStaticDoubleField,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JStringPtr Function(ffi.Pointer<JniEnv$1> env,
-                    ffi.Pointer<JCharMarker> unicodeChars, JSizeMarker len)>>
-        NewString,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JSizeMarker Function(
-                    ffi.Pointer<JniEnv$1> env, JStringPtr string)>>
-        GetStringLength,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Pointer<JCharMarker> Function(ffi.Pointer<JniEnv$1> env,
-                    JStringPtr string, ffi.Pointer<JBooleanMarker> isCopy)>>
-        GetStringChars,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(ffi.Pointer<JniEnv$1> env, JStringPtr string,
-                    ffi.Pointer<JCharMarker> isCopy)>>
-        ReleaseStringChars,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JStringPtr Function(
-                    ffi.Pointer<JniEnv$1> env, ffi.Pointer<ffi.Char> bytes)>>
-        NewStringUTF,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JSizeMarker Function(
-                    ffi.Pointer<JniEnv$1> env, JStringPtr string)>>
-        GetStringUTFLength,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Pointer<ffi.Char> Function(ffi.Pointer<JniEnv$1> env,
-                    JStringPtr string, ffi.Pointer<JBooleanMarker> isCopy)>>
-        GetStringUTFChars,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(ffi.Pointer<JniEnv$1> env, JStringPtr string,
-                    ffi.Pointer<ffi.Char> utf)>>
-        ReleaseStringUTFChars,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JSizeMarker Function(
-                    ffi.Pointer<JniEnv$1> env, JArrayPtr array)>>
-        GetArrayLength,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JObjectArrayPtr Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    JSizeMarker length,
-                    JClassPtr elementClass,
-                    JObjectPtr initialElement)>>
-        NewObjectArray,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JObjectPtr Function(ffi.Pointer<JniEnv$1> env,
-                    JObjectArrayPtr array, JSizeMarker index)>>
-        GetObjectArrayElement,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(ffi.Pointer<JniEnv$1> env,
-                    JObjectArrayPtr array, JSizeMarker index, JObjectPtr val)>>
-        SetObjectArrayElement,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JBooleanArrayPtr Function(
-                    ffi.Pointer<JniEnv$1> env, JSizeMarker length)>>
-        NewBooleanArray,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JByteArrayPtr Function(
-                    ffi.Pointer<JniEnv$1> env, JSizeMarker length)>>
-        NewByteArray,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JCharArrayPtr Function(
-                    ffi.Pointer<JniEnv$1> env, JSizeMarker length)>>
-        NewCharArray,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JShortArrayPtr Function(
-                    ffi.Pointer<JniEnv$1> env, JSizeMarker length)>>
-        NewShortArray,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JIntArrayPtr Function(
-                    ffi.Pointer<JniEnv$1> env, JSizeMarker length)>>
-        NewIntArray,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JLongArrayPtr Function(
-                    ffi.Pointer<JniEnv$1> env, JSizeMarker length)>>
-        NewLongArray,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JFloatArrayPtr Function(
-                    ffi.Pointer<JniEnv$1> env, JSizeMarker length)>>
-        NewFloatArray,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JDoubleArrayPtr Function(
-                    ffi.Pointer<JniEnv$1> env, JSizeMarker length)>>
-        NewDoubleArray,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Pointer<JBooleanMarker> Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    JBooleanArrayPtr array,
-                    ffi.Pointer<JBooleanMarker> isCopy)>>
-        GetBooleanArrayElements,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Pointer<JByteMarker> Function(ffi.Pointer<JniEnv$1> env,
-                    JByteArrayPtr array, ffi.Pointer<JBooleanMarker> isCopy)>>
-        GetByteArrayElements,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Pointer<JCharMarker> Function(ffi.Pointer<JniEnv$1> env,
-                    JCharArrayPtr array, ffi.Pointer<JBooleanMarker> isCopy)>>
-        GetCharArrayElements,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Pointer<JShortMarker> Function(ffi.Pointer<JniEnv$1> env,
-                    JShortArrayPtr array, ffi.Pointer<JBooleanMarker> isCopy)>>
-        GetShortArrayElements,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Pointer<JIntMarker> Function(ffi.Pointer<JniEnv$1> env,
-                    JIntArrayPtr array, ffi.Pointer<JBooleanMarker> isCopy)>>
-        GetIntArrayElements,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Pointer<JLongMarker> Function(ffi.Pointer<JniEnv$1> env,
-                    JLongArrayPtr array, ffi.Pointer<JBooleanMarker> isCopy)>>
-        GetLongArrayElements,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Pointer<JFloatMarker> Function(ffi.Pointer<JniEnv$1> env,
-                    JFloatArrayPtr array, ffi.Pointer<JBooleanMarker> isCopy)>>
-        GetFloatArrayElements,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Pointer<JDoubleMarker> Function(ffi.Pointer<JniEnv$1> env,
-                    JDoubleArrayPtr array, ffi.Pointer<JBooleanMarker> isCopy)>>
-        GetDoubleArrayElements,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    JBooleanArrayPtr array,
-                    ffi.Pointer<JBooleanMarker> elems,
-                    JIntMarker mode)>>
-        ReleaseBooleanArrayElements,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    JByteArrayPtr array,
-                    ffi.Pointer<JByteMarker> elems,
-                    JIntMarker mode)>>
-        ReleaseByteArrayElements,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    JCharArrayPtr array,
-                    ffi.Pointer<JCharMarker> elems,
-                    JIntMarker mode)>>
-        ReleaseCharArrayElements,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    JShortArrayPtr array,
-                    ffi.Pointer<JShortMarker> elems,
-                    JIntMarker mode)>>
-        ReleaseShortArrayElements,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(ffi.Pointer<JniEnv$1> env, JIntArrayPtr array,
-                    ffi.Pointer<JIntMarker> elems, JIntMarker mode)>>
-        ReleaseIntArrayElements,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    JLongArrayPtr array,
-                    ffi.Pointer<JLongMarker> elems,
-                    JIntMarker mode)>>
-        ReleaseLongArrayElements,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    JFloatArrayPtr array,
-                    ffi.Pointer<JFloatMarker> elems,
-                    JIntMarker mode)>>
-        ReleaseFloatArrayElements,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    JDoubleArrayPtr array,
-                    ffi.Pointer<JDoubleMarker> elems,
-                    JIntMarker mode)>>
-        ReleaseDoubleArrayElements,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    JBooleanArrayPtr array,
-                    JSizeMarker start,
-                    JSizeMarker len,
-                    ffi.Pointer<JBooleanMarker> buf)>>
-        GetBooleanArrayRegion,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    JByteArrayPtr array,
-                    JSizeMarker start,
-                    JSizeMarker len,
-                    ffi.Pointer<JByteMarker> buf)>>
-        GetByteArrayRegion,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    JCharArrayPtr array,
-                    JSizeMarker start,
-                    JSizeMarker len,
-                    ffi.Pointer<JCharMarker> buf)>>
-        GetCharArrayRegion,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    JShortArrayPtr array,
-                    JSizeMarker start,
-                    JSizeMarker len,
-                    ffi.Pointer<JShortMarker> buf)>>
-        GetShortArrayRegion,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    JIntArrayPtr array,
-                    JSizeMarker start,
-                    JSizeMarker len,
-                    ffi.Pointer<JIntMarker> buf)>>
-        GetIntArrayRegion,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    JLongArrayPtr array,
-                    JSizeMarker start,
-                    JSizeMarker len,
-                    ffi.Pointer<JLongMarker> buf)>>
-        GetLongArrayRegion,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    JFloatArrayPtr array,
-                    JSizeMarker start,
-                    JSizeMarker len,
-                    ffi.Pointer<JFloatMarker> buf)>>
-        GetFloatArrayRegion,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    JDoubleArrayPtr array,
-                    JSizeMarker start,
-                    JSizeMarker len,
-                    ffi.Pointer<JDoubleMarker> buf)>>
-        GetDoubleArrayRegion,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    JBooleanArrayPtr array,
-                    JSizeMarker start,
-                    JSizeMarker len,
-                    ffi.Pointer<JBooleanMarker> buf)>>
-        SetBooleanArrayRegion,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    JByteArrayPtr array,
-                    JSizeMarker start,
-                    JSizeMarker len,
-                    ffi.Pointer<JByteMarker> buf)>>
-        SetByteArrayRegion,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    JCharArrayPtr array,
-                    JSizeMarker start,
-                    JSizeMarker len,
-                    ffi.Pointer<JCharMarker> buf)>>
-        SetCharArrayRegion,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    JShortArrayPtr array,
-                    JSizeMarker start,
-                    JSizeMarker len,
-                    ffi.Pointer<JShortMarker> buf)>>
-        SetShortArrayRegion,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    JIntArrayPtr array,
-                    JSizeMarker start,
-                    JSizeMarker len,
-                    ffi.Pointer<JIntMarker> buf)>>
-        SetIntArrayRegion,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    JLongArrayPtr array,
-                    JSizeMarker start,
-                    JSizeMarker len,
-                    ffi.Pointer<JLongMarker> buf)>>
-        SetLongArrayRegion,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    JFloatArrayPtr array,
-                    JSizeMarker start,
-                    JSizeMarker len,
-                    ffi.Pointer<JFloatMarker> buf)>>
-        SetFloatArrayRegion,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    JDoubleArrayPtr array,
-                    JSizeMarker start,
-                    JSizeMarker len,
-                    ffi.Pointer<JDoubleMarker> buf)>>
-        SetDoubleArrayRegion,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JIntMarker Function(ffi.Pointer<JniEnv$1> env, JClassPtr clazz,
-                    ffi.Pointer<JNINativeMethod> methods, JIntMarker nMethods)>>
-        RegisterNatives,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JIntMarker Function(
-                    ffi.Pointer<JniEnv$1> env, JClassPtr clazz)>>
-        UnregisterNatives,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JIntMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj)>>
-        MonitorEnter,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JIntMarker Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj)>>
-        MonitorExit,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JIntMarker Function(ffi.Pointer<JniEnv$1> env,
-                    ffi.Pointer<ffi.Pointer<JavaVM$1>> vm)>>
-        GetJavaVM,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    JStringPtr str,
-                    JSizeMarker start,
-                    JSizeMarker len,
-                    ffi.Pointer<JCharMarker> buf)>>
-        GetStringRegion,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(
-                    ffi.Pointer<JniEnv$1> env,
-                    JStringPtr str,
-                    JSizeMarker start,
-                    JSizeMarker len,
-                    ffi.Pointer<ffi.Char> buf)>>
-        GetStringUTFRegion,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Pointer<ffi.Void> Function(ffi.Pointer<JniEnv$1> env,
-                    JArrayPtr array, ffi.Pointer<JBooleanMarker> isCopy)>>
-        GetPrimitiveArrayCritical,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(ffi.Pointer<JniEnv$1> env, JArrayPtr array,
-                    ffi.Pointer<ffi.Void> carray, JIntMarker mode)>>
-        ReleasePrimitiveArrayCritical,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Pointer<JCharMarker> Function(ffi.Pointer<JniEnv$1> env,
-                    JStringPtr str, ffi.Pointer<JBooleanMarker> isCopy)>>
-        GetStringCritical,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(ffi.Pointer<JniEnv$1> env, JStringPtr str,
-                    ffi.Pointer<JCharMarker> carray)>>
-        ReleaseStringCritical,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JWeakPtr Function(ffi.Pointer<JniEnv$1> env, JObjectPtr obj)>>
-        NewWeakGlobalRef,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Void Function(ffi.Pointer<JniEnv$1> env, JWeakPtr obj)>>
-        DeleteWeakGlobalRef,
-    required ffi.Pointer<
-            ffi
-            .NativeFunction<JBooleanMarker Function(ffi.Pointer<JniEnv$1> env)>>
-        ExceptionCheck,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JObjectPtr Function(ffi.Pointer<JniEnv$1> env,
-                    ffi.Pointer<ffi.Void> address, JLongMarker capacity)>>
-        NewDirectByteBuffer,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.Pointer<ffi.Void> Function(
-                    ffi.Pointer<JniEnv$1> env, JObjectPtr buf)>>
-        GetDirectBufferAddress,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                JLongMarker Function(
-                    ffi.Pointer<JniEnv$1> env, JObjectPtr buf)>>
-        GetDirectBufferCapacity,
-    required ffi.Pointer<
-            ffi.NativeFunction<
-                ffi.UnsignedInt Function(
-                    ffi.Pointer<JniEnv$1> env, JObjectPtr obj)>>
-        GetObjectRefType,
-  }) =>
-      $allocator<JNINativeInterface>()
-        ..ref.reserved0 = reserved0
-        ..ref.reserved1 = reserved1
-        ..ref.reserved2 = reserved2
-        ..ref.reserved3 = reserved3
-        ..ref.GetVersion = GetVersion
-        ..ref.DefineClass = DefineClass
-        ..ref.FindClass = FindClass
-        ..ref.FromReflectedMethod = FromReflectedMethod
-        ..ref.FromReflectedField = FromReflectedField
-        ..ref.ToReflectedMethod = ToReflectedMethod
-        ..ref.GetSuperclass = GetSuperclass
-        ..ref.IsAssignableFrom = IsAssignableFrom
-        ..ref.ToReflectedField = ToReflectedField
-        ..ref.Throw = Throw
-        ..ref.ThrowNew = ThrowNew
-        ..ref.ExceptionOccurred = ExceptionOccurred
-        ..ref.ExceptionDescribe = ExceptionDescribe
-        ..ref.ExceptionClear = ExceptionClear
-        ..ref.FatalError = FatalError
-        ..ref.PushLocalFrame = PushLocalFrame
-        ..ref.PopLocalFrame = PopLocalFrame
-        ..ref.NewGlobalRef = NewGlobalRef
-        ..ref.DeleteGlobalRef = DeleteGlobalRef
-        ..ref.DeleteLocalRef = DeleteLocalRef
-        ..ref.IsSameObject = IsSameObject
-        ..ref.NewLocalRef = NewLocalRef
-        ..ref.EnsureLocalCapacity = EnsureLocalCapacity
-        ..ref.AllocObject = AllocObject
-        ..ref.NewObject = NewObject
-        ..ref.NewObjectV = NewObjectV
-        ..ref.NewObjectA = NewObjectA
-        ..ref.GetObjectClass = GetObjectClass
-        ..ref.IsInstanceOf = IsInstanceOf
-        ..ref.GetMethodID = GetMethodID
-        ..ref.CallObjectMethod = CallObjectMethod
-        ..ref.CallObjectMethodV = CallObjectMethodV
-        ..ref.CallObjectMethodA = CallObjectMethodA
-        ..ref.CallBooleanMethod = CallBooleanMethod
-        ..ref.CallBooleanMethodV = CallBooleanMethodV
-        ..ref.CallBooleanMethodA = CallBooleanMethodA
-        ..ref.CallByteMethod = CallByteMethod
-        ..ref.CallByteMethodV = CallByteMethodV
-        ..ref.CallByteMethodA = CallByteMethodA
-        ..ref.CallCharMethod = CallCharMethod
-        ..ref.CallCharMethodV = CallCharMethodV
-        ..ref.CallCharMethodA = CallCharMethodA
-        ..ref.CallShortMethod = CallShortMethod
-        ..ref.CallShortMethodV = CallShortMethodV
-        ..ref.CallShortMethodA = CallShortMethodA
-        ..ref.CallIntMethod = CallIntMethod
-        ..ref.CallIntMethodV = CallIntMethodV
-        ..ref.CallIntMethodA = CallIntMethodA
-        ..ref.CallLongMethod = CallLongMethod
-        ..ref.CallLongMethodV = CallLongMethodV
-        ..ref.CallLongMethodA = CallLongMethodA
-        ..ref.CallFloatMethod = CallFloatMethod
-        ..ref.CallFloatMethodV = CallFloatMethodV
-        ..ref.CallFloatMethodA = CallFloatMethodA
-        ..ref.CallDoubleMethod = CallDoubleMethod
-        ..ref.CallDoubleMethodV = CallDoubleMethodV
-        ..ref.CallDoubleMethodA = CallDoubleMethodA
-        ..ref.CallVoidMethod = CallVoidMethod
-        ..ref.CallVoidMethodV = CallVoidMethodV
-        ..ref.CallVoidMethodA = CallVoidMethodA
-        ..ref.CallNonvirtualObjectMethod = CallNonvirtualObjectMethod
-        ..ref.CallNonvirtualObjectMethodV = CallNonvirtualObjectMethodV
-        ..ref.CallNonvirtualObjectMethodA = CallNonvirtualObjectMethodA
-        ..ref.CallNonvirtualBooleanMethod = CallNonvirtualBooleanMethod
-        ..ref.CallNonvirtualBooleanMethodV = CallNonvirtualBooleanMethodV
-        ..ref.CallNonvirtualBooleanMethodA = CallNonvirtualBooleanMethodA
-        ..ref.CallNonvirtualByteMethod = CallNonvirtualByteMethod
-        ..ref.CallNonvirtualByteMethodV = CallNonvirtualByteMethodV
-        ..ref.CallNonvirtualByteMethodA = CallNonvirtualByteMethodA
-        ..ref.CallNonvirtualCharMethod = CallNonvirtualCharMethod
-        ..ref.CallNonvirtualCharMethodV = CallNonvirtualCharMethodV
-        ..ref.CallNonvirtualCharMethodA = CallNonvirtualCharMethodA
-        ..ref.CallNonvirtualShortMethod = CallNonvirtualShortMethod
-        ..ref.CallNonvirtualShortMethodV = CallNonvirtualShortMethodV
-        ..ref.CallNonvirtualShortMethodA = CallNonvirtualShortMethodA
-        ..ref.CallNonvirtualIntMethod = CallNonvirtualIntMethod
-        ..ref.CallNonvirtualIntMethodV = CallNonvirtualIntMethodV
-        ..ref.CallNonvirtualIntMethodA = CallNonvirtualIntMethodA
-        ..ref.CallNonvirtualLongMethod = CallNonvirtualLongMethod
-        ..ref.CallNonvirtualLongMethodV = CallNonvirtualLongMethodV
-        ..ref.CallNonvirtualLongMethodA = CallNonvirtualLongMethodA
-        ..ref.CallNonvirtualFloatMethod = CallNonvirtualFloatMethod
-        ..ref.CallNonvirtualFloatMethodV = CallNonvirtualFloatMethodV
-        ..ref.CallNonvirtualFloatMethodA = CallNonvirtualFloatMethodA
-        ..ref.CallNonvirtualDoubleMethod = CallNonvirtualDoubleMethod
-        ..ref.CallNonvirtualDoubleMethodV = CallNonvirtualDoubleMethodV
-        ..ref.CallNonvirtualDoubleMethodA = CallNonvirtualDoubleMethodA
-        ..ref.CallNonvirtualVoidMethod = CallNonvirtualVoidMethod
-        ..ref.CallNonvirtualVoidMethodV = CallNonvirtualVoidMethodV
-        ..ref.CallNonvirtualVoidMethodA = CallNonvirtualVoidMethodA
-        ..ref.GetFieldID = GetFieldID
-        ..ref.GetObjectField = GetObjectField
-        ..ref.GetBooleanField = GetBooleanField
-        ..ref.GetByteField = GetByteField
-        ..ref.GetCharField = GetCharField
-        ..ref.GetShortField = GetShortField
-        ..ref.GetIntField = GetIntField
-        ..ref.GetLongField = GetLongField
-        ..ref.GetFloatField = GetFloatField
-        ..ref.GetDoubleField = GetDoubleField
-        ..ref.SetObjectField = SetObjectField
-        ..ref.SetBooleanField = SetBooleanField
-        ..ref.SetByteField = SetByteField
-        ..ref.SetCharField = SetCharField
-        ..ref.SetShortField = SetShortField
-        ..ref.SetIntField = SetIntField
-        ..ref.SetLongField = SetLongField
-        ..ref.SetFloatField = SetFloatField
-        ..ref.SetDoubleField = SetDoubleField
-        ..ref.GetStaticMethodID = GetStaticMethodID
-        ..ref.CallStaticObjectMethod = CallStaticObjectMethod
-        ..ref.CallStaticObjectMethodV = CallStaticObjectMethodV
-        ..ref.CallStaticObjectMethodA = CallStaticObjectMethodA
-        ..ref.CallStaticBooleanMethod = CallStaticBooleanMethod
-        ..ref.CallStaticBooleanMethodV = CallStaticBooleanMethodV
-        ..ref.CallStaticBooleanMethodA = CallStaticBooleanMethodA
-        ..ref.CallStaticByteMethod = CallStaticByteMethod
-        ..ref.CallStaticByteMethodV = CallStaticByteMethodV
-        ..ref.CallStaticByteMethodA = CallStaticByteMethodA
-        ..ref.CallStaticCharMethod = CallStaticCharMethod
-        ..ref.CallStaticCharMethodV = CallStaticCharMethodV
-        ..ref.CallStaticCharMethodA = CallStaticCharMethodA
-        ..ref.CallStaticShortMethod = CallStaticShortMethod
-        ..ref.CallStaticShortMethodV = CallStaticShortMethodV
-        ..ref.CallStaticShortMethodA = CallStaticShortMethodA
-        ..ref.CallStaticIntMethod = CallStaticIntMethod
-        ..ref.CallStaticIntMethodV = CallStaticIntMethodV
-        ..ref.CallStaticIntMethodA = CallStaticIntMethodA
-        ..ref.CallStaticLongMethod = CallStaticLongMethod
-        ..ref.CallStaticLongMethodV = CallStaticLongMethodV
-        ..ref.CallStaticLongMethodA = CallStaticLongMethodA
-        ..ref.CallStaticFloatMethod = CallStaticFloatMethod
-        ..ref.CallStaticFloatMethodV = CallStaticFloatMethodV
-        ..ref.CallStaticFloatMethodA = CallStaticFloatMethodA
-        ..ref.CallStaticDoubleMethod = CallStaticDoubleMethod
-        ..ref.CallStaticDoubleMethodV = CallStaticDoubleMethodV
-        ..ref.CallStaticDoubleMethodA = CallStaticDoubleMethodA
-        ..ref.CallStaticVoidMethod = CallStaticVoidMethod
-        ..ref.CallStaticVoidMethodV = CallStaticVoidMethodV
-        ..ref.CallStaticVoidMethodA = CallStaticVoidMethodA
-        ..ref.GetStaticFieldID = GetStaticFieldID
-        ..ref.GetStaticObjectField = GetStaticObjectField
-        ..ref.GetStaticBooleanField = GetStaticBooleanField
-        ..ref.GetStaticByteField = GetStaticByteField
-        ..ref.GetStaticCharField = GetStaticCharField
-        ..ref.GetStaticShortField = GetStaticShortField
-        ..ref.GetStaticIntField = GetStaticIntField
-        ..ref.GetStaticLongField = GetStaticLongField
-        ..ref.GetStaticFloatField = GetStaticFloatField
-        ..ref.GetStaticDoubleField = GetStaticDoubleField
-        ..ref.SetStaticObjectField = SetStaticObjectField
-        ..ref.SetStaticBooleanField = SetStaticBooleanField
-        ..ref.SetStaticByteField = SetStaticByteField
-        ..ref.SetStaticCharField = SetStaticCharField
-        ..ref.SetStaticShortField = SetStaticShortField
-        ..ref.SetStaticIntField = SetStaticIntField
-        ..ref.SetStaticLongField = SetStaticLongField
-        ..ref.SetStaticFloatField = SetStaticFloatField
-        ..ref.SetStaticDoubleField = SetStaticDoubleField
-        ..ref.NewString = NewString
-        ..ref.GetStringLength = GetStringLength
-        ..ref.GetStringChars = GetStringChars
-        ..ref.ReleaseStringChars = ReleaseStringChars
-        ..ref.NewStringUTF = NewStringUTF
-        ..ref.GetStringUTFLength = GetStringUTFLength
-        ..ref.GetStringUTFChars = GetStringUTFChars
-        ..ref.ReleaseStringUTFChars = ReleaseStringUTFChars
-        ..ref.GetArrayLength = GetArrayLength
-        ..ref.NewObjectArray = NewObjectArray
-        ..ref.GetObjectArrayElement = GetObjectArrayElement
-        ..ref.SetObjectArrayElement = SetObjectArrayElement
-        ..ref.NewBooleanArray = NewBooleanArray
-        ..ref.NewByteArray = NewByteArray
-        ..ref.NewCharArray = NewCharArray
-        ..ref.NewShortArray = NewShortArray
-        ..ref.NewIntArray = NewIntArray
-        ..ref.NewLongArray = NewLongArray
-        ..ref.NewFloatArray = NewFloatArray
-        ..ref.NewDoubleArray = NewDoubleArray
-        ..ref.GetBooleanArrayElements = GetBooleanArrayElements
-        ..ref.GetByteArrayElements = GetByteArrayElements
-        ..ref.GetCharArrayElements = GetCharArrayElements
-        ..ref.GetShortArrayElements = GetShortArrayElements
-        ..ref.GetIntArrayElements = GetIntArrayElements
-        ..ref.GetLongArrayElements = GetLongArrayElements
-        ..ref.GetFloatArrayElements = GetFloatArrayElements
-        ..ref.GetDoubleArrayElements = GetDoubleArrayElements
-        ..ref.ReleaseBooleanArrayElements = ReleaseBooleanArrayElements
-        ..ref.ReleaseByteArrayElements = ReleaseByteArrayElements
-        ..ref.ReleaseCharArrayElements = ReleaseCharArrayElements
-        ..ref.ReleaseShortArrayElements = ReleaseShortArrayElements
-        ..ref.ReleaseIntArrayElements = ReleaseIntArrayElements
-        ..ref.ReleaseLongArrayElements = ReleaseLongArrayElements
-        ..ref.ReleaseFloatArrayElements = ReleaseFloatArrayElements
-        ..ref.ReleaseDoubleArrayElements = ReleaseDoubleArrayElements
-        ..ref.GetBooleanArrayRegion = GetBooleanArrayRegion
-        ..ref.GetByteArrayRegion = GetByteArrayRegion
-        ..ref.GetCharArrayRegion = GetCharArrayRegion
-        ..ref.GetShortArrayRegion = GetShortArrayRegion
-        ..ref.GetIntArrayRegion = GetIntArrayRegion
-        ..ref.GetLongArrayRegion = GetLongArrayRegion
-        ..ref.GetFloatArrayRegion = GetFloatArrayRegion
-        ..ref.GetDoubleArrayRegion = GetDoubleArrayRegion
-        ..ref.SetBooleanArrayRegion = SetBooleanArrayRegion
-        ..ref.SetByteArrayRegion = SetByteArrayRegion
-        ..ref.SetCharArrayRegion = SetCharArrayRegion
-        ..ref.SetShortArrayRegion = SetShortArrayRegion
-        ..ref.SetIntArrayRegion = SetIntArrayRegion
-        ..ref.SetLongArrayRegion = SetLongArrayRegion
-        ..ref.SetFloatArrayRegion = SetFloatArrayRegion
-        ..ref.SetDoubleArrayRegion = SetDoubleArrayRegion
-        ..ref.RegisterNatives = RegisterNatives
-        ..ref.UnregisterNatives = UnregisterNatives
-        ..ref.MonitorEnter = MonitorEnter
-        ..ref.MonitorExit = MonitorExit
-        ..ref.GetJavaVM = GetJavaVM
-        ..ref.GetStringRegion = GetStringRegion
-        ..ref.GetStringUTFRegion = GetStringUTFRegion
-        ..ref.GetPrimitiveArrayCritical = GetPrimitiveArrayCritical
-        ..ref.ReleasePrimitiveArrayCritical = ReleasePrimitiveArrayCritical
-        ..ref.GetStringCritical = GetStringCritical
-        ..ref.ReleaseStringCritical = ReleaseStringCritical
-        ..ref.NewWeakGlobalRef = NewWeakGlobalRef
-        ..ref.DeleteWeakGlobalRef = DeleteWeakGlobalRef
-        ..ref.ExceptionCheck = ExceptionCheck
-        ..ref.NewDirectByteBuffer = NewDirectByteBuffer
-        ..ref.GetDirectBufferAddress = GetDirectBufferAddress
-        ..ref.GetDirectBufferCapacity = GetDirectBufferCapacity
-        ..ref.GetObjectRefType = GetObjectRefType;
-}
+final class JNINativeInterface extends ffi.Opaque {}
 
 final class JNINativeMethod extends ffi.Struct {
   external ffi.Pointer<ffi.Char> name;
@@ -6108,111 +3033,19 @@
 }
 
 typedef MutexLock = pthread_mutex_t;
+typedef __darwin_pthread_cond_t = _opaque_pthread_cond_t;
+typedef __darwin_pthread_key_t = ffi.UnsignedLong;
+typedef Dart__darwin_pthread_key_t = int;
+typedef __darwin_pthread_mutex_t = _opaque_pthread_mutex_t;
 
-final class UnnamedStruct extends ffi.Struct {
-  @ffi.UnsignedInt()
-  external int __low;
+final class _opaque_pthread_cond_t extends ffi.Opaque {}
 
-  @ffi.UnsignedInt()
-  external int __high;
-
-  static ffi.Pointer<UnnamedStruct> $allocate(
-    ffi.Allocator $allocator, {
-    required int $low,
-    required int $high,
-  }) =>
-      $allocator<UnnamedStruct>()
-        ..ref.__low = $low
-        ..ref.__high = $high;
-}
-
-final class __atomic_wide_counter extends ffi.Union {
-  @ffi.UnsignedLongLong()
-  external int __value64;
-
-  external UnnamedStruct __value32;
-}
-
-final class __pthread_cond_s extends ffi.Struct {
-  external __atomic_wide_counter __wseq;
-
-  external __atomic_wide_counter __g1_start;
-
-  @ffi.Array.multi([2])
-  external ffi.Array<ffi.UnsignedInt> __g_size;
-
-  @ffi.UnsignedInt()
-  external int __g1_orig_size;
-
-  @ffi.UnsignedInt()
-  external int __wrefs;
-
-  @ffi.Array.multi([2])
-  external ffi.Array<ffi.UnsignedInt> __g_signals;
-
-  @ffi.UnsignedInt()
-  external int __unused_initialized_1;
-
-  @ffi.UnsignedInt()
-  external int __unused_initialized_2;
-}
-
-final class __pthread_internal_list extends ffi.Struct {
-  external ffi.Pointer<__pthread_internal_list> __prev;
-
-  external ffi.Pointer<__pthread_internal_list> __next;
-}
-
-typedef __pthread_list_t = __pthread_internal_list;
-
-final class __pthread_mutex_s extends ffi.Struct {
-  @ffi.Int()
-  external int __lock;
-
-  @ffi.UnsignedInt()
-  external int __count;
-
-  @ffi.Int()
-  external int __owner;
-
-  @ffi.UnsignedInt()
-  external int __nusers;
-
-  @ffi.Int()
-  external int __kind;
-
-  @ffi.Short()
-  external int __spins;
-
-  @ffi.Short()
-  external int __elision;
-
-  external __pthread_list_t __list;
-}
+final class _opaque_pthread_mutex_t extends ffi.Opaque {}
 
 final class jfieldID_ extends ffi.Opaque {}
 
 final class jmethodID_ extends ffi.Opaque {}
 
-final class pthread_cond_t extends ffi.Union {
-  external __pthread_cond_s __data;
-
-  @ffi.Array.multi([48])
-  external ffi.Array<ffi.Char> __size;
-
-  @ffi.LongLong()
-  external int __align;
-}
-
-typedef pthread_key_t = ffi.UnsignedInt;
-typedef Dartpthread_key_t = int;
-
-final class pthread_mutex_t extends ffi.Union {
-  external __pthread_mutex_s __data;
-
-  @ffi.Array.multi([40])
-  external ffi.Array<ffi.Char> __size;
-
-  @ffi.Long()
-  external int __align;
-}
+typedef pthread_cond_t = __darwin_pthread_cond_t;
+typedef pthread_key_t = __darwin_pthread_key_t;
+typedef pthread_mutex_t = __darwin_pthread_mutex_t;
diff --git a/pkgs/jni/pubspec.yaml b/pkgs/jni/pubspec.yaml
index 7f21288..b4043a0 100644
--- a/pkgs/jni/pubspec.yaml
+++ b/pkgs/jni/pubspec.yaml
@@ -4,7 +4,7 @@
 
 name: jni
 description: A library to access JNI from Dart and Flutter that acts as a support library for package:jnigen.
-version: 1.0.1-wip
+version: 1.0.1
 repository: https://github.com/dart-lang/native/tree/main/pkgs/jni
 issue_tracker: https://github.com/dart-lang/native/issues?q=is%3Aissue+is%3Aopen+label%3Apackage%3Ajni
 
@@ -23,7 +23,7 @@
   args: ^2.5.0
   collection: ^1.19.1
   ffi: ^2.1.3
-  jni_util: ^0.1.0
+  jni_util: ^1.0.0
   meta: ^1.15.0
   package_config: '>=2.1.0 <4.0.0'
   path: ^1.9.0
diff --git a/pkgs/jni_util/CHANGELOG.md b/pkgs/jni_util/CHANGELOG.md
index f214d15..c173fad 100644
--- a/pkgs/jni_util/CHANGELOG.md
+++ b/pkgs/jni_util/CHANGELOG.md
@@ -1,3 +1,3 @@
-## 1.0.0-wip
+## 1.0.0
 
 - Initial version containing shared JDK detection utilities.
diff --git a/pkgs/jni_util/pubspec.yaml b/pkgs/jni_util/pubspec.yaml
index db96c79..eca06cc 100644
--- a/pkgs/jni_util/pubspec.yaml
+++ b/pkgs/jni_util/pubspec.yaml
@@ -4,7 +4,7 @@
 
 name: jni_util
 description: Shared utility functions for package:jni and package:jnigen.
-version: 1.0.0-wip
+version: 1.0.0
 repository: https://github.com/dart-lang/native/tree/main/pkgs/jni_util
 issue_tracker: https://github.com/dart-lang/native/issues?q=is%3Aissue+is%3Aopen+label%3Apackage%3Ajni_util
 
diff --git a/pkgs/jnigen/CHANGELOG.md b/pkgs/jnigen/CHANGELOG.md
index 09ff86b..2bd0824 100644
--- a/pkgs/jnigen/CHANGELOG.md
+++ b/pkgs/jnigen/CHANGELOG.md
@@ -1,4 +1,4 @@
-## 0.17.0-wip
+## 0.17.0
 
 - Update kotlin-metadata-jvm, allowing JNIgen to run on newer packages.
 - Fixed incorrect code generation for generic constructors in generic classes.
diff --git a/pkgs/jnigen/pubspec.yaml b/pkgs/jnigen/pubspec.yaml
index 68312cc..d730c33 100644
--- a/pkgs/jnigen/pubspec.yaml
+++ b/pkgs/jnigen/pubspec.yaml
@@ -5,7 +5,7 @@
 name: jnigen
 description: A Dart bindings generator for Java and Kotlin that uses JNI under the hood to interop with Java virtual machine.
 # Keep in sync with `version` in `dart_generator.dart`.
-version: 0.17.0-wip
+version: 0.17.0
 repository: https://github.com/dart-lang/native/tree/main/pkgs/jnigen
 issue_tracker: https://github.com/dart-lang/native/issues?q=is%3Aissue+is%3Aopen+label%3Apackage%3Ajnigen
 
@@ -23,7 +23,7 @@
   args: ^2.5.0
   cli_config: '>=0.1.0 <0.3.0'
   http: ^1.3.0
-  jni_util: ^0.1.0
+  jni_util: ^1.0.0
   json_annotation: ^4.9.0
   logging: ^1.2.0
   meta: ^1.15.0
diff --git a/pkgs/objective_c/CHANGELOG.md b/pkgs/objective_c/CHANGELOG.md
index 769a9ee..9c8c9c3 100644
--- a/pkgs/objective_c/CHANGELOG.md
+++ b/pkgs/objective_c/CHANGELOG.md
@@ -1,6 +1,9 @@
-## 9.5.0-wip
+## 9.5.0
 
 - Add internal utils required to support FFIgen's new port based blocks.
+- Make an internal-only FFI struct, `DOBJC_Context`, opaque. This is
+  technically a breaking change, but it's extremely unlikely that any users are
+  using these internal structs (and doing so would be a mistake).
 
 ## 9.4.1
 
diff --git a/pkgs/objective_c/ffigen_c.yaml b/pkgs/objective_c/ffigen_c.yaml
index afa1ab0..b540eb6 100644
--- a/pkgs/objective_c/ffigen_c.yaml
+++ b/pkgs/objective_c/ffigen_c.yaml
@@ -33,8 +33,11 @@
   include:
     - 'Dart_FinalizableHandle'
 structs:
+  dependency-only: opaque
   include:
-    - '_DOBJC_Context'
+    - '_ObjCBlockImpl'
+    - '_ObjCBlockDesc'
+    - '_Version'
   rename:
     '_ObjC(.*)': 'ObjC$1'
     '_Dart_FinalizableHandle': 'Dart_FinalizableHandle_'
diff --git a/pkgs/objective_c/lib/src/c_bindings_generated.dart b/pkgs/objective_c/lib/src/c_bindings_generated.dart
index 16ec280..e0e5763 100644
--- a/pkgs/objective_c/lib/src/c_bindings_generated.dart
+++ b/pkgs/objective_c/lib/src/c_bindings_generated.dart
@@ -27,6 +27,12 @@
 )
 external void awaitWaiter(ffi.Pointer<ffi.Void> waiter);
 
+@ffi.Native<ffi.Pointer<DOBJC_Context> Function()>(
+  symbol: 'DOBJC_createContext',
+  isLeaf: true,
+)
+external ffi.Pointer<DOBJC_Context> createContext();
+
 @ffi.Native<ffi.Void Function(Dart_FinalizableHandle, ffi.Handle)>(
   symbol: 'DOBJC_deleteFinalizableHandle',
 )
@@ -40,14 +46,6 @@
 )
 external void disposeObjCBlockWithClosure(ffi.Pointer<ObjCBlockImpl> block);
 
-@ffi.Native<ffi.Pointer<DOBJC_Context> Function(ffi.Pointer<DOBJC_Context>)>(
-  symbol: 'DOBJC_fillContext',
-  isLeaf: true,
-)
-external ffi.Pointer<DOBJC_Context> fillContext(
-  ffi.Pointer<DOBJC_Context> context,
-);
-
 /// Returns the MacOS/iOS version we're running on.
 @ffi.Native<_Version Function()>(symbol: 'DOBJC_getOsVesion', isLeaf: true)
 external _Version getOsVesion();
@@ -114,95 +112,7 @@
 )
 external void signalWaiter(ffi.Pointer<ffi.Void> waiter);
 
-final class DOBJC_Context extends ffi.Struct {
-  @ffi.Int64()
-  external int version;
-
-  external ffi.Pointer<ffi.NativeFunction<ffi.Pointer<ffi.Void> Function()>>
-  newWaiter$1;
-
-  external ffi.Pointer<
-    ffi.NativeFunction<ffi.Void Function(ffi.Pointer<ffi.Void>)>
-  >
-  awaitWaiter$1;
-
-  external ffi.Pointer<
-    ffi.NativeFunction<ffi.Pointer<_Dart_Isolate> Function()>
-  >
-  currentIsolate;
-
-  external ffi.Pointer<
-    ffi.NativeFunction<ffi.Void Function(ffi.Pointer<_Dart_Isolate>)>
-  >
-  enterIsolate;
-
-  external ffi.Pointer<ffi.NativeFunction<ffi.Void Function()>> exitIsolate;
-
-  external ffi.Pointer<ffi.NativeFunction<ffi.Int64 Function()>> getMainPortId;
-
-  external ffi.Pointer<ffi.NativeFunction<ffi.Bool Function(ffi.Int64)>>
-  getCurrentThreadOwnsIsolate;
-
-  external ffi.Pointer<
-    ffi.NativeFunction<ffi.Void Function(ffi.Int64, ffi.Pointer<ffi.Void>)>
-  >
-  invokeListenerPortBlock$1;
-
-  external ffi.Pointer<
-    ffi.NativeFunction<
-      ffi.Void Function(ffi.Int64, ffi.Pointer<ffi.Void>, ffi.Pointer<ffi.Void>)
-    >
-  >
-  invokeBlockingPortBlock$1;
-
-  static ffi.Pointer<DOBJC_Context> $allocate(
-    ffi.Allocator $allocator, {
-    required int version,
-    required ffi.Pointer<ffi.NativeFunction<ffi.Pointer<ffi.Void> Function()>>
-    newWaiter$1,
-    required ffi.Pointer<
-      ffi.NativeFunction<ffi.Void Function(ffi.Pointer<ffi.Void>)>
-    >
-    awaitWaiter$1,
-    required ffi.Pointer<
-      ffi.NativeFunction<ffi.Pointer<_Dart_Isolate> Function()>
-    >
-    currentIsolate,
-    required ffi.Pointer<
-      ffi.NativeFunction<ffi.Void Function(ffi.Pointer<_Dart_Isolate>)>
-    >
-    enterIsolate,
-    required ffi.Pointer<ffi.NativeFunction<ffi.Void Function()>> exitIsolate,
-    required ffi.Pointer<ffi.NativeFunction<ffi.Int64 Function()>>
-    getMainPortId,
-    required ffi.Pointer<ffi.NativeFunction<ffi.Bool Function(ffi.Int64)>>
-    getCurrentThreadOwnsIsolate,
-    required ffi.Pointer<
-      ffi.NativeFunction<ffi.Void Function(ffi.Int64, ffi.Pointer<ffi.Void>)>
-    >
-    invokeListenerPortBlock$1,
-    required ffi.Pointer<
-      ffi.NativeFunction<
-        ffi.Void Function(
-          ffi.Int64,
-          ffi.Pointer<ffi.Void>,
-          ffi.Pointer<ffi.Void>,
-        )
-      >
-    >
-    invokeBlockingPortBlock$1,
-  }) => $allocator<DOBJC_Context>()
-    ..ref.version = version
-    ..ref.newWaiter$1 = newWaiter$1
-    ..ref.awaitWaiter$1 = awaitWaiter$1
-    ..ref.currentIsolate = currentIsolate
-    ..ref.enterIsolate = enterIsolate
-    ..ref.exitIsolate = exitIsolate
-    ..ref.getMainPortId = getMainPortId
-    ..ref.getCurrentThreadOwnsIsolate = getCurrentThreadOwnsIsolate
-    ..ref.invokeListenerPortBlock$1 = invokeListenerPortBlock$1
-    ..ref.invokeBlockingPortBlock$1 = invokeBlockingPortBlock$1;
-}
+final class DOBJC_Context extends ffi.Opaque {}
 
 typedef Dart_FinalizableHandle = ffi.Pointer<Dart_FinalizableHandle_>;
 
@@ -293,8 +203,6 @@
 
 final class ObjCObjectImpl extends ffi.Opaque {}
 
-final class _Dart_Isolate extends ffi.Opaque {}
-
 final class _Version extends ffi.Struct {
   @ffi.Int()
   external int major;
diff --git a/pkgs/objective_c/lib/src/internal.dart b/pkgs/objective_c/lib/src/internal.dart
index c3af27f..aa2381c 100644
--- a/pkgs/objective_c/lib/src/internal.dart
+++ b/pkgs/objective_c/lib/src/internal.dart
@@ -580,7 +580,7 @@
 }
 
 /// Only for use by FFIgen bindings.
-final ContextPtr objCContext = c.fillContext(calloc<c.DOBJC_Context>());
+final ContextPtr objCContext = c.createContext();
 
 // Not exported by ../objective_c.dart, because they're only for testing.
 bool blockHasRegisteredClosure(BlockPtr block) =>
diff --git a/pkgs/objective_c/pubspec.yaml b/pkgs/objective_c/pubspec.yaml
index 5393ca9..6d4ff3c 100644
--- a/pkgs/objective_c/pubspec.yaml
+++ b/pkgs/objective_c/pubspec.yaml
@@ -3,7 +3,7 @@
 # BSD-style license that can be found in the LICENSE file.
 name: objective_c
 description: 'A library to access Objective C from Flutter that acts as a support library for package:ffigen.'
-version: 9.5.0-wip
+version: 9.5.0
 repository: https://github.com/dart-lang/native/tree/main/pkgs/objective_c
 issue_tracker: https://github.com/dart-lang/native/issues?q=is%3Aissue+is%3Aopen+label%3Apackage%3Aobjective_c
 
diff --git a/pkgs/objective_c/src/objective_c.c b/pkgs/objective_c/src/objective_c.c
index f8b8b0d..a239c2c 100644
--- a/pkgs/objective_c/src/objective_c.c
+++ b/pkgs/objective_c/src/objective_c.c
@@ -50,7 +50,8 @@
   return pointer;
 }
 
-FFI_EXPORT DOBJC_Context* DOBJC_fillContext(DOBJC_Context* context) {
+FFI_EXPORT DOBJC_Context* DOBJC_createContext(void) {
+  DOBJC_Context* context = (DOBJC_Context*)malloc(sizeof(DOBJC_Context));
   context->version = 2;
   context->newWaiter = DOBJC_newWaiter;
   context->awaitWaiter = DOBJC_awaitWaiter;
diff --git a/pkgs/objective_c/src/objective_c.h b/pkgs/objective_c/src/objective_c.h
index 46f808a..729d98a 100644
--- a/pkgs/objective_c/src/objective_c.h
+++ b/pkgs/objective_c/src/objective_c.h
@@ -87,6 +87,6 @@
   void (*invokeListenerPortBlock)(int64_t port, void*);
   void (*invokeBlockingPortBlock)(int64_t port, void*, void*);
 } DOBJC_Context;
-FFI_EXPORT DOBJC_Context* DOBJC_fillContext(DOBJC_Context* context);
+FFI_EXPORT DOBJC_Context* DOBJC_createContext(void);
 
 #endif  // OBJECTIVE_C_SRC_OBJECTIVE_C_H_
diff --git a/pkgs/objective_c/test/generate_code_test.dart b/pkgs/objective_c/test/generate_code_test.dart
index 34bf0f8..ba816c0 100644
--- a/pkgs/objective_c/test/generate_code_test.dart
+++ b/pkgs/objective_c/test/generate_code_test.dart
@@ -33,7 +33,7 @@
       final cBindings = File(
         'lib/src/c_bindings_generated.dart',
       ).readAsStringSync();
-      expect(cBindings, contains('fillContext'));
+      expect(cBindings, contains('createContext'));
       expect(cBindings, contains('DOBJC_Context'));
       expect(cBindings, contains('Dart_FinalizableHandle'));
       expect(cBindings, contains('ILLEGAL_PORT'));
diff --git a/pkgs/swiftgen/CHANGELOG.md b/pkgs/swiftgen/CHANGELOG.md
index b9538e7..1a13532 100644
--- a/pkgs/swiftgen/CHANGELOG.md
+++ b/pkgs/swiftgen/CHANGELOG.md
@@ -1,4 +1,4 @@
-## 0.1.3-wip
+## 0.1.3
 
 - Bump ffigen, objective_c, and swift2objc versions.
 - Fix omitted delegation of `target` property from `SwiftGenerator` to `Swift2ObjCGenerator`.
diff --git a/pkgs/swiftgen/pubspec.yaml b/pkgs/swiftgen/pubspec.yaml
index 7e8891e..bd2b334 100644
--- a/pkgs/swiftgen/pubspec.yaml
+++ b/pkgs/swiftgen/pubspec.yaml
@@ -4,7 +4,7 @@
 
 name: swiftgen
 description: 'A tool for generating bindings that allow interop between Dart and Swift code.'
-version: 0.1.3-wip
+version: 0.1.3
 repository: https://github.com/dart-lang/native/tree/main/pkgs/swiftgen
 issue_tracker: https://github.com/dart-lang/native/issues?q=is%3Aissue+is%3Aopen+label%3Apackage%3Aswiftgen
 
@@ -21,7 +21,7 @@
   ffi: ^2.1.0
   ffigen: ^21.0.0
   logging: ^1.3.0
-  objective_c: ^9.4.1
+  objective_c: ^9.5.0
   package_config: '>=2.2.0 <4.0.0'
   path: ^1.9.1
   swift2objc: ^0.2.0