Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.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
Java Android ndk jni自动生成函数_Java_Android_C_Android Ndk_Java Native Interface - Fatal编程技术网

Java Android ndk jni自动生成函数

Java Android ndk jni自动生成函数,java,android,c,android-ndk,java-native-interface,Java,Android,C,Android Ndk,Java Native Interface,我已经有一个现有的C代码,我在其他项目中使用。 我研究了一种在我的Android应用程序中重用C代码的方法,并通过NDK,解决了所有问题 但为了让它工作,我必须创建基本上包装我的C代码的JNI文件 比如说, 这是我的C代码: multiply.h int mult(int val1, int val2); multiple.c int mult(int val1, int val2) { return val1 * val2; } 然后我必须创建一个multiply jni文件,该文件如下所

我已经有一个现有的C代码,我在其他项目中使用。 我研究了一种在我的Android应用程序中重用C代码的方法,并通过NDK,解决了所有问题

但为了让它工作,我必须创建基本上包装我的C代码的JNI文件

比如说,

这是我的C代码:

multiply.h
int mult(int val1, int val2);

multiple.c
int mult(int val1, int val2) { return val1 * val2; }
然后我必须创建一个multiply jni文件,该文件如下所示:

multiply-jni.c

#include <jni.h>
#include "multiply.h"

jint Java_com_example_ndktest_NativeLib_mult
(JNIEnv * env, jobject obj, jint value1, jint value2)
{
    return mult(value1, value2);
}
乘以jni.c
#包括
#包括“multiply.h”
jint Java_com_示例_ndktest_NativeLib_mult
(JNINEV*env、jobject对象、jint值1、jint值2)
{
返回mult(值1、值2);
}
然后我使用ndk构建工具生成共享库


我的问题是,有没有办法自动生成multiply jni.c文件?我真的不想手工操作,因为C代码可能非常大……

您可以尝试解析.h文件并发出一个.java文件。使用JNI,您可以使用Java中自然的方法设计一个Java类,然后用C实现它们。用Java进行一些实现通常是有帮助的,这样您的类就可以有一个公共接口和私有的本机方法声明。一旦将.java文件编译成.class文件,就可以使用
javah
为JNI实现生成.h文件

如果您希望用Java完成所有工作,那么可以使用JNA。它使用Java类调用JNA库(它本身使用JNI)。Jnaboror可以将.h文件转换为所需的Java代码。为了有效地使用jnavior,您可能需要重写.h文件,使其只包含希望在Java中使用的类型和函数

更新: 有点类似于JN的是SWIG。“SWIG通常用于解析C/C++接口,并生成……目标语言调用到……C/C++代码所需的‘粘合代码’。”


同样,简化头文件是有利的。SWIG还允许您对C声明进行注释,以指导代码生成。它下面也使用了JNI。

我读到的问题是,试图自动生成一个C文件,其中包含JNI兼容的函数,包装现有的、JNI不兼容的函数。@ChrisStratton我想你是对的。我添加了关于使用SWIG生成Java和C代码的信息。SWIG正是我想要的!