Răsfoiți Sursa

use JNIEnv object from SDL instead of forwarding from Java for Client

Andrey Filipenkov 2 ani în urmă
părinte
comite
5b1f3bf0db

+ 0 - 2
android/vcmi-app/src/main/java/eu/vcmi/vcmi/NativeMethods.java

@@ -30,8 +30,6 @@ public class NativeMethods
 
     public static native void initClassloader();
 
-    public static native void clientSetupJNI();
-
     public static native void createServer();
 
     public static native void notifyServerReady();

+ 0 - 2
android/vcmi-app/src/main/java/eu/vcmi/vcmi/util/LibsLoader.java

@@ -54,8 +54,6 @@ public final class LibsLoader
         loadCommon();
         loadLib("vcmiclient", false);
         SDL.setContext(ctx);
-        NativeMethods.clientSetupJNI();
-        NativeMethods.initClassloader();
     }
 
     public static void loadServerLibs()

+ 1 - 0
client/CMT.cpp

@@ -156,6 +156,7 @@ int main(int argc, char * argv[])
 #endif
 {
 #ifdef VCMI_ANDROID
+	CAndroidVMHelper::initClassloader(SDL_AndroidGetJNIEnv());
 	// boost will crash without this
 	setenv("LANG", "C", 1);
 #endif

+ 0 - 7
client/Client.cpp

@@ -778,13 +778,6 @@ void CClient::removeGUI()
 }
 
 #ifdef VCMI_ANDROID
-extern "C" JNIEXPORT void JNICALL Java_eu_vcmi_vcmi_NativeMethods_clientSetupJNI(JNIEnv * env, jclass cls)
-{
-	logNetwork->info("Received clientSetupJNI");
-
-	CAndroidVMHelper::cacheVM(env);
-}
-
 extern "C" JNIEXPORT void JNICALL Java_eu_vcmi_vcmi_NativeMethods_notifyServerClosed(JNIEnv * env, jclass cls)
 {
 	logNetwork->info("Received server closed signal");

+ 7 - 2
lib/CAndroidVMHelper.cpp

@@ -96,9 +96,9 @@ jclass CAndroidVMHelper::findClass(const std::string & name, bool classloaded)
 	return get()->FindClass(name.c_str());
 }
 
-extern "C" JNIEXPORT void JNICALL Java_eu_vcmi_vcmi_NativeMethods_initClassloader(JNIEnv * baseEnv, jclass cls)
+void CAndroidVMHelper::initClassloader(void * baseEnv)
 {
-	CAndroidVMHelper::cacheVM(baseEnv);
+	CAndroidVMHelper::cacheVM(static_cast<JNIEnv *>(baseEnv));
 	CAndroidVMHelper envHelper;
 	auto env = envHelper.get();
 	auto anyVCMIClass = env->FindClass(CAndroidVMHelper::NATIVE_METHODS_DEFAULT_CLASS);
@@ -108,4 +108,9 @@ extern "C" JNIEXPORT void JNICALL Java_eu_vcmi_vcmi_NativeMethods_initClassloade
 	vcmiClassLoader = (jclass) env->NewGlobalRef(env->CallObjectMethod(anyVCMIClass, getClassLoaderMethod));
 	vcmiFindClassMethod = env->GetMethodID(classLoaderClass, "findClass", "(Ljava/lang/String;)Ljava/lang/Class;");
 }
+
+extern "C" JNIEXPORT void JNICALL Java_eu_vcmi_vcmi_NativeMethods_initClassloader(JNIEnv * baseEnv, jclass cls)
+{
+	CAndroidVMHelper::initClassloader(baseEnv);
+}
 #endif

+ 2 - 0
lib/CAndroidVMHelper.h

@@ -42,6 +42,8 @@ public:
 
 	static void cacheVM(JNIEnv * env);
 
+	static void initClassloader(void * baseEnv);
+	
 	static constexpr const char * NATIVE_METHODS_DEFAULT_CLASS = "eu/vcmi/vcmi/NativeMethods";
 };