X-Git-Url: http://nitlanguage.org diff --git a/lib/android/dalvik.nit b/lib/android/dalvik.nit index ffb5c83..dc335dc 100644 --- a/lib/android/dalvik.nit +++ b/lib/android/dalvik.nit @@ -17,23 +17,25 @@ # Java related services specific to Android and its Dalvik VM module dalvik -import native_app_glue +import activities + +redef class App + # The main Java Activity of this application + fun native_activity: NativeActivity is abstract +end extern class JavaClassLoader in "Java" `{java.lang.ClassLoader`} super JavaObject end redef class Sys - # Get the running JVM - redef fun create_default_jvm - do - var jvm = app.native_app_glue.ndk_native_activity.vm - var jni_env = jvm.attach_current_thread - if jni_env.address_is_null then jni_env = jvm.env + # We cannot create a JVM on Android + # + # This method is not reachable on this platform anyway. + # `Sys::jvm` is implemented by the main activity modules. + redef fun create_default_jvm do abort - self.jvm = jvm - self.jni_env = jni_env - end + redef fun jni_env do return jvm.attach_current_thread private var class_loader: nullable JavaObject = null private var class_loader_method: nullable JMethodID = null @@ -41,7 +43,7 @@ redef class Sys do var class_loader = self.class_loader if class_loader == null then - find_class_loader(app.native_app_glue.ndk_native_activity.java_native_activity) + find_class_loader app.native_activity class_loader = self.class_loader assert class_loader != null end @@ -53,7 +55,7 @@ redef class Sys end private fun find_class_loader(native_activity: NativeActivity) import jni_env, class_loader=, JavaObject.as nullable, class_loader_method=, JMethodID.as nullable `{ - JNIEnv *env = Sys_jni_env(recv); + JNIEnv *env = Sys_jni_env(self); // Retrieve main activity jclass class_activity = (*env)->GetObjectClass(env, native_activity); @@ -94,8 +96,8 @@ redef class Sys } // Return the values to Nit - Sys_class_loader__assign(recv, JavaObject_as_nullable((*env)->NewGlobalRef(env, instance_class_loader))); - Sys_class_loader_method__assign(recv, JMethodID_as_nullable(class_class_loader_findClass)); + Sys_class_loader__assign(self, JavaObject_as_nullable((*env)->NewGlobalRef(env, instance_class_loader))); + Sys_class_loader_method__assign(self, JMethodID_as_nullable(class_class_loader_findClass)); // Clean up (*env)->DeleteLocalRef(env, class_activity); @@ -104,7 +106,7 @@ redef class Sys `} private fun load_jclass_intern(instance_class_loader: JavaObject, class_loader_findClass: JMethodID, name: NativeString): JClass import jni_env `{ - JNIEnv *env = Sys_jni_env(recv); + JNIEnv *env = Sys_jni_env(self); jobject class_name = (*env)->NewStringUTF(env, name); jclass java_class = (*env)->CallObjectMethod(env, instance_class_loader, class_loader_findClass, class_name);