我有大量的 Java 代码(只有计算函数,没有 UI),我想在 iOS 中将它们作为静态库重用。我的做法是使用robovm,按照robovm论坛两篇文章中描述的非官方方式创建静态库:1基本方式和2精制版
尝试完全按照描述的步骤操作,不幸的是,在使用脚本创建共享库、在 Xcode 中链接库 (.a) 并成功构建项目后,我被卡住了。
在运行时,我看到我的 C++ 桥接代码被调用,但 JNI 调用回库失败并出现 BAD_ACCESS。例如以下行崩溃:
jclass myJavaClass = jniEnv->FindClass("com/test/robovm/bridge/MyJavaRoboCode");
在这种方法中:
void callSomethingInJava(const char* arg) {
// To call into java from your native app, use JNI
Env* rvmEnv = rvmGetEnv();
JNIEnv* jniEnv = &(rvmEnv->jni);
jclass myJavaClass = jniEnv->FindClass("com/test/robovm/bridge/MyJavaRoboCode");
jmethodID myJavaMethod = jniEnv->GetStaticMethodID(myJavaClass, "callJava", "(Ljava/lang/String;)V");
jstring argAsJavaString = jniEnv->NewStringUTF(arg);
jniEnv->CallStaticVoidMethod(myJavaClass, myJavaMethod, argAsJavaString);
}
如果我尝试直接使用 rvmXX 方法而不是 JNI 并尝试访问我的“Java”类中的某些内容,情况也是如此。看起来 rvmEnv 没有完全初始化。(我仔细检查了包名错误或拼写错误)。
如果有人已经成功地从 robovm 项目创建了一个共享静态库,并且可以在这里分享经验或指出我解决问题的正确方向,那就太好了。