Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JNI从java类调用.SO函数_Java_Android_Java Native Interface_.so - Fatal编程技术网

使用JNI从java类调用.SO函数

使用JNI从java类调用.SO函数,java,android,java-native-interface,.so,Java,Android,Java Native Interface,.so,我知道这看起来很奇怪,但是,现在我有一个.SO(C中的共享对象),必须在我的Android项目中使用 现在,我的要求是在Java中直接调用.SO中的函数,为.SO中的头创建JNI包装器 我的问题是我假设流量是什么 1.创建JNI本机方法->然后创建头文件,然后->从头文件创建这些方法的实现,将.SO中的.h文件包含在本地实现中,并调用.SO中的方法 或 直接为.SO中的头文件创建JNI本机方法,它将直接调用C方法 或 我们还有别的办法吗 如果我遗漏了什么,请纠正我 我在同一个网站上引用了一些在线

我知道这看起来很奇怪,但是,现在我有一个.SO(C中的共享对象),必须在我的Android项目中使用

现在,我的要求是在Java中直接调用.SO中的函数,为.SO中的头创建JNI包装器

我的问题是我假设流量是什么

1.创建JNI本机方法->然后创建头文件,然后->从头文件创建这些方法的实现,将.SO中的.h文件包含在本地实现中,并调用.SO中的方法

  • 直接为.SO中的头文件创建JNI本机方法,它将直接调用C方法

  • 我们还有别的办法吗
  • 如果我遗漏了什么,请纠正我

    我在同一个网站上引用了一些在线内容,我可以说下面的例子与我需要的完全不同

    通常,您有:

    • lib.so
      -黑匣子
    • lib.h
      -库头文件公开了一些lib.so方法。这些是您可以访问的方法
    • jni.cpp
      jni.h
      文件-此代码是java和lib端之间的桥梁。在这里,您将导入
      lib.h
      头文件。这样,您可以接收来自java端的调用,与
      lib.so
      方法通信,并将结果发送回java端
    最后,您必须有一个JNI代码,负责与java和lib端进行对话。这种实现可以是非常基本的,比如调用一个lib方法并返回结果,也可以是更复杂的,比如启动一个线程,等待结果,然后在完成后报告,等等,使用更复杂的类等等

    在任何情况下,您的JNI代码(单个方法或更复杂的类)必须包含
    lib.h
    头文件,以便能够调用
    lib.so
    方法。

    通常,您有:

    • lib.so
      -黑匣子
    • lib.h
      -库头文件公开了一些lib.so方法。这些是您可以访问的方法
    • jni.cpp
      jni.h
      文件-此代码是java和lib端之间的桥梁。在这里,您将导入
      lib.h
      头文件。这样,您可以接收来自java端的调用,与
      lib.so
      方法通信,并将结果发送回java端
    最后,您必须有一个JNI代码,负责与java和lib端进行对话。这种实现可以是非常基本的,比如调用一个lib方法并返回结果,也可以是更复杂的,比如启动一个线程,等待结果,然后在完成后报告,等等,使用更复杂的类等等


    在任何情况下,您的JNI代码(无论是单个方法还是更复杂的类)必须包含
    lib.h
    头文件,以便能够调用
    lib.so
    方法。

    在这里查看基本示例:(hello world),(从另一个.so文件调用函数)在这里查看基本示例:(hello world),(从另一个.so文件调用函数)