|
8 | 8 | extern "C" { |
9 | 9 | #endif |
10 | 10 |
|
11 | | -/** |
12 | | - * JNI Helper - 简化 JNI 调用的辅助函数 |
13 | | - */ |
14 | | - |
15 | | -/** |
16 | | - * 保存 JavaVM 指针(在 JNI_OnLoad 中调用) |
17 | | - */ |
| 11 | +// ===== 初始化 ===== |
18 | 12 | void jnihelper_set_jvm(JavaVM *vm); |
19 | | - |
20 | | -/** |
21 | | - * 获取 JavaVM |
22 | | - */ |
23 | 13 | JavaVM* jnihelper_get_jvm(); |
24 | | - |
25 | | -/** |
26 | | - * 获取 JNIEnv(自动附加当前线程) |
27 | | - */ |
28 | 14 | JNIEnv* jnihelper_get_env(); |
29 | 15 |
|
30 | | -/** |
31 | | - * 查找 Java 类(返回全局引用) |
32 | | - */ |
| 16 | +// ===== 类 / 方法 / 字段查找 ===== |
33 | 17 | jclass jnihelper_find_class(const char *class_name); |
34 | | - |
35 | | -/** |
36 | | - * 获取方法 ID |
37 | | - */ |
38 | 18 | jmethodID jnihelper_get_method_id(jclass clazz, const char *method_name, const char *signature); |
39 | | - |
40 | | -/** |
41 | | - * 获取静态方法 ID |
42 | | - */ |
43 | 19 | jmethodID jnihelper_get_static_method_id(jclass clazz, const char *method_name, const char *signature); |
44 | | - |
45 | | -/** |
46 | | - * 获取字段 ID |
47 | | - */ |
48 | 20 | jfieldID jnihelper_get_field_id(jclass clazz, const char *field_name, const char *signature); |
49 | | - |
50 | | -/** |
51 | | - * 获取静态字段 ID |
52 | | - */ |
53 | 21 | jfieldID jnihelper_get_static_field_id(jclass clazz, const char *field_name, const char *signature); |
54 | 22 |
|
55 | | -/** |
56 | | - * 创建 Java String |
57 | | - */ |
58 | | -jstring jnihelper_new_string(const char *str); |
59 | | - |
60 | | -/** |
61 | | - * Java String 转 C string(需要调用者释放内存) |
62 | | - */ |
63 | | -char* jnihelper_get_string(jstring jstr); |
64 | | - |
65 | | -/** |
66 | | - * 删除本地引用 |
67 | | - */ |
| 23 | +// ===== 引用管理 ===== |
| 24 | +jobject jnihelper_new_global_ref(jobject obj); |
| 25 | +jobject jnihelper_new_local_ref(jobject obj); |
68 | 26 | void jnihelper_delete_local_ref(jobject obj); |
69 | | - |
70 | | -/** |
71 | | - * 删除全局引用 |
72 | | - */ |
73 | 27 | void jnihelper_delete_global_ref(jobject obj); |
| 28 | +jclass jnihelper_get_object_class(jobject obj); |
74 | 29 |
|
75 | | -/** |
76 | | - * 检查并清除异常 |
77 | | - */ |
| 30 | +// ===== 异常 ===== |
78 | 31 | jboolean jnihelper_check_exception(); |
| 32 | +void jnihelper_clear_exception(); |
79 | 33 |
|
80 | | -/** |
81 | | - * 获取当前 Activity 或 Application |
82 | | - */ |
83 | | -jobject jnihelper_get_current_activity(); |
84 | | - |
85 | | -/** |
86 | | - * 获取 Unity Surface |
87 | | - * 调用链: UnityPlayer.currentActivity -> mUnityPlayer -> getSurfaceView() -> getHolder() -> getSurface() |
88 | | - */ |
89 | | -jobject jnihelper_get_unity_surface(); |
90 | | - |
91 | | -/** |
92 | | - * 获取 Unity ANativeWindow(从 Surface 对象转换) |
93 | | - * 返回可用于 ImGui_ImplAndroid_Init 的 ANativeWindow* |
94 | | - */ |
95 | | -struct ANativeWindow* jnihelper_get_unity_native_window(); |
96 | | - |
97 | | -/** |
98 | | - * 通用 JNI 调用辅助(供 C# P/Invoke 使用) |
99 | | - */ |
| 34 | +// ===== 字符串 ===== |
| 35 | +jstring jnihelper_new_string(const char *str); |
| 36 | +char* jnihelper_get_string(jstring jstr); |
| 37 | +const char* jnihelper_get_string_utf_chars(jstring jstr); |
| 38 | +void jnihelper_release_string_utf_chars(jstring jstr, const char *utf); |
| 39 | +jsize jnihelper_get_string_length(jstring jstr); |
| 40 | +jstring jnihelper_new_string_utf(const char *utf); |
| 41 | + |
| 42 | +// ===== 实例方法调用 (A 变体,通过 jvalue* 传参) ===== |
| 43 | +jobject jnihelper_call_object_method_a(jobject obj, jmethodID methodID, jvalue *args); |
| 44 | +jboolean jnihelper_call_boolean_method_a(jobject obj, jmethodID methodID, jvalue *args); |
| 45 | +jbyte jnihelper_call_byte_method_a(jobject obj, jmethodID methodID, jvalue *args); |
| 46 | +jchar jnihelper_call_char_method_a(jobject obj, jmethodID methodID, jvalue *args); |
| 47 | +jshort jnihelper_call_short_method_a(jobject obj, jmethodID methodID, jvalue *args); |
| 48 | +jint jnihelper_call_int_method_a(jobject obj, jmethodID methodID, jvalue *args); |
| 49 | +jlong jnihelper_call_long_method_a(jobject obj, jmethodID methodID, jvalue *args); |
| 50 | +jfloat jnihelper_call_float_method_a(jobject obj, jmethodID methodID, jvalue *args); |
| 51 | +jdouble jnihelper_call_double_method_a(jobject obj, jmethodID methodID, jvalue *args); |
| 52 | +void jnihelper_call_void_method_a(jobject obj, jmethodID methodID, jvalue *args); |
| 53 | + |
| 54 | +// ===== 实例方法调用 (无参简版) ===== |
100 | 55 | jobject jnihelper_call_object_method(jobject obj, jmethodID methodID); |
| 56 | + |
| 57 | +// ===== 静态方法调用 (A 变体) ===== |
| 58 | +jobject jnihelper_call_static_object_method_a(jclass clazz, jmethodID methodID, jvalue *args); |
| 59 | +jboolean jnihelper_call_static_boolean_method_a(jclass clazz, jmethodID methodID, jvalue *args); |
| 60 | +jbyte jnihelper_call_static_byte_method_a(jclass clazz, jmethodID methodID, jvalue *args); |
| 61 | +jchar jnihelper_call_static_char_method_a(jclass clazz, jmethodID methodID, jvalue *args); |
| 62 | +jshort jnihelper_call_static_short_method_a(jclass clazz, jmethodID methodID, jvalue *args); |
| 63 | +jint jnihelper_call_static_int_method_a(jclass clazz, jmethodID methodID, jvalue *args); |
| 64 | +jlong jnihelper_call_static_long_method_a(jclass clazz, jmethodID methodID, jvalue *args); |
| 65 | +jfloat jnihelper_call_static_float_method_a(jclass clazz, jmethodID methodID, jvalue *args); |
| 66 | +jdouble jnihelper_call_static_double_method_a(jclass clazz, jmethodID methodID, jvalue *args); |
| 67 | +void jnihelper_call_static_void_method_a(jclass clazz, jmethodID methodID, jvalue *args); |
| 68 | + |
| 69 | +// ===== 静态方法调用 (无参简版) ===== |
101 | 70 | jobject jnihelper_call_static_object_method(jclass clazz, jmethodID methodID); |
102 | | -jobject jnihelper_get_static_object_field(jclass clazz, jfieldID fieldID); |
| 71 | + |
| 72 | +// ===== 实例字段 Get/Set ===== |
103 | 73 | jobject jnihelper_get_object_field(jobject obj, jfieldID fieldID); |
104 | | -jclass jnihelper_get_object_class(jobject obj); |
| 74 | +jboolean jnihelper_get_boolean_field(jobject obj, jfieldID fieldID); |
| 75 | +jbyte jnihelper_get_byte_field(jobject obj, jfieldID fieldID); |
| 76 | +jchar jnihelper_get_char_field(jobject obj, jfieldID fieldID); |
| 77 | +jshort jnihelper_get_short_field(jobject obj, jfieldID fieldID); |
| 78 | +jint jnihelper_get_int_field(jobject obj, jfieldID fieldID); |
| 79 | +jlong jnihelper_get_long_field(jobject obj, jfieldID fieldID); |
| 80 | +jfloat jnihelper_get_float_field(jobject obj, jfieldID fieldID); |
| 81 | +jdouble jnihelper_get_double_field(jobject obj, jfieldID fieldID); |
| 82 | + |
| 83 | +void jnihelper_set_object_field(jobject obj, jfieldID fieldID, jobject value); |
| 84 | +void jnihelper_set_boolean_field(jobject obj, jfieldID fieldID, jboolean value); |
| 85 | +void jnihelper_set_byte_field(jobject obj, jfieldID fieldID, jbyte value); |
| 86 | +void jnihelper_set_char_field(jobject obj, jfieldID fieldID, jchar value); |
| 87 | +void jnihelper_set_short_field(jobject obj, jfieldID fieldID, jshort value); |
| 88 | +void jnihelper_set_int_field(jobject obj, jfieldID fieldID, jint value); |
| 89 | +void jnihelper_set_long_field(jobject obj, jfieldID fieldID, jlong value); |
| 90 | +void jnihelper_set_float_field(jobject obj, jfieldID fieldID, jfloat value); |
| 91 | +void jnihelper_set_double_field(jobject obj, jfieldID fieldID, jdouble value); |
| 92 | + |
| 93 | +// ===== 静态字段 Get/Set ===== |
| 94 | +jobject jnihelper_get_static_object_field(jclass clazz, jfieldID fieldID); |
| 95 | +jboolean jnihelper_get_static_boolean_field(jclass clazz, jfieldID fieldID); |
| 96 | +jbyte jnihelper_get_static_byte_field(jclass clazz, jfieldID fieldID); |
| 97 | +jchar jnihelper_get_static_char_field(jclass clazz, jfieldID fieldID); |
| 98 | +jshort jnihelper_get_static_short_field(jclass clazz, jfieldID fieldID); |
| 99 | +jint jnihelper_get_static_int_field(jclass clazz, jfieldID fieldID); |
| 100 | +jlong jnihelper_get_static_long_field(jclass clazz, jfieldID fieldID); |
| 101 | +jfloat jnihelper_get_static_float_field(jclass clazz, jfieldID fieldID); |
| 102 | +jdouble jnihelper_get_static_double_field(jclass clazz, jfieldID fieldID); |
| 103 | + |
| 104 | +void jnihelper_set_static_object_field(jclass clazz, jfieldID fieldID, jobject value); |
| 105 | +void jnihelper_set_static_boolean_field(jclass clazz, jfieldID fieldID, jboolean value); |
| 106 | +void jnihelper_set_static_byte_field(jclass clazz, jfieldID fieldID, jbyte value); |
| 107 | +void jnihelper_set_static_char_field(jclass clazz, jfieldID fieldID, jchar value); |
| 108 | +void jnihelper_set_static_short_field(jclass clazz, jfieldID fieldID, jshort value); |
| 109 | +void jnihelper_set_static_int_field(jclass clazz, jfieldID fieldID, jint value); |
| 110 | +void jnihelper_set_static_long_field(jclass clazz, jfieldID fieldID, jlong value); |
| 111 | +void jnihelper_set_static_float_field(jclass clazz, jfieldID fieldID, jfloat value); |
| 112 | +void jnihelper_set_static_double_field(jclass clazz, jfieldID fieldID, jdouble value); |
| 113 | + |
| 114 | +// ===== 数组 ===== |
| 115 | +jsize jnihelper_get_array_length(jarray array); |
| 116 | +jobject jnihelper_get_object_array_element(jobjectArray array, jsize index); |
| 117 | +void jnihelper_set_object_array_element(jobjectArray array, jsize index, jobject value); |
| 118 | + |
| 119 | +// ===== Unity 集成 ===== |
| 120 | +jobject jnihelper_get_current_activity(); |
| 121 | +jobject jnihelper_get_unity_surface(); |
| 122 | +struct ANativeWindow* jnihelper_get_unity_native_window(); |
105 | 123 | jobject jnihelper_surface_to_native_window(jobject surface); |
106 | 124 |
|
107 | | -/** |
108 | | - * 从 AInputEvent KeyEvent 提取 Unicode 字符(通过 JNI KeyEvent.getUnicodeChar) |
109 | | - */ |
| 125 | +// ===== Input 事件 ===== |
110 | 126 | uint32_t jnihelper_keyevent_get_unicode(AInputEvent *event); |
111 | | - |
112 | | -/** |
113 | | - * 从 Java InputEvent 对象提取并缓存 Unicode(配合 nativeInjectEvent hook) |
114 | | - */ |
115 | 127 | void jnihelper_capture_input_event_unicode(JNIEnv* env, jobject inputEvent); |
116 | 128 | uint32_t jnihelper_poll_captured_unicode(); |
117 | 129 |
|
| 130 | +// ===== Data 通道(C# <-> Java) ===== |
| 131 | +void jnihelper_set_data(const char *key, jint *data, int len); |
| 132 | +int jnihelper_get_data_len(const char *key); |
| 133 | +jint* jnihelper_get_data_buf(const char *key); |
| 134 | + |
118 | 135 | #ifdef __cplusplus |
119 | 136 | } |
120 | 137 | #endif |
|
0 commit comments