@@ -19,6 +19,11 @@ import Foundation
19
19
#endif
20
20
21
21
public typealias JavaVMPointer = UnsafeMutablePointer < JavaVM ? >
22
+ #if canImport(Android)
23
+ typealias JNIEnvPointer = UnsafeMutablePointer < JNIEnv ? >
24
+ #else
25
+ typealias JNIEnvPointer = UnsafeMutableRawPointer
26
+ #endif
22
27
23
28
public final class JavaVirtualMachine : @unchecked Sendable {
24
29
/// The JNI version that we depend on.
@@ -61,7 +66,7 @@ public final class JavaVirtualMachine: @unchecked Sendable {
61
66
) throws {
62
67
self . classpath = classpath
63
68
var jvm : JavaVMPointer ? = nil
64
- var environment : UnsafeMutableRawPointer ? = nil
69
+ var environment : JNIEnvPointer ? = nil
65
70
var vmArgs = JavaVMInitArgs ( )
66
71
vmArgs. version = JavaVirtualMachine . jniVersion
67
72
vmArgs. ignoreUnrecognized = jboolean ( ignoreUnrecognized ? JNI_TRUE : JNI_FALSE)
@@ -161,12 +166,18 @@ extension JavaVirtualMachine {
161
166
return environment. assumingMemoryBound ( to: JNIEnv ? . self)
162
167
}
163
168
169
+ #if canImport(Android)
170
+ var jniEnv = environment? . assumingMemoryBound ( to: JNIEnv ? . self)
171
+ #else
172
+ var jniEnv = environment
173
+ #endif
174
+
164
175
// Attach the current thread to the JVM.
165
176
let attachResult : jint
166
177
if asDaemon {
167
- attachResult = jvm. pointee!. pointee. AttachCurrentThreadAsDaemon ( jvm, & environment , nil )
178
+ attachResult = jvm. pointee!. pointee. AttachCurrentThreadAsDaemon ( jvm, & jniEnv , nil )
168
179
} else {
169
- attachResult = jvm. pointee!. pointee. AttachCurrentThread ( jvm, & environment , nil )
180
+ attachResult = jvm. pointee!. pointee. AttachCurrentThread ( jvm, & jniEnv , nil )
170
181
}
171
182
172
183
// If we failed to attach, report that.
@@ -175,9 +186,13 @@ extension JavaVirtualMachine {
175
186
throw attachError
176
187
}
177
188
178
- JavaVirtualMachine . destroyTLS. set ( environment !)
189
+ JavaVirtualMachine . destroyTLS. set ( jniEnv !)
179
190
180
- return environment!. assumingMemoryBound ( to: JNIEnv ? . self)
191
+ #if canImport(Android)
192
+ return jniEnv!
193
+ #else
194
+ return jniEnv!. assumingMemoryBound ( to: JNIEnv ? . self)
195
+ #endif
181
196
}
182
197
183
198
/// Detach the current thread from the Java Virtual Machine. All Java
0 commit comments