Skip to main content

jni_sys/
lib.rs

1#![doc(html_root_url = "https://docs.rs/jni-sys/0.3.0")]
2#![allow(non_snake_case, non_camel_case_types)]
3#![warn(rust_2018_idioms)]
4
5use std::os::raw::c_char;
6use std::os::raw::c_void;
7
8// FIXME is this sufficiently correct?
9pub type va_list = *mut c_void;
10
11pub type jint = i32;
12pub type jlong = i64;
13pub type jbyte = i8;
14pub type jboolean = u8;
15pub type jchar = u16;
16pub type jshort = i16;
17pub type jfloat = f32;
18pub type jdouble = f64;
19pub type jsize = jint;
20
21pub type _jobject = jni_sys_04::_jobject;
22pub type jobject = *mut _jobject;
23pub type jclass = jobject;
24pub type jthrowable = jobject;
25pub type jstring = jobject;
26pub type jarray = jobject;
27pub type jbooleanArray = jarray;
28pub type jbyteArray = jarray;
29pub type jcharArray = jarray;
30pub type jshortArray = jarray;
31pub type jintArray = jarray;
32pub type jlongArray = jarray;
33pub type jfloatArray = jarray;
34pub type jdoubleArray = jarray;
35pub type jobjectArray = jarray;
36pub type jweak = jobject;
37
38// Note: we can't use the semver trick to re-export jni_sys::jvalue because
39// the type for `z: jboolean` has changed from `u8` to `bool` in jni-sys 0.4
40#[repr(C)]
41#[derive(Copy)]
42pub union jvalue {
43    pub z: jboolean,
44    pub b: jbyte,
45    pub c: jchar,
46    pub s: jshort,
47    pub i: jint,
48    pub j: jlong,
49    pub f: jfloat,
50    pub d: jdouble,
51    pub l: jobject,
52}
53
54impl Clone for jvalue {
55    fn clone(&self) -> Self {
56        *self
57    }
58}
59
60pub type _jfieldID = jni_sys_04::_jfieldID;
61pub type jfieldID = *mut _jfieldID;
62pub type _jmethodID = jni_sys_04::_jmethodID;
63pub type jmethodID = *mut _jmethodID;
64
65pub use jni_sys_04::jobjectRefType;
66
67pub const JNI_FALSE: jboolean = 0;
68pub const JNI_TRUE: jboolean = 1;
69
70pub const JNI_OK: jint = 0;
71pub const JNI_ERR: jint = -1;
72pub const JNI_EDETACHED: jint = -2;
73pub const JNI_EVERSION: jint = -3;
74pub const JNI_ENOMEM: jint = -4;
75pub const JNI_EEXIST: jint = -5;
76pub const JNI_EINVAL: jint = -6;
77
78pub const JNI_COMMIT: jint = 1;
79pub const JNI_ABORT: jint = 2;
80
81pub const JNI_VERSION_1_1: jint = 0x00010001;
82pub const JNI_VERSION_1_2: jint = 0x00010002;
83pub const JNI_VERSION_1_4: jint = 0x00010004;
84pub const JNI_VERSION_1_6: jint = 0x00010006;
85pub const JNI_VERSION_1_8: jint = 0x00010008;
86pub const JNI_VERSION_9: jint = 0x00090000;
87pub const JNI_VERSION_10: jint = 0x000a0000;
88pub const JNI_VERSION_19: jint = 0x00130000;
89pub const JNI_VERSION_20: jint = 0x00140000;
90pub const JNI_VERSION_21: jint = 0x00150000;
91pub const JNI_VERSION_24: jint = 0x00180000;
92
93pub use jni_sys_04::JNINativeMethod;
94
95pub type JNIEnv = *const JNINativeInterface_;
96pub type JavaVM = *const JNIInvokeInterface_;
97
98#[repr(C)]
99#[derive(Copy)]
100pub struct JNINativeInterface_ {
101    pub reserved0: *mut c_void,
102    pub reserved1: *mut c_void,
103    pub reserved2: *mut c_void,
104    pub reserved3: *mut c_void,
105    pub GetVersion: Option<unsafe extern "system" fn(env: *mut JNIEnv) -> jint>,
106    pub DefineClass: Option<
107        unsafe extern "system" fn(
108            env: *mut JNIEnv,
109            name: *const c_char,
110            loader: jobject,
111            buf: *const jbyte,
112            len: jsize,
113        ) -> jclass,
114    >,
115    pub FindClass:
116        Option<unsafe extern "system" fn(env: *mut JNIEnv, name: *const c_char) -> jclass>,
117    pub FromReflectedMethod:
118        Option<unsafe extern "system" fn(env: *mut JNIEnv, method: jobject) -> jmethodID>,
119    pub FromReflectedField:
120        Option<unsafe extern "system" fn(env: *mut JNIEnv, field: jobject) -> jfieldID>,
121    pub ToReflectedMethod: Option<
122        unsafe extern "system" fn(
123            env: *mut JNIEnv,
124            cls: jclass,
125            methodID: jmethodID,
126            isStatic: jboolean,
127        ) -> jobject,
128    >,
129    pub GetSuperclass: Option<unsafe extern "system" fn(env: *mut JNIEnv, sub: jclass) -> jclass>,
130    pub IsAssignableFrom:
131        Option<unsafe extern "system" fn(env: *mut JNIEnv, sub: jclass, sup: jclass) -> jboolean>,
132    pub ToReflectedField: Option<
133        unsafe extern "system" fn(
134            env: *mut JNIEnv,
135            cls: jclass,
136            fieldID: jfieldID,
137            isStatic: jboolean,
138        ) -> jobject,
139    >,
140    pub Throw: Option<unsafe extern "system" fn(env: *mut JNIEnv, obj: jthrowable) -> jint>,
141    pub ThrowNew: Option<
142        unsafe extern "system" fn(env: *mut JNIEnv, clazz: jclass, msg: *const c_char) -> jint,
143    >,
144    pub ExceptionOccurred: Option<unsafe extern "system" fn(env: *mut JNIEnv) -> jthrowable>,
145    pub ExceptionDescribe: Option<unsafe extern "system" fn(env: *mut JNIEnv)>,
146    pub ExceptionClear: Option<unsafe extern "system" fn(env: *mut JNIEnv)>,
147    pub FatalError: Option<unsafe extern "system" fn(env: *mut JNIEnv, msg: *const c_char) -> !>,
148    pub PushLocalFrame: Option<unsafe extern "system" fn(env: *mut JNIEnv, capacity: jint) -> jint>,
149    pub PopLocalFrame:
150        Option<unsafe extern "system" fn(env: *mut JNIEnv, result: jobject) -> jobject>,
151    pub NewGlobalRef: Option<unsafe extern "system" fn(env: *mut JNIEnv, lobj: jobject) -> jobject>,
152    pub DeleteGlobalRef: Option<unsafe extern "system" fn(env: *mut JNIEnv, gref: jobject)>,
153    pub DeleteLocalRef: Option<unsafe extern "system" fn(env: *mut JNIEnv, obj: jobject)>,
154    pub IsSameObject: Option<
155        unsafe extern "system" fn(env: *mut JNIEnv, obj1: jobject, obj2: jobject) -> jboolean,
156    >,
157    pub NewLocalRef: Option<unsafe extern "system" fn(env: *mut JNIEnv, ref_: jobject) -> jobject>,
158    pub EnsureLocalCapacity:
159        Option<unsafe extern "system" fn(env: *mut JNIEnv, capacity: jint) -> jint>,
160    pub AllocObject: Option<unsafe extern "system" fn(env: *mut JNIEnv, clazz: jclass) -> jobject>,
161    pub NewObject: Option<
162        unsafe extern "C" fn(env: *mut JNIEnv, clazz: jclass, methodID: jmethodID, ...) -> jobject,
163    >,
164    pub NewObjectV: Option<
165        unsafe extern "system" fn(
166            env: *mut JNIEnv,
167            clazz: jclass,
168            methodID: jmethodID,
169            args: va_list,
170        ) -> jobject,
171    >,
172    pub NewObjectA: Option<
173        unsafe extern "system" fn(
174            env: *mut JNIEnv,
175            clazz: jclass,
176            methodID: jmethodID,
177            args: *const jvalue,
178        ) -> jobject,
179    >,
180    pub GetObjectClass: Option<unsafe extern "system" fn(env: *mut JNIEnv, obj: jobject) -> jclass>,
181    pub IsInstanceOf: Option<
182        unsafe extern "system" fn(env: *mut JNIEnv, obj: jobject, clazz: jclass) -> jboolean,
183    >,
184    pub GetMethodID: Option<
185        unsafe extern "system" fn(
186            env: *mut JNIEnv,
187            clazz: jclass,
188            name: *const c_char,
189            sig: *const c_char,
190        ) -> jmethodID,
191    >,
192    pub CallObjectMethod: Option<
193        unsafe extern "C" fn(env: *mut JNIEnv, obj: jobject, methodID: jmethodID, ...) -> jobject,
194    >,
195    pub CallObjectMethodV: Option<
196        unsafe extern "system" fn(
197            env: *mut JNIEnv,
198            obj: jobject,
199            methodID: jmethodID,
200            args: va_list,
201        ) -> jobject,
202    >,
203    pub CallObjectMethodA: Option<
204        unsafe extern "system" fn(
205            env: *mut JNIEnv,
206            obj: jobject,
207            methodID: jmethodID,
208            args: *const jvalue,
209        ) -> jobject,
210    >,
211    pub CallBooleanMethod: Option<
212        unsafe extern "C" fn(env: *mut JNIEnv, obj: jobject, methodID: jmethodID, ...) -> jboolean,
213    >,
214    pub CallBooleanMethodV: Option<
215        unsafe extern "system" fn(
216            env: *mut JNIEnv,
217            obj: jobject,
218            methodID: jmethodID,
219            args: va_list,
220        ) -> jboolean,
221    >,
222    pub CallBooleanMethodA: Option<
223        unsafe extern "system" fn(
224            env: *mut JNIEnv,
225            obj: jobject,
226            methodID: jmethodID,
227            args: *const jvalue,
228        ) -> jboolean,
229    >,
230    pub CallByteMethod: Option<
231        unsafe extern "C" fn(env: *mut JNIEnv, obj: jobject, methodID: jmethodID, ...) -> jbyte,
232    >,
233    pub CallByteMethodV: Option<
234        unsafe extern "system" fn(
235            env: *mut JNIEnv,
236            obj: jobject,
237            methodID: jmethodID,
238            args: va_list,
239        ) -> jbyte,
240    >,
241    pub CallByteMethodA: Option<
242        unsafe extern "system" fn(
243            env: *mut JNIEnv,
244            obj: jobject,
245            methodID: jmethodID,
246            args: *const jvalue,
247        ) -> jbyte,
248    >,
249    pub CallCharMethod: Option<
250        unsafe extern "C" fn(env: *mut JNIEnv, obj: jobject, methodID: jmethodID, ...) -> jchar,
251    >,
252    pub CallCharMethodV: Option<
253        unsafe extern "system" fn(
254            env: *mut JNIEnv,
255            obj: jobject,
256            methodID: jmethodID,
257            args: va_list,
258        ) -> jchar,
259    >,
260    pub CallCharMethodA: Option<
261        unsafe extern "system" fn(
262            env: *mut JNIEnv,
263            obj: jobject,
264            methodID: jmethodID,
265            args: *const jvalue,
266        ) -> jchar,
267    >,
268    pub CallShortMethod: Option<
269        unsafe extern "C" fn(env: *mut JNIEnv, obj: jobject, methodID: jmethodID, ...) -> jshort,
270    >,
271    pub CallShortMethodV: Option<
272        unsafe extern "system" fn(
273            env: *mut JNIEnv,
274            obj: jobject,
275            methodID: jmethodID,
276            args: va_list,
277        ) -> jshort,
278    >,
279    pub CallShortMethodA: Option<
280        unsafe extern "system" fn(
281            env: *mut JNIEnv,
282            obj: jobject,
283            methodID: jmethodID,
284            args: *const jvalue,
285        ) -> jshort,
286    >,
287    pub CallIntMethod: Option<
288        unsafe extern "C" fn(env: *mut JNIEnv, obj: jobject, methodID: jmethodID, ...) -> jint,
289    >,
290    pub CallIntMethodV: Option<
291        unsafe extern "system" fn(
292            env: *mut JNIEnv,
293            obj: jobject,
294            methodID: jmethodID,
295            args: va_list,
296        ) -> jint,
297    >,
298    pub CallIntMethodA: Option<
299        unsafe extern "system" fn(
300            env: *mut JNIEnv,
301            obj: jobject,
302            methodID: jmethodID,
303            args: *const jvalue,
304        ) -> jint,
305    >,
306    pub CallLongMethod: Option<
307        unsafe extern "C" fn(env: *mut JNIEnv, obj: jobject, methodID: jmethodID, ...) -> jlong,
308    >,
309    pub CallLongMethodV: Option<
310        unsafe extern "system" fn(
311            env: *mut JNIEnv,
312            obj: jobject,
313            methodID: jmethodID,
314            args: va_list,
315        ) -> jlong,
316    >,
317    pub CallLongMethodA: Option<
318        unsafe extern "system" fn(
319            env: *mut JNIEnv,
320            obj: jobject,
321            methodID: jmethodID,
322            args: *const jvalue,
323        ) -> jlong,
324    >,
325    pub CallFloatMethod: Option<
326        unsafe extern "C" fn(env: *mut JNIEnv, obj: jobject, methodID: jmethodID, ...) -> jfloat,
327    >,
328    pub CallFloatMethodV: Option<
329        unsafe extern "system" fn(
330            env: *mut JNIEnv,
331            obj: jobject,
332            methodID: jmethodID,
333            args: va_list,
334        ) -> jfloat,
335    >,
336    pub CallFloatMethodA: Option<
337        unsafe extern "system" fn(
338            env: *mut JNIEnv,
339            obj: jobject,
340            methodID: jmethodID,
341            args: *const jvalue,
342        ) -> jfloat,
343    >,
344    pub CallDoubleMethod: Option<
345        unsafe extern "C" fn(env: *mut JNIEnv, obj: jobject, methodID: jmethodID, ...) -> jdouble,
346    >,
347    pub CallDoubleMethodV: Option<
348        unsafe extern "system" fn(
349            env: *mut JNIEnv,
350            obj: jobject,
351            methodID: jmethodID,
352            args: va_list,
353        ) -> jdouble,
354    >,
355    pub CallDoubleMethodA: Option<
356        unsafe extern "system" fn(
357            env: *mut JNIEnv,
358            obj: jobject,
359            methodID: jmethodID,
360            args: *const jvalue,
361        ) -> jdouble,
362    >,
363    pub CallVoidMethod:
364        Option<unsafe extern "C" fn(env: *mut JNIEnv, obj: jobject, methodID: jmethodID, ...)>,
365    pub CallVoidMethodV: Option<
366        unsafe extern "system" fn(
367            env: *mut JNIEnv,
368            obj: jobject,
369            methodID: jmethodID,
370            args: va_list,
371        ),
372    >,
373    pub CallVoidMethodA: Option<
374        unsafe extern "system" fn(
375            env: *mut JNIEnv,
376            obj: jobject,
377            methodID: jmethodID,
378            args: *const jvalue,
379        ),
380    >,
381    pub CallNonvirtualObjectMethod: Option<
382        unsafe extern "C" fn(
383            env: *mut JNIEnv,
384            obj: jobject,
385            clazz: jclass,
386            methodID: jmethodID,
387            ...
388        ) -> jobject,
389    >,
390    pub CallNonvirtualObjectMethodV: Option<
391        unsafe extern "system" fn(
392            env: *mut JNIEnv,
393            obj: jobject,
394            clazz: jclass,
395            methodID: jmethodID,
396            args: va_list,
397        ) -> jobject,
398    >,
399    pub CallNonvirtualObjectMethodA: Option<
400        unsafe extern "system" fn(
401            env: *mut JNIEnv,
402            obj: jobject,
403            clazz: jclass,
404            methodID: jmethodID,
405            args: *const jvalue,
406        ) -> jobject,
407    >,
408    pub CallNonvirtualBooleanMethod: Option<
409        unsafe extern "C" fn(
410            env: *mut JNIEnv,
411            obj: jobject,
412            clazz: jclass,
413            methodID: jmethodID,
414            ...
415        ) -> jboolean,
416    >,
417    pub CallNonvirtualBooleanMethodV: Option<
418        unsafe extern "system" fn(
419            env: *mut JNIEnv,
420            obj: jobject,
421            clazz: jclass,
422            methodID: jmethodID,
423            args: va_list,
424        ) -> jboolean,
425    >,
426    pub CallNonvirtualBooleanMethodA: Option<
427        unsafe extern "system" fn(
428            env: *mut JNIEnv,
429            obj: jobject,
430            clazz: jclass,
431            methodID: jmethodID,
432            args: *const jvalue,
433        ) -> jboolean,
434    >,
435    pub CallNonvirtualByteMethod: Option<
436        unsafe extern "C" fn(
437            env: *mut JNIEnv,
438            obj: jobject,
439            clazz: jclass,
440            methodID: jmethodID,
441            ...
442        ) -> jbyte,
443    >,
444    pub CallNonvirtualByteMethodV: Option<
445        unsafe extern "system" fn(
446            env: *mut JNIEnv,
447            obj: jobject,
448            clazz: jclass,
449            methodID: jmethodID,
450            args: va_list,
451        ) -> jbyte,
452    >,
453    pub CallNonvirtualByteMethodA: Option<
454        unsafe extern "system" fn(
455            env: *mut JNIEnv,
456            obj: jobject,
457            clazz: jclass,
458            methodID: jmethodID,
459            args: *const jvalue,
460        ) -> jbyte,
461    >,
462    pub CallNonvirtualCharMethod: Option<
463        unsafe extern "C" fn(
464            env: *mut JNIEnv,
465            obj: jobject,
466            clazz: jclass,
467            methodID: jmethodID,
468            ...
469        ) -> jchar,
470    >,
471    pub CallNonvirtualCharMethodV: Option<
472        unsafe extern "system" fn(
473            env: *mut JNIEnv,
474            obj: jobject,
475            clazz: jclass,
476            methodID: jmethodID,
477            args: va_list,
478        ) -> jchar,
479    >,
480    pub CallNonvirtualCharMethodA: Option<
481        unsafe extern "system" fn(
482            env: *mut JNIEnv,
483            obj: jobject,
484            clazz: jclass,
485            methodID: jmethodID,
486            args: *const jvalue,
487        ) -> jchar,
488    >,
489    pub CallNonvirtualShortMethod: Option<
490        unsafe extern "C" fn(
491            env: *mut JNIEnv,
492            obj: jobject,
493            clazz: jclass,
494            methodID: jmethodID,
495            ...
496        ) -> jshort,
497    >,
498    pub CallNonvirtualShortMethodV: Option<
499        unsafe extern "system" fn(
500            env: *mut JNIEnv,
501            obj: jobject,
502            clazz: jclass,
503            methodID: jmethodID,
504            args: va_list,
505        ) -> jshort,
506    >,
507    pub CallNonvirtualShortMethodA: Option<
508        unsafe extern "system" fn(
509            env: *mut JNIEnv,
510            obj: jobject,
511            clazz: jclass,
512            methodID: jmethodID,
513            args: *const jvalue,
514        ) -> jshort,
515    >,
516    pub CallNonvirtualIntMethod: Option<
517        unsafe extern "C" fn(
518            env: *mut JNIEnv,
519            obj: jobject,
520            clazz: jclass,
521            methodID: jmethodID,
522            ...
523        ) -> jint,
524    >,
525    pub CallNonvirtualIntMethodV: Option<
526        unsafe extern "system" fn(
527            env: *mut JNIEnv,
528            obj: jobject,
529            clazz: jclass,
530            methodID: jmethodID,
531            args: va_list,
532        ) -> jint,
533    >,
534    pub CallNonvirtualIntMethodA: Option<
535        unsafe extern "system" fn(
536            env: *mut JNIEnv,
537            obj: jobject,
538            clazz: jclass,
539            methodID: jmethodID,
540            args: *const jvalue,
541        ) -> jint,
542    >,
543    pub CallNonvirtualLongMethod: Option<
544        unsafe extern "C" fn(
545            env: *mut JNIEnv,
546            obj: jobject,
547            clazz: jclass,
548            methodID: jmethodID,
549            ...
550        ) -> jlong,
551    >,
552    pub CallNonvirtualLongMethodV: Option<
553        unsafe extern "system" fn(
554            env: *mut JNIEnv,
555            obj: jobject,
556            clazz: jclass,
557            methodID: jmethodID,
558            args: va_list,
559        ) -> jlong,
560    >,
561    pub CallNonvirtualLongMethodA: Option<
562        unsafe extern "system" fn(
563            env: *mut JNIEnv,
564            obj: jobject,
565            clazz: jclass,
566            methodID: jmethodID,
567            args: *const jvalue,
568        ) -> jlong,
569    >,
570    pub CallNonvirtualFloatMethod: Option<
571        unsafe extern "C" fn(
572            env: *mut JNIEnv,
573            obj: jobject,
574            clazz: jclass,
575            methodID: jmethodID,
576            ...
577        ) -> jfloat,
578    >,
579    pub CallNonvirtualFloatMethodV: Option<
580        unsafe extern "system" fn(
581            env: *mut JNIEnv,
582            obj: jobject,
583            clazz: jclass,
584            methodID: jmethodID,
585            args: va_list,
586        ) -> jfloat,
587    >,
588    pub CallNonvirtualFloatMethodA: Option<
589        unsafe extern "system" fn(
590            env: *mut JNIEnv,
591            obj: jobject,
592            clazz: jclass,
593            methodID: jmethodID,
594            args: *const jvalue,
595        ) -> jfloat,
596    >,
597    pub CallNonvirtualDoubleMethod: Option<
598        unsafe extern "C" fn(
599            env: *mut JNIEnv,
600            obj: jobject,
601            clazz: jclass,
602            methodID: jmethodID,
603            ...
604        ) -> jdouble,
605    >,
606    pub CallNonvirtualDoubleMethodV: Option<
607        unsafe extern "system" fn(
608            env: *mut JNIEnv,
609            obj: jobject,
610            clazz: jclass,
611            methodID: jmethodID,
612            args: va_list,
613        ) -> jdouble,
614    >,
615    pub CallNonvirtualDoubleMethodA: Option<
616        unsafe extern "system" fn(
617            env: *mut JNIEnv,
618            obj: jobject,
619            clazz: jclass,
620            methodID: jmethodID,
621            args: *const jvalue,
622        ) -> jdouble,
623    >,
624    pub CallNonvirtualVoidMethod: Option<
625        unsafe extern "C" fn(
626            env: *mut JNIEnv,
627            obj: jobject,
628            clazz: jclass,
629            methodID: jmethodID,
630            ...
631        ),
632    >,
633    pub CallNonvirtualVoidMethodV: Option<
634        unsafe extern "system" fn(
635            env: *mut JNIEnv,
636            obj: jobject,
637            clazz: jclass,
638            methodID: jmethodID,
639            args: va_list,
640        ),
641    >,
642    pub CallNonvirtualVoidMethodA: Option<
643        unsafe extern "system" fn(
644            env: *mut JNIEnv,
645            obj: jobject,
646            clazz: jclass,
647            methodID: jmethodID,
648            args: *const jvalue,
649        ),
650    >,
651    pub GetFieldID: Option<
652        unsafe extern "system" fn(
653            env: *mut JNIEnv,
654            clazz: jclass,
655            name: *const c_char,
656            sig: *const c_char,
657        ) -> jfieldID,
658    >,
659    pub GetObjectField: Option<
660        unsafe extern "system" fn(env: *mut JNIEnv, obj: jobject, fieldID: jfieldID) -> jobject,
661    >,
662    pub GetBooleanField: Option<
663        unsafe extern "system" fn(env: *mut JNIEnv, obj: jobject, fieldID: jfieldID) -> jboolean,
664    >,
665    pub GetByteField: Option<
666        unsafe extern "system" fn(env: *mut JNIEnv, obj: jobject, fieldID: jfieldID) -> jbyte,
667    >,
668    pub GetCharField: Option<
669        unsafe extern "system" fn(env: *mut JNIEnv, obj: jobject, fieldID: jfieldID) -> jchar,
670    >,
671    pub GetShortField: Option<
672        unsafe extern "system" fn(env: *mut JNIEnv, obj: jobject, fieldID: jfieldID) -> jshort,
673    >,
674    pub GetIntField: Option<
675        unsafe extern "system" fn(env: *mut JNIEnv, obj: jobject, fieldID: jfieldID) -> jint,
676    >,
677    pub GetLongField: Option<
678        unsafe extern "system" fn(env: *mut JNIEnv, obj: jobject, fieldID: jfieldID) -> jlong,
679    >,
680    pub GetFloatField: Option<
681        unsafe extern "system" fn(env: *mut JNIEnv, obj: jobject, fieldID: jfieldID) -> jfloat,
682    >,
683    pub GetDoubleField: Option<
684        unsafe extern "system" fn(env: *mut JNIEnv, obj: jobject, fieldID: jfieldID) -> jdouble,
685    >,
686    pub SetObjectField: Option<
687        unsafe extern "system" fn(env: *mut JNIEnv, obj: jobject, fieldID: jfieldID, val: jobject),
688    >,
689    pub SetBooleanField: Option<
690        unsafe extern "system" fn(env: *mut JNIEnv, obj: jobject, fieldID: jfieldID, val: jboolean),
691    >,
692    pub SetByteField: Option<
693        unsafe extern "system" fn(env: *mut JNIEnv, obj: jobject, fieldID: jfieldID, val: jbyte),
694    >,
695    pub SetCharField: Option<
696        unsafe extern "system" fn(env: *mut JNIEnv, obj: jobject, fieldID: jfieldID, val: jchar),
697    >,
698    pub SetShortField: Option<
699        unsafe extern "system" fn(env: *mut JNIEnv, obj: jobject, fieldID: jfieldID, val: jshort),
700    >,
701    pub SetIntField: Option<
702        unsafe extern "system" fn(env: *mut JNIEnv, obj: jobject, fieldID: jfieldID, val: jint),
703    >,
704    pub SetLongField: Option<
705        unsafe extern "system" fn(env: *mut JNIEnv, obj: jobject, fieldID: jfieldID, val: jlong),
706    >,
707    pub SetFloatField: Option<
708        unsafe extern "system" fn(env: *mut JNIEnv, obj: jobject, fieldID: jfieldID, val: jfloat),
709    >,
710    pub SetDoubleField: Option<
711        unsafe extern "system" fn(env: *mut JNIEnv, obj: jobject, fieldID: jfieldID, val: jdouble),
712    >,
713    pub GetStaticMethodID: Option<
714        unsafe extern "system" fn(
715            env: *mut JNIEnv,
716            clazz: jclass,
717            name: *const c_char,
718            sig: *const c_char,
719        ) -> jmethodID,
720    >,
721    pub CallStaticObjectMethod: Option<
722        unsafe extern "C" fn(env: *mut JNIEnv, clazz: jclass, methodID: jmethodID, ...) -> jobject,
723    >,
724    pub CallStaticObjectMethodV: Option<
725        unsafe extern "system" fn(
726            env: *mut JNIEnv,
727            clazz: jclass,
728            methodID: jmethodID,
729            args: va_list,
730        ) -> jobject,
731    >,
732    pub CallStaticObjectMethodA: Option<
733        unsafe extern "system" fn(
734            env: *mut JNIEnv,
735            clazz: jclass,
736            methodID: jmethodID,
737            args: *const jvalue,
738        ) -> jobject,
739    >,
740    pub CallStaticBooleanMethod: Option<
741        unsafe extern "C" fn(env: *mut JNIEnv, clazz: jclass, methodID: jmethodID, ...) -> jboolean,
742    >,
743    pub CallStaticBooleanMethodV: Option<
744        unsafe extern "system" fn(
745            env: *mut JNIEnv,
746            clazz: jclass,
747            methodID: jmethodID,
748            args: va_list,
749        ) -> jboolean,
750    >,
751    pub CallStaticBooleanMethodA: Option<
752        unsafe extern "system" fn(
753            env: *mut JNIEnv,
754            clazz: jclass,
755            methodID: jmethodID,
756            args: *const jvalue,
757        ) -> jboolean,
758    >,
759    pub CallStaticByteMethod: Option<
760        unsafe extern "C" fn(env: *mut JNIEnv, clazz: jclass, methodID: jmethodID, ...) -> jbyte,
761    >,
762    pub CallStaticByteMethodV: Option<
763        unsafe extern "system" fn(
764            env: *mut JNIEnv,
765            clazz: jclass,
766            methodID: jmethodID,
767            args: va_list,
768        ) -> jbyte,
769    >,
770    pub CallStaticByteMethodA: Option<
771        unsafe extern "system" fn(
772            env: *mut JNIEnv,
773            clazz: jclass,
774            methodID: jmethodID,
775            args: *const jvalue,
776        ) -> jbyte,
777    >,
778    pub CallStaticCharMethod: Option<
779        unsafe extern "C" fn(env: *mut JNIEnv, clazz: jclass, methodID: jmethodID, ...) -> jchar,
780    >,
781    pub CallStaticCharMethodV: Option<
782        unsafe extern "system" fn(
783            env: *mut JNIEnv,
784            clazz: jclass,
785            methodID: jmethodID,
786            args: va_list,
787        ) -> jchar,
788    >,
789    pub CallStaticCharMethodA: Option<
790        unsafe extern "system" fn(
791            env: *mut JNIEnv,
792            clazz: jclass,
793            methodID: jmethodID,
794            args: *const jvalue,
795        ) -> jchar,
796    >,
797    pub CallStaticShortMethod: Option<
798        unsafe extern "C" fn(env: *mut JNIEnv, clazz: jclass, methodID: jmethodID, ...) -> jshort,
799    >,
800    pub CallStaticShortMethodV: Option<
801        unsafe extern "system" fn(
802            env: *mut JNIEnv,
803            clazz: jclass,
804            methodID: jmethodID,
805            args: va_list,
806        ) -> jshort,
807    >,
808    pub CallStaticShortMethodA: Option<
809        unsafe extern "system" fn(
810            env: *mut JNIEnv,
811            clazz: jclass,
812            methodID: jmethodID,
813            args: *const jvalue,
814        ) -> jshort,
815    >,
816    pub CallStaticIntMethod: Option<
817        unsafe extern "C" fn(env: *mut JNIEnv, clazz: jclass, methodID: jmethodID, ...) -> jint,
818    >,
819    pub CallStaticIntMethodV: Option<
820        unsafe extern "system" fn(
821            env: *mut JNIEnv,
822            clazz: jclass,
823            methodID: jmethodID,
824            args: va_list,
825        ) -> jint,
826    >,
827    pub CallStaticIntMethodA: Option<
828        unsafe extern "system" fn(
829            env: *mut JNIEnv,
830            clazz: jclass,
831            methodID: jmethodID,
832            args: *const jvalue,
833        ) -> jint,
834    >,
835    pub CallStaticLongMethod: Option<
836        unsafe extern "C" fn(env: *mut JNIEnv, clazz: jclass, methodID: jmethodID, ...) -> jlong,
837    >,
838    pub CallStaticLongMethodV: Option<
839        unsafe extern "system" fn(
840            env: *mut JNIEnv,
841            clazz: jclass,
842            methodID: jmethodID,
843            args: va_list,
844        ) -> jlong,
845    >,
846    pub CallStaticLongMethodA: Option<
847        unsafe extern "system" fn(
848            env: *mut JNIEnv,
849            clazz: jclass,
850            methodID: jmethodID,
851            args: *const jvalue,
852        ) -> jlong,
853    >,
854    pub CallStaticFloatMethod: Option<
855        unsafe extern "C" fn(env: *mut JNIEnv, clazz: jclass, methodID: jmethodID, ...) -> jfloat,
856    >,
857    pub CallStaticFloatMethodV: Option<
858        unsafe extern "system" fn(
859            env: *mut JNIEnv,
860            clazz: jclass,
861            methodID: jmethodID,
862            args: va_list,
863        ) -> jfloat,
864    >,
865    pub CallStaticFloatMethodA: Option<
866        unsafe extern "system" fn(
867            env: *mut JNIEnv,
868            clazz: jclass,
869            methodID: jmethodID,
870            args: *const jvalue,
871        ) -> jfloat,
872    >,
873    pub CallStaticDoubleMethod: Option<
874        unsafe extern "C" fn(env: *mut JNIEnv, clazz: jclass, methodID: jmethodID, ...) -> jdouble,
875    >,
876    pub CallStaticDoubleMethodV: Option<
877        unsafe extern "system" fn(
878            env: *mut JNIEnv,
879            clazz: jclass,
880            methodID: jmethodID,
881            args: va_list,
882        ) -> jdouble,
883    >,
884    pub CallStaticDoubleMethodA: Option<
885        unsafe extern "system" fn(
886            env: *mut JNIEnv,
887            clazz: jclass,
888            methodID: jmethodID,
889            args: *const jvalue,
890        ) -> jdouble,
891    >,
892    pub CallStaticVoidMethod:
893        Option<unsafe extern "C" fn(env: *mut JNIEnv, cls: jclass, methodID: jmethodID, ...)>,
894    pub CallStaticVoidMethodV: Option<
895        unsafe extern "system" fn(
896            env: *mut JNIEnv,
897            cls: jclass,
898            methodID: jmethodID,
899            args: va_list,
900        ),
901    >,
902    pub CallStaticVoidMethodA: Option<
903        unsafe extern "system" fn(
904            env: *mut JNIEnv,
905            cls: jclass,
906            methodID: jmethodID,
907            args: *const jvalue,
908        ),
909    >,
910    pub GetStaticFieldID: Option<
911        unsafe extern "system" fn(
912            env: *mut JNIEnv,
913            clazz: jclass,
914            name: *const c_char,
915            sig: *const c_char,
916        ) -> jfieldID,
917    >,
918    pub GetStaticObjectField: Option<
919        unsafe extern "system" fn(env: *mut JNIEnv, clazz: jclass, fieldID: jfieldID) -> jobject,
920    >,
921    pub GetStaticBooleanField: Option<
922        unsafe extern "system" fn(env: *mut JNIEnv, clazz: jclass, fieldID: jfieldID) -> jboolean,
923    >,
924    pub GetStaticByteField: Option<
925        unsafe extern "system" fn(env: *mut JNIEnv, clazz: jclass, fieldID: jfieldID) -> jbyte,
926    >,
927    pub GetStaticCharField: Option<
928        unsafe extern "system" fn(env: *mut JNIEnv, clazz: jclass, fieldID: jfieldID) -> jchar,
929    >,
930    pub GetStaticShortField: Option<
931        unsafe extern "system" fn(env: *mut JNIEnv, clazz: jclass, fieldID: jfieldID) -> jshort,
932    >,
933    pub GetStaticIntField: Option<
934        unsafe extern "system" fn(env: *mut JNIEnv, clazz: jclass, fieldID: jfieldID) -> jint,
935    >,
936    pub GetStaticLongField: Option<
937        unsafe extern "system" fn(env: *mut JNIEnv, clazz: jclass, fieldID: jfieldID) -> jlong,
938    >,
939    pub GetStaticFloatField: Option<
940        unsafe extern "system" fn(env: *mut JNIEnv, clazz: jclass, fieldID: jfieldID) -> jfloat,
941    >,
942    pub GetStaticDoubleField: Option<
943        unsafe extern "system" fn(env: *mut JNIEnv, clazz: jclass, fieldID: jfieldID) -> jdouble,
944    >,
945    pub SetStaticObjectField: Option<
946        unsafe extern "system" fn(
947            env: *mut JNIEnv,
948            clazz: jclass,
949            fieldID: jfieldID,
950            value: jobject,
951        ),
952    >,
953    pub SetStaticBooleanField: Option<
954        unsafe extern "system" fn(
955            env: *mut JNIEnv,
956            clazz: jclass,
957            fieldID: jfieldID,
958            value: jboolean,
959        ),
960    >,
961    pub SetStaticByteField: Option<
962        unsafe extern "system" fn(env: *mut JNIEnv, clazz: jclass, fieldID: jfieldID, value: jbyte),
963    >,
964    pub SetStaticCharField: Option<
965        unsafe extern "system" fn(env: *mut JNIEnv, clazz: jclass, fieldID: jfieldID, value: jchar),
966    >,
967    pub SetStaticShortField: Option<
968        unsafe extern "system" fn(
969            env: *mut JNIEnv,
970            clazz: jclass,
971            fieldID: jfieldID,
972            value: jshort,
973        ),
974    >,
975    pub SetStaticIntField: Option<
976        unsafe extern "system" fn(env: *mut JNIEnv, clazz: jclass, fieldID: jfieldID, value: jint),
977    >,
978    pub SetStaticLongField: Option<
979        unsafe extern "system" fn(env: *mut JNIEnv, clazz: jclass, fieldID: jfieldID, value: jlong),
980    >,
981    pub SetStaticFloatField: Option<
982        unsafe extern "system" fn(
983            env: *mut JNIEnv,
984            clazz: jclass,
985            fieldID: jfieldID,
986            value: jfloat,
987        ),
988    >,
989    pub SetStaticDoubleField: Option<
990        unsafe extern "system" fn(
991            env: *mut JNIEnv,
992            clazz: jclass,
993            fieldID: jfieldID,
994            value: jdouble,
995        ),
996    >,
997    pub NewString: Option<
998        unsafe extern "system" fn(env: *mut JNIEnv, unicode: *const jchar, len: jsize) -> jstring,
999    >,
1000    pub GetStringLength: Option<unsafe extern "system" fn(env: *mut JNIEnv, str: jstring) -> jsize>,
1001    pub GetStringChars: Option<
1002        unsafe extern "system" fn(
1003            env: *mut JNIEnv,
1004            str: jstring,
1005            isCopy: *mut jboolean,
1006        ) -> *const jchar,
1007    >,
1008    pub ReleaseStringChars:
1009        Option<unsafe extern "system" fn(env: *mut JNIEnv, str: jstring, chars: *const jchar)>,
1010    pub NewStringUTF:
1011        Option<unsafe extern "system" fn(env: *mut JNIEnv, utf: *const c_char) -> jstring>,
1012    pub GetStringUTFLength:
1013        Option<unsafe extern "system" fn(env: *mut JNIEnv, str: jstring) -> jsize>,
1014    pub GetStringUTFChars: Option<
1015        unsafe extern "system" fn(
1016            env: *mut JNIEnv,
1017            str: jstring,
1018            isCopy: *mut jboolean,
1019        ) -> *const c_char,
1020    >,
1021    pub ReleaseStringUTFChars:
1022        Option<unsafe extern "system" fn(env: *mut JNIEnv, str: jstring, chars: *const c_char)>,
1023    pub GetArrayLength: Option<unsafe extern "system" fn(env: *mut JNIEnv, array: jarray) -> jsize>,
1024    pub NewObjectArray: Option<
1025        unsafe extern "system" fn(
1026            env: *mut JNIEnv,
1027            len: jsize,
1028            clazz: jclass,
1029            init: jobject,
1030        ) -> jobjectArray,
1031    >,
1032    pub GetObjectArrayElement: Option<
1033        unsafe extern "system" fn(env: *mut JNIEnv, array: jobjectArray, index: jsize) -> jobject,
1034    >,
1035    pub SetObjectArrayElement: Option<
1036        unsafe extern "system" fn(
1037            env: *mut JNIEnv,
1038            array: jobjectArray,
1039            index: jsize,
1040            val: jobject,
1041        ),
1042    >,
1043    pub NewBooleanArray:
1044        Option<unsafe extern "system" fn(env: *mut JNIEnv, len: jsize) -> jbooleanArray>,
1045    pub NewByteArray: Option<unsafe extern "system" fn(env: *mut JNIEnv, len: jsize) -> jbyteArray>,
1046    pub NewCharArray: Option<unsafe extern "system" fn(env: *mut JNIEnv, len: jsize) -> jcharArray>,
1047    pub NewShortArray:
1048        Option<unsafe extern "system" fn(env: *mut JNIEnv, len: jsize) -> jshortArray>,
1049    pub NewIntArray: Option<unsafe extern "system" fn(env: *mut JNIEnv, len: jsize) -> jintArray>,
1050    pub NewLongArray: Option<unsafe extern "system" fn(env: *mut JNIEnv, len: jsize) -> jlongArray>,
1051    pub NewFloatArray:
1052        Option<unsafe extern "system" fn(env: *mut JNIEnv, len: jsize) -> jfloatArray>,
1053    pub NewDoubleArray:
1054        Option<unsafe extern "system" fn(env: *mut JNIEnv, len: jsize) -> jdoubleArray>,
1055    pub GetBooleanArrayElements: Option<
1056        unsafe extern "system" fn(
1057            env: *mut JNIEnv,
1058            array: jbooleanArray,
1059            isCopy: *mut jboolean,
1060        ) -> *mut jboolean,
1061    >,
1062    pub GetByteArrayElements: Option<
1063        unsafe extern "system" fn(
1064            env: *mut JNIEnv,
1065            array: jbyteArray,
1066            isCopy: *mut jboolean,
1067        ) -> *mut jbyte,
1068    >,
1069    pub GetCharArrayElements: Option<
1070        unsafe extern "system" fn(
1071            env: *mut JNIEnv,
1072            array: jcharArray,
1073            isCopy: *mut jboolean,
1074        ) -> *mut jchar,
1075    >,
1076    pub GetShortArrayElements: Option<
1077        unsafe extern "system" fn(
1078            env: *mut JNIEnv,
1079            array: jshortArray,
1080            isCopy: *mut jboolean,
1081        ) -> *mut jshort,
1082    >,
1083    pub GetIntArrayElements: Option<
1084        unsafe extern "system" fn(
1085            env: *mut JNIEnv,
1086            array: jintArray,
1087            isCopy: *mut jboolean,
1088        ) -> *mut jint,
1089    >,
1090    pub GetLongArrayElements: Option<
1091        unsafe extern "system" fn(
1092            env: *mut JNIEnv,
1093            array: jlongArray,
1094            isCopy: *mut jboolean,
1095        ) -> *mut jlong,
1096    >,
1097    pub GetFloatArrayElements: Option<
1098        unsafe extern "system" fn(
1099            env: *mut JNIEnv,
1100            array: jfloatArray,
1101            isCopy: *mut jboolean,
1102        ) -> *mut jfloat,
1103    >,
1104    pub GetDoubleArrayElements: Option<
1105        unsafe extern "system" fn(
1106            env: *mut JNIEnv,
1107            array: jdoubleArray,
1108            isCopy: *mut jboolean,
1109        ) -> *mut jdouble,
1110    >,
1111    pub ReleaseBooleanArrayElements: Option<
1112        unsafe extern "system" fn(
1113            env: *mut JNIEnv,
1114            array: jbooleanArray,
1115            elems: *mut jboolean,
1116            mode: jint,
1117        ),
1118    >,
1119    pub ReleaseByteArrayElements: Option<
1120        unsafe extern "system" fn(
1121            env: *mut JNIEnv,
1122            array: jbyteArray,
1123            elems: *mut jbyte,
1124            mode: jint,
1125        ),
1126    >,
1127    pub ReleaseCharArrayElements: Option<
1128        unsafe extern "system" fn(
1129            env: *mut JNIEnv,
1130            array: jcharArray,
1131            elems: *mut jchar,
1132            mode: jint,
1133        ),
1134    >,
1135    pub ReleaseShortArrayElements: Option<
1136        unsafe extern "system" fn(
1137            env: *mut JNIEnv,
1138            array: jshortArray,
1139            elems: *mut jshort,
1140            mode: jint,
1141        ),
1142    >,
1143    pub ReleaseIntArrayElements: Option<
1144        unsafe extern "system" fn(env: *mut JNIEnv, array: jintArray, elems: *mut jint, mode: jint),
1145    >,
1146    pub ReleaseLongArrayElements: Option<
1147        unsafe extern "system" fn(
1148            env: *mut JNIEnv,
1149            array: jlongArray,
1150            elems: *mut jlong,
1151            mode: jint,
1152        ),
1153    >,
1154    pub ReleaseFloatArrayElements: Option<
1155        unsafe extern "system" fn(
1156            env: *mut JNIEnv,
1157            array: jfloatArray,
1158            elems: *mut jfloat,
1159            mode: jint,
1160        ),
1161    >,
1162    pub ReleaseDoubleArrayElements: Option<
1163        unsafe extern "system" fn(
1164            env: *mut JNIEnv,
1165            array: jdoubleArray,
1166            elems: *mut jdouble,
1167            mode: jint,
1168        ),
1169    >,
1170    pub GetBooleanArrayRegion: Option<
1171        unsafe extern "system" fn(
1172            env: *mut JNIEnv,
1173            array: jbooleanArray,
1174            start: jsize,
1175            l: jsize,
1176            buf: *mut jboolean,
1177        ),
1178    >,
1179    pub GetByteArrayRegion: Option<
1180        unsafe extern "system" fn(
1181            env: *mut JNIEnv,
1182            array: jbyteArray,
1183            start: jsize,
1184            len: jsize,
1185            buf: *mut jbyte,
1186        ),
1187    >,
1188    pub GetCharArrayRegion: Option<
1189        unsafe extern "system" fn(
1190            env: *mut JNIEnv,
1191            array: jcharArray,
1192            start: jsize,
1193            len: jsize,
1194            buf: *mut jchar,
1195        ),
1196    >,
1197    pub GetShortArrayRegion: Option<
1198        unsafe extern "system" fn(
1199            env: *mut JNIEnv,
1200            array: jshortArray,
1201            start: jsize,
1202            len: jsize,
1203            buf: *mut jshort,
1204        ),
1205    >,
1206    pub GetIntArrayRegion: Option<
1207        unsafe extern "system" fn(
1208            env: *mut JNIEnv,
1209            array: jintArray,
1210            start: jsize,
1211            len: jsize,
1212            buf: *mut jint,
1213        ),
1214    >,
1215    pub GetLongArrayRegion: Option<
1216        unsafe extern "system" fn(
1217            env: *mut JNIEnv,
1218            array: jlongArray,
1219            start: jsize,
1220            len: jsize,
1221            buf: *mut jlong,
1222        ),
1223    >,
1224    pub GetFloatArrayRegion: Option<
1225        unsafe extern "system" fn(
1226            env: *mut JNIEnv,
1227            array: jfloatArray,
1228            start: jsize,
1229            len: jsize,
1230            buf: *mut jfloat,
1231        ),
1232    >,
1233    pub GetDoubleArrayRegion: Option<
1234        unsafe extern "system" fn(
1235            env: *mut JNIEnv,
1236            array: jdoubleArray,
1237            start: jsize,
1238            len: jsize,
1239            buf: *mut jdouble,
1240        ),
1241    >,
1242    pub SetBooleanArrayRegion: Option<
1243        unsafe extern "system" fn(
1244            env: *mut JNIEnv,
1245            array: jbooleanArray,
1246            start: jsize,
1247            l: jsize,
1248            buf: *const jboolean,
1249        ),
1250    >,
1251    pub SetByteArrayRegion: Option<
1252        unsafe extern "system" fn(
1253            env: *mut JNIEnv,
1254            array: jbyteArray,
1255            start: jsize,
1256            len: jsize,
1257            buf: *const jbyte,
1258        ),
1259    >,
1260    pub SetCharArrayRegion: Option<
1261        unsafe extern "system" fn(
1262            env: *mut JNIEnv,
1263            array: jcharArray,
1264            start: jsize,
1265            len: jsize,
1266            buf: *const jchar,
1267        ),
1268    >,
1269    pub SetShortArrayRegion: Option<
1270        unsafe extern "system" fn(
1271            env: *mut JNIEnv,
1272            array: jshortArray,
1273            start: jsize,
1274            len: jsize,
1275            buf: *const jshort,
1276        ),
1277    >,
1278    pub SetIntArrayRegion: Option<
1279        unsafe extern "system" fn(
1280            env: *mut JNIEnv,
1281            array: jintArray,
1282            start: jsize,
1283            len: jsize,
1284            buf: *const jint,
1285        ),
1286    >,
1287    pub SetLongArrayRegion: Option<
1288        unsafe extern "system" fn(
1289            env: *mut JNIEnv,
1290            array: jlongArray,
1291            start: jsize,
1292            len: jsize,
1293            buf: *const jlong,
1294        ),
1295    >,
1296    pub SetFloatArrayRegion: Option<
1297        unsafe extern "system" fn(
1298            env: *mut JNIEnv,
1299            array: jfloatArray,
1300            start: jsize,
1301            len: jsize,
1302            buf: *const jfloat,
1303        ),
1304    >,
1305    pub SetDoubleArrayRegion: Option<
1306        unsafe extern "system" fn(
1307            env: *mut JNIEnv,
1308            array: jdoubleArray,
1309            start: jsize,
1310            len: jsize,
1311            buf: *const jdouble,
1312        ),
1313    >,
1314    pub RegisterNatives: Option<
1315        unsafe extern "system" fn(
1316            env: *mut JNIEnv,
1317            clazz: jclass,
1318            methods: *const JNINativeMethod,
1319            nMethods: jint,
1320        ) -> jint,
1321    >,
1322    pub UnregisterNatives:
1323        Option<unsafe extern "system" fn(env: *mut JNIEnv, clazz: jclass) -> jint>,
1324    pub MonitorEnter: Option<unsafe extern "system" fn(env: *mut JNIEnv, obj: jobject) -> jint>,
1325    pub MonitorExit: Option<unsafe extern "system" fn(env: *mut JNIEnv, obj: jobject) -> jint>,
1326    pub GetJavaVM:
1327        Option<unsafe extern "system" fn(env: *mut JNIEnv, vm: *mut *mut JavaVM) -> jint>,
1328    pub GetStringRegion: Option<
1329        unsafe extern "system" fn(
1330            env: *mut JNIEnv,
1331            str: jstring,
1332            start: jsize,
1333            len: jsize,
1334            buf: *mut jchar,
1335        ),
1336    >,
1337    pub GetStringUTFRegion: Option<
1338        unsafe extern "system" fn(
1339            env: *mut JNIEnv,
1340            str: jstring,
1341            start: jsize,
1342            len: jsize,
1343            buf: *mut c_char,
1344        ),
1345    >,
1346    pub GetPrimitiveArrayCritical: Option<
1347        unsafe extern "system" fn(
1348            env: *mut JNIEnv,
1349            array: jarray,
1350            isCopy: *mut jboolean,
1351        ) -> *mut c_void,
1352    >,
1353    pub ReleasePrimitiveArrayCritical: Option<
1354        unsafe extern "system" fn(env: *mut JNIEnv, array: jarray, carray: *mut c_void, mode: jint),
1355    >,
1356    pub GetStringCritical: Option<
1357        unsafe extern "system" fn(
1358            env: *mut JNIEnv,
1359            string: jstring,
1360            isCopy: *mut jboolean,
1361        ) -> *const jchar,
1362    >,
1363    pub ReleaseStringCritical:
1364        Option<unsafe extern "system" fn(env: *mut JNIEnv, string: jstring, cstring: *const jchar)>,
1365    pub NewWeakGlobalRef:
1366        Option<unsafe extern "system" fn(env: *mut JNIEnv, obj: jobject) -> jweak>,
1367    pub DeleteWeakGlobalRef: Option<unsafe extern "system" fn(env: *mut JNIEnv, ref_: jweak)>,
1368    pub ExceptionCheck: Option<unsafe extern "system" fn(env: *mut JNIEnv) -> jboolean>,
1369    pub NewDirectByteBuffer: Option<
1370        unsafe extern "system" fn(
1371            env: *mut JNIEnv,
1372            address: *mut c_void,
1373            capacity: jlong,
1374        ) -> jobject,
1375    >,
1376    pub GetDirectBufferAddress:
1377        Option<unsafe extern "system" fn(env: *mut JNIEnv, buf: jobject) -> *mut c_void>,
1378    pub GetDirectBufferCapacity:
1379        Option<unsafe extern "system" fn(env: *mut JNIEnv, buf: jobject) -> jlong>,
1380    pub GetObjectRefType:
1381        Option<unsafe extern "system" fn(env: *mut JNIEnv, obj: jobject) -> jobjectRefType>,
1382    pub GetModule: Option<unsafe extern "system" fn(env: *mut JNIEnv, clazz: jclass) -> jobject>,
1383}
1384
1385impl Clone for JNINativeInterface_ {
1386    fn clone(&self) -> Self {
1387        *self
1388    }
1389}
1390
1391#[repr(C)]
1392#[derive(Copy)]
1393pub struct JNIEnv_ {
1394    pub functions: *const JNINativeInterface_,
1395}
1396
1397impl Clone for JNIEnv_ {
1398    fn clone(&self) -> Self {
1399        *self
1400    }
1401}
1402
1403pub use jni_sys_04::JavaVMOption;
1404
1405// Note: we can't use the semver trick to re-export jni_sys_04::JavaVMInitArgs
1406// because it contains a `jboolean` field which has changed from `u8` to `bool`
1407// in jni_sys 0.4.0, which is a breaking change.
1408#[repr(C)]
1409#[derive(Copy)]
1410pub struct JavaVMInitArgs {
1411    pub version: jint,
1412    pub nOptions: jint,
1413    pub options: *mut JavaVMOption,
1414    pub ignoreUnrecognized: jboolean,
1415}
1416
1417impl Clone for JavaVMInitArgs {
1418    fn clone(&self) -> Self {
1419        *self
1420    }
1421}
1422
1423pub use jni_sys_04::JavaVMAttachArgs;
1424
1425#[repr(C)]
1426#[derive(Copy)]
1427pub struct JNIInvokeInterface_ {
1428    pub reserved0: *mut c_void,
1429    pub reserved1: *mut c_void,
1430    pub reserved2: *mut c_void,
1431    pub DestroyJavaVM: Option<unsafe extern "system" fn(vm: *mut JavaVM) -> jint>,
1432    pub AttachCurrentThread: Option<
1433        unsafe extern "system" fn(
1434            vm: *mut JavaVM,
1435            penv: *mut *mut c_void,
1436            args: *mut c_void,
1437        ) -> jint,
1438    >,
1439    pub DetachCurrentThread: Option<unsafe extern "system" fn(vm: *mut JavaVM) -> jint>,
1440    pub GetEnv: Option<
1441        unsafe extern "system" fn(vm: *mut JavaVM, penv: *mut *mut c_void, version: jint) -> jint,
1442    >,
1443    pub AttachCurrentThreadAsDaemon: Option<
1444        unsafe extern "system" fn(
1445            vm: *mut JavaVM,
1446            penv: *mut *mut c_void,
1447            args: *mut c_void,
1448        ) -> jint,
1449    >,
1450}
1451
1452impl Clone for JNIInvokeInterface_ {
1453    fn clone(&self) -> Self {
1454        *self
1455    }
1456}
1457
1458extern "system" {
1459    pub fn JNI_GetDefaultJavaVMInitArgs(args: *mut c_void) -> jint;
1460    pub fn JNI_CreateJavaVM(
1461        pvm: *mut *mut JavaVM,
1462        penv: *mut *mut c_void,
1463        args: *mut c_void,
1464    ) -> jint;
1465    pub fn JNI_GetCreatedJavaVMs(vmBuf: *mut *mut JavaVM, bufLen: jsize, nVMs: *mut jsize) -> jint;
1466}