문제

IOS에서 정적 라이브러리로 재사용하고자하는 많은 양의 Java 코드 (계산 함수, UI가 없음)가 있습니다. 내 접근 방식은 Robovm 를 사용하고 비공식적 인 방법을 따라 Robovm 포럼의 두 기사에서 설명한 정적 라이브러리를 만듭니다. : 기본 방법 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);
.

}

JNI 대신 RVMXX 메서드를 직접 사용하려고하면 "Java"클래스에서 뭔가에 액세스하려고 시도하십시오. RVMENV가 완전히 초기화되지 않는 것처럼 보입니다. 패키지 이름 오류 또는 오타를 두 번 확인합니다.

누군가가 Robovm 프로젝트에서 공유 정적 라이브러리의 생성에 대해 이미 성공했고 여기에서 경험을 공유하거나 올바른 방향으로 나를 가리킬 수있는 경우 문제를 해결할 수 있습니다.

도움이 되었습니까?

해결책

언급 한 것에 따라, 당신은 아마도 Robovm을 초기화하지 않았을 것입니다.

메소드를 만들어야합니다. initrobovm ()을 다소 미러 BC.C의 주요 방법으로 만들어야합니다.이것은 Robovm을 초기화하려는 경우 코드에서 호출됩니다.앱 경로를 전달해야합니다. 테스트 할 때 하드 코드 할 수 있습니다.

initrobovm ()은 Java 앱의 주요 방법을 호출해서는 안된다. 적어도 동작하는 도서관이 IMO를 수행해서는 안된다는 것이 필요합니다.또한 rvmshutdown을 호출하지 않아야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top