diff --git a/lib/motion/project/template/android.rb b/lib/motion/project/template/android.rb index f34c2533..731eda26 100644 --- a/lib/motion/project/template/android.rb +++ b/lib/motion/project/template/android.rb @@ -162,36 +162,50 @@ EOS #include #include #include +extern "C" { + void rb_vm_register_native_methods(void); + bool rb_vm_init(const char *app_package, const char *rm_env, const char *rm_version, JNIEnv *env); + void *rb_vm_top_self(void); + void rb_rb2oc_exc_handler(void); EOS ruby_objs.each do |_, init_func| - payload_c_txt << "void #{init_func}(void *rcv, void *sel);\n" + payload_c_txt << <GetEnv(vm, (void **)&env, JNI_VERSION_1_6) != JNI_OK) { + if (vm->GetEnv((void **)&env, JNI_VERSION_1_6) != JNI_OK) { return -1; } assert(env != NULL); rb_vm_init("#{App.config.package_path}", "#{App.config.rubymotion_env_value}", "#{Motion::Version}", env); + void *top_self = rb_vm_top_self(); + try { EOS ruby_objs.each do |_, init_func| - payload_c_txt << " (*env)->PushLocalFrame(env, 32);\n" - payload_c_txt << " #{init_func}(NULL, NULL);\n" - payload_c_txt << " (*env)->PopLocalFrame(env, NULL);\n" + payload_c_txt << " env->PushLocalFrame(32);\n" + payload_c_txt << " #{init_func}(top_self, NULL);\n" + payload_c_txt << " env->PopLocalFrame(NULL);\n" end payload_c_txt << <