Создать статическую библиотеку iOS из проекта robovm (BAD_ACCESS в JNI)
У меня есть большой объем кода Java (только функции вычисления, без пользовательского интерфейса), который я хочу использовать в качестве статической библиотеки в iOS. Мой подход заключался в использованииrobovm и следуйте неофициальному способу создания статической библиотеки, описанной в двух статьях на форуме robovm:1 Базовый способ а также2 Уточненная версия
Попытка выполнить шаги точно так, как описано, я, к сожалению, застрял после создания общей библиотеки со сценарием, связывания библиотеки (.a) в Xcode и успешного построения проекта.
Во время выполнения я вижу, что мой код моста 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 и мог бы поделиться здесь опытом или указать мне верное направление для решения проблемы.