Java NDK JNI函数调用
我刚开始使用NDK,因为我的Android SDK代码没有给出令人满意的结果,尽管我从未尝试过用C/C++编写代码。 到目前为止,我生成了两个本机函数的头,Java NDK JNI函数调用,java,android,android-ndk,java-native-interface,Java,Android,Android Ndk,Java Native Interface,我刚开始使用NDK,因为我的Android SDK代码没有给出令人满意的结果,尽管我从未尝试过用C/C++编写代码。 到目前为止,我生成了两个本机函数的头,fft\u transform()和convalve() 我想把代码的用法写下来。 问题是,fft\u transform调用其他C函数,并在另一个C函数中调用自身 JNIEXPORT void JNICALL Java_com_example_ffttest_FFTActivity_transform (JNIEnv *env, jobje
fft\u transform()
和convalve()
我想把代码的用法写下来。
问题是,fft\u transform
调用其他C函数,并在另一个C函数中调用自身
JNIEXPORT void JNICALL Java_com_example_ffttest_FFTActivity_transform
(JNIEnv *env, jobject obj, jdoubleArray real, jdoubleArray imag, jint n)
{
if (n == 0)
return 1;
else if ((n & (n - 1)) == 0) // Is power of 2
return transform_radix2(real, imag, n);
else // More complicated algorithm for arbitrary sizes
return transform_bluestein(real, imag, n);
}
我应该在标头中声明非JNI函数,还是将它们更改为JNI函数?
如何在非JNI函数中添加JNI*env
和jobj obj
变量
例如:
int inverse_transform(double real[], double imag[], size_t n) {
return Java_com_example_ffttest_FFTActivity_transform(env, obj, imag, real, n);
}
请考虑我在开始投票前从不使用C/C++,也不要使用NDK。
if(n==0)返回1代码>
更改Java方法并相应地重新创建/更新JNI头
你是想把结果从C++发送回java吗?是的,卷积的结果会被发送回java。算法的java版本对你来说不够快?但那是很久以前的事了。现在,它工作得很好:)谢谢你的澄清@Robert,所以现在我需要自己“重写”函数。我也不能在另一个JNI函数中调用JNI函数?这应该是可能的,但只有在少数情况下才有意义。最好以这种方式处理它,以便在从JNI函数调用的普通C/C++函数中实现功能。