我是JNI编程的新手,我可以像从不同的JNI命名空间定义中一样调用本机方法吗?
例如:
package com.example.hellojni;
public class HelloJni extends Activity
{
public native int MyMethod();
public native int OtherMethod(); // this works have the namespace package=jniexport interface
static {System.loadLibrary("hello-jni");}
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
int b = OtherMethod(); //works
int a = MyMethod(); //ERROR java.lang.reflect.InvocationTargetException
}
}
================File.c================
JNIEXPORT int JNICALL Java_Cardioline_HelloJni_MyMethod(JNIEnv *env, jobject thisObj)
{
return 1;
}
JNIEXPORT int JNICALL Java_com_example_hellojni_HelloJni_OtherMethod(JNIEnv *env, jobject thisObj)
{
return 2;
}
发布于 2014-06-15 13:14:40
不,JNI方法名是由javah预先定义的。试着从这里开始:
http://blog.edwards-research.com/2012/04/tutorial-android-jni/
javah将为您提供头部,您必须将方法声明复制到.c文件中。
如果您想调用另一个类中的JNI方法,请在java中调用另一个类。基本上改变这一点:
int a = MyMethod();
要这样做:
int a = new CardioLine.HelloJni().MyMethod();
通常,我有Java文件到.c/.cpp文件的一对一映射。这可能也是您想要的(对于具有本机方法的Java类)。
https://stackoverflow.com/questions/24204497
复制相似问题