Java方法调用两次从c++ JNI NDK函数
Java method called twice from C++ JNI NDK function
我有一些c++ NDK代码通过JNI调用Java方法。问题是我的Java方法被调用了两次。似乎一旦我使用GetMethodID获得方法的句柄,然后调用env->NewObject w/该方法ID,我的java函数被调用。
当我调用env->CallVoidMethod(obj, mid)时,它再次被调用,这是预期的。我只是不确定为什么它被称为当我创建一个新对象?
C++ Code:
---------
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved)
{
jvm = vm;
start();
return JNI_VERSION_1_6;
}
void start() {
JNIEnv *env = NULL;
jvm->GetEnv((void**)&env, JNI_VERSION_1_6);
jclass cls = env->FindClass("com/test/Test");
jmethodID mid = env->GetMethodID(cls, "StartApp", "()V");
jobject obj = env->NewObject(cls, mid);
if (mid != 0){
env->CallVoidMethod(obj, mid);
}
}
Java Code:
----------
public void StartApp(){
android.util.Log.e("Test", "Java Method Called from Native");
}
NewObject接受构造函数作为参数,因此
jobject obj = env->NewObject(cls, mid);
这将调用第一个StartApp()
,但请注意,由于它不是一个合适的构造函数,这将给您带来麻烦。
对于构造函数,根据手册,这个ID必须通过调用GetMethodID()和
相关文章:
- 通过JNI传递数据数组的最快方法是什么
- 为 NewObjectA() 函数创建 jvalues 的参数数组时出错 - JNI Invocation API
- 将 C# DLL 导入 C++ 以用于 JNI
- 用C++包装 Java 库 (JNI)
- 如何通过 JNI 将 C 字符串表情符号传递给 Java
- JNI从Android调用C++方法
- JVM 如何执行 JNI
- React Native (Android):无法通过 JNI 在 jobject 中返回字符串
- 如何将字符串数组返回到 java JNI
- JNI 日期值转换问题,在C++中获取不同的长整型值
- JNI,使用两个 .so 文件时出错,其中一个文件需要另一个文件
- Winapi - SetWindowLongPtr in ShutdownBlockReason创建/销毁JNI本机代码
- 将预编译的 C 共享库与 JNI/NDK 结合使用
- JNI 在应用程序中检测到错误:在为 innerclass 调用 NewObject 时使用了无效的 jobject
- 使用 jni 将返回带有模板的对象的 Java 代码转换为 c++
- 无法将DefineClass(JNI)与Qt资源一起使用
- 使用本机 JNI 静态方法实现C++ Java 运行时错误
- 从C++调用dll实现的JNI
- 如何在JNI中从线程内部调用JAVA方法
- 如何从 C/C++ 在 JNI for Java 中创建 UTF16 字符串?