natario1
12/05/2021, 8:50 PMJavaVM* vm;
GetJavaVM(&vm);
With kotlin.cinterop types and my solution seems so verbose. Are there better APIs that I'm missing?
val vm: CPointerVar<JavaVMVar> = allocPointerTo()
val vm2: CPointerVar<CPointerVar<JavaVMVar>> = allocPointerTo()
vm2.pointed = vm
GetJavaVM(vm2.value!!)
Joakim Forslund
12/07/2021, 7:14 PM@CName("JNI_OnLoad")
fun JNI_OnLoad(
vm: kotlinx.cinterop.CPointer<JavaVMVar>,
reserved: kotlinx.cinterop.CValuesRef<*>
): platform.android.jint {
mJniBridge = JniBridge(vm)
return JNI_VERSION_1_6
}
@CName("JNI_OnUnload")
fun JNI_OnUnload(vm: kotlinx.cinterop.CPointer<JavaVMVar>?, reserved: kotlinx.cinterop.CValuesRef<*>?): kotlin.Unit {
mJniBridge = null
}
Is available if you are using code that loads your/a library from javanatario1
12/07/2021, 7:19 PMGetJavaVM
itself is working fine, but I was wondering if kotlin.cinterop had some better APIs especially for doing &vm
, which is three characters in C and three lines in Kotlin.Joakim Forslund
12/07/2021, 7:53 PMpampanet
12/09/2021, 10:46 PM@CName("JNI_OnLoad")
fun JNI_OnLoad(
vm: CPointer<JavaVMVar>,
preserved: COpaquePointer
): jint {
logInfo("JNI On Load")
return memScoped {
val envStorage = alloc<CPointerVar<JNIEnvVar>>()
val vmValue = vm.pointed.pointed!!
...
I don’t know why but the vmValue
throws a NullPointerException in an Android Emulator (X86)pampanet
12/09/2021, 10:47 PMI/KonanActivity: JNI On Load
I/Konan_main: Uncaught Kotlin exception:
kotlin.NullPointerException
I/Konan_main: at (0xeb2ee03f)
at (0xeb2f460d)
at JNI_OnLoad (0xeb325703)
at _ZN3art9JavaVMExt17LoadNativeLibraryEP7_JNIEnvRKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEP8_jobjectP7_jclassPS9_ (0xeeda4609)
at JVM_NativeLoad (0x9c26e2a3)
at Runtime_nativeLoad (0x9c2309d7)
at (0x6f9988db)
A/libc: Fatal signal 6 (SIGABRT), code -1 (SI_QUEUE) in tid 14634 (ication.android), pid 14634 (ication.android)
pampanet
12/09/2021, 10:48 PMpampanet
12/10/2021, 2:22 AM