我有一个我尝试编译的应用程序,它使用* .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 jobject JNICALL Java_com_example_iggy_deezerap_ SerialPort _open (JNIEnv * env,jclass thiz,jstring path,jint baudrate,jint flags)
这是指* .c文件还是* .java文件?
答案 0 :(得分:1)
您的NDK在哪里? ndk-build.cmd必须直接在其目录中,否则你的ndk安装会被破坏,你必须再次安装/解压缩它。
答案 1 :(得分:1)
您是否正确设置了NDK的路径?检查local.properties文件并确保已正确设置NDK的路径。
观看此视频,了解有关使用Android studio https://software.intel.com/en-us/videos/building-ndk-apps-with-android-studio
设置NDK的详细步骤答案 2 :(得分:0)
尝试使用android NDK_r9d。 在我的情况下,我使用Android NDK_r9d,apache ant 1.9.4,Windows 64位和python 2.7.9。 它的工作非常完美。
答案 3 :(得分:0)
与Android Studio的完全NDK集成并不完全存在。 NDK现在与Android SDK捆绑在一起(虽然它不是随SDK下载的)。下载Android Studio和SDK后(我相信它们现在只需一次下载),打开Android Studio IDE并找到“项目结构”对话框,然后找到“SDK位置”面板。在那里,您可以看到NDK的下载链接。 Android Studio将NDK直接下载到名为“ndk-bundle”的文件夹中的Android SDK根目录下的文件夹中。此外,您还需要阅读Android NDK Preview。祝你好运,IDE的构建系统,Gradle和Gradle的不同插件与Gradle的系统版本(blah)相比很复杂。
答案 4 :(得分:0)
你可以用这些方式做到。
<强>一个即可。通过将export ANDROID_NDK='/Users/roofe/Documents/android-ndk-r14b'
添加到.bash_profile来添加ANDROID_NDK环境变量。然后使用源./.bash_profile
加载它。
<强> B'/ strong>即可。将sdk.dir=/Users/roofe/Library/Android/sdk
添加到Android Studio的local.properties。
<强> C 即可。 文件&gt;项目结构
下载NDK或设置路径。
答案 5 :(得分:0)
万一有人通过,可以采取一种不涉及使用Android Studio重新下载NDK的变通方法。正如@BoiseBaked指出的那样,Android Studio将Android NDK存储在Android SDK根文件夹下的“ ndk-bundle”文件夹中。因此,在Linux中,只需在SDK根文件夹中创建指向NDK根文件夹的符号链接(如果使用Windows,则为快捷方式)即可解决该问题,例如:
ln -s [FULL_PATH_TO_NDK_ROOT] [FULL_PATH_TO_SDK_ROOT]/ndk-bundle
我相信在Windows中做类似的事情会起作用。