【发布时间】:2015-03-17 21:15:14
【问题描述】:
我正在尝试编译一个使用 *.c 文件的应用程序。
要编译它,我必须使用 NDK。
下载了64位版本,上网找了配置gradle的小技巧。
似乎配置没问题,gradle 尝试运行 NDK 构建过程。
它通过调用 ndk-build.cmd 来执行此操作并停止并出现以下错误:
\AppData\Local\VirtualStore\Windows\SysWOW64\android-ndk-r10d\ndk-build.cmd": CreateProcess error=2, 系统找不到指定的文件
我在整个文件夹中搜索了 ndk-build.cmd,但没有。
我到底错过了什么?
EDIT1:NDK 安装在这里:
#ndk.dir=C\:\\Users\\user\\AppData\\Local\\VirtualStore\\Windows\\SysWOW64\\android-ndk-r10d
EDIT2:我确实试过我的系统路径没问题,这不是问题。然而,我确实安装了 32 位版本,而这个版本确实有 *.cmd 文件。
我现在可以编译 *.c 文件了。
我在 AndroidStudio 终端中使用了这个命令:
ndk-build -C C:\Users\Thatisme\AndroidStudioProjects\DeezerAP2\app\src\main\jni
所有 *.c、*.h、*.mk 和 *.sh 都放在 jni 文件夹中,如下图所示。
EDIT3:我现在可以生成 *.so 文件,但由于某种原因,找不到本机方法。
EDIT4:
这就是我的项目的样子:
我手动复制了 jniLibs 文件夹中的 *.so 文件。
*.c 函数的声明好吗?
JNIEXPORT jobject JNICALL Java_com_lexample_liggy_ldeezerap_SerialPort_open
(JNIEnv *env, jclass thiz, jstring path, jint baudrate, jint flags)
EDIT5:我终于做到了。函数的正确名称是:
JNIEXPORT jobject JNICALL Java_com_example_iggy_deezerap_SerialPort_open
(JNIEnv *env, jclass thiz, jstring path, jint baudrate, jint flags)
Package name is: com.example.iggy.deezerap
Java file calling the function "open()" is: SerialPort
The source file containing the native function is named: SerialPort.c
The function beeing called is: open()
我重新编译了 *.c 文件,将它们也复制到 jniLibs 中,重新编译了 Android 项目,现在它可以工作了。
我很确定我以前有过这种情况,我强烈怀疑这是由于 *.c 函数中的某种不匹配错误造成的。
关于粗体中的内容:
JNIEXPORT 作业 JNICALL Java_com_example_iggy_deezerap_SerialPort_open (JNIEnv *env, jclass thiz, jstring path, jint baudrate, jint flags)
这是指 *.c 文件还是 *.java 文件?
【问题讨论】:
-
SerialPort 指定您的
native open(...)函数所在的 Java 类。
标签: android android-studio android-ndk