我正在开发一个涉及 JNI 的 Android Studio 项目,以在 Java 中创建的数组上运行一些信号处理函数。我需要能够从 Java 中为 C 提供一个 double 数组,运行过滤器,然后将 Java 发送回数组。过滤功能通过 CMake 在 Android 环境中运行良好。进行测试,我能够毫无问题地从 C 到 Java 获得 double 类型的数组。我有一个将数组从 Java 发送到 C 的函数。我的问题是,我不太确定如何将该数组发送到我的过滤函数以将其发送回 Java。
java中的public static native double addArray(double []arr)方法在我的algorithm.c文件中进行了相应的编码:
jdouble JNICALL
Java_com_example_covid19_MainActivity_addArray(JNIEnv *env, jclass clazz, jdoubleArray jarr) {
static double dv[2890080];
static double y_fil[2890080];
jdouble *arr = (*env)->GetDoubleArrayElements(env, jarr, NULL);
double res=0;
int size = (*env)->GetArrayLength(env, jarr);
for(int i=0;i<size;i++)
dv[i] = arr[i];
(*env)->ReleaseDoubleArrayElements(env, jarr, arr, 0);
filtering(dv, y_fil);
return res;
}
在上述函数中,当我调用过滤(dv,y_fil)时,如果我能够将 dv 数组发送回 Java,我会很高兴。但是将数组发送回 Java 需要单独的 JNICALL。我从这里感到困惑,虽然我在网上看到了很多从 C 到 Java 处理数据的示例,但我还没有看到涉及首先从 Java 获取数据的示例。任何见解将不胜感激。