Erstellen einer statischen iOS-Bibliothek aus einem Robovm-Projekt (BAD_ACCESS in JNI)

Ich habe eine große Menge an Java-Code (nur Berechnungsfunktionen, keine Benutzeroberfläche), den ich in iOS als statische Bibliothek wiederverwenden möchte. Mein Ansatz war zu verwendenrobovm und befolgen Sie die inoffizielle Methode zum Erstellen einer statischen Bibliothek, die in den beiden Artikeln im robovm-Forum beschrieben wird:1 Grundsätzlicher Weg und2 Verfeinerte Version

Beim Versuch, die Schritte genau wie beschrieben auszuführen, blieb ich leider hängen, nachdem ich die gemeinsam genutzte Bibliothek mit dem Skript erstellt, die Bibliothek (.a) in Xcode verknüpft und das Projekt erfolgreich erstellt hatte.

Während der Laufzeit sehe ich, dass mein C ++ - Bridge-Code aufgerufen wird, aber die JNI-Aufrufe an die Bibliothek mit einem BAD_ACCESS fehlschlagen. Zum Beispiel stürzt die folgende Zeile ab:

jclass myJavaClass = jniEnv->FindClass("com/test/robovm/bridge/MyJavaRoboCode");

in dieser Methode:

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);

}

Das gleiche gilt, wenn ich versuche, die rvmXX-Methoden direkt anstelle von JNI zu verwenden und auf etwas in meinen "Java" -Klassen zuzugreifen. Es sieht so aus, als ob rvmEnv nicht vollständig initialisiert ist. (Ich habe zweimal nach Paketnamenfehlern oder Tippfehlern gesucht).

Es wäre großartig, wenn jemand bereits mit der Erstellung einer gemeinsam genutzten statischen Bibliothek aus einem Robovm-Projekt erfolgreich wäre und die Erfahrung hier teilen oder mich in die richtige Richtung lenken könnte, um das Problem zu lösen.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage