两个不同Java文件中的相同JNI方法

时间:2014-09-10 05:46:12

标签: java android c java-native-interface

是否可以在两个不同的Java文件中使用相同的JNI方法?

例如, 我在c中有一个方法add()。我在JNI文件中编写了addJNI()。现在可以在两个不同的文件a.java和b.java

中调用addJNI()

希望我很清楚。

感谢。

3 个答案:

答案 0 :(得分:2)

是的,这是可能的。您只需要在一个java类文件中加载其本机库。并在所需的文件中使用该类。

这是Hellojni.c

#include "HelloWorld.h"
#include "jni.h"
#include  "stdio.h"

JNIEXPORT void JNICALL Java_HelloWorld_print(JNIEnv *env, jobject obj)
{
  printf("Hello world\n");
  return;
}

现在你可以让任何java类调用那个jni方法

class HelloWorld {

    public static native void print();  //native method

    static   //static initializer code
    {
        System.loadLibrary("CLibHelloWorld");
    } 

}

现在可以根据需要在多个java文件中使用该java类

    HelloWorld.print();

答案 1 :(得分:1)

当然,它与调用任何其他方法相同。但只是编写一个名为addJNI()的方法是不行的。您必须遵守javah工具生成的标头语法。

答案 2 :(得分:0)

是的,毫无疑问,请写一个包含JNI的Wrapper方法的类,它类似于接口类b \ w Java和C.

例如:

public class myWrapperClass
{
 static
{
  java.lang.System.loadLibraray("mylibraray");
}

public static void myfunctionOne(String str1, String str2);
public static int  myfunctionTwo(int num1, String str2);
----
---more methods
------

}

//To call these methods in different classes as they are abstract and static:

myWrapperClass.myfunctionOne("Hello", "JNI");

myWrapperClass.myfunctionTwo("1 , Number");

希望这有助于。