配置 Android Studio 以使用 NDK(android-ndk-r10d,Windows 64 位)
Configuring Android Studio to use NDK (android-ndk-r10d, Windows 64-bit)
我有一个正在尝试编译的应用程序,它使用 *.c 文件。
要编译这个我必须使用 NDK。
已下载 64 位版本并浏览网络以查找有关配置的提示 gradle。
似乎配置没问题,gradle 尝试 运行 NDK 构建过程。
它通过调用 ndk-build.cmd 执行此操作并因以下错误而停止:
\AppData\Local\VirtualStore\Windows\SysWOW64\android-ndk-r10d\ndk-build.cmd": CreateProcess error=2, The system cannot find the file specified
我在整个文件夹中搜索了 ndk-build.cmd,但是有 none.
我到底错过了什么?
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 文件,但由于某种原因,找不到本机方法。
编辑4:
这是我的项目的样子:
我手动复制了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 路径, jint 波特率, jint 标志)
这是指*.c文件还是*.java文件?
您的 NDK 位于何处?
ndk-build.cmd 必须直接在它的目录中,否则你的 ndk 安装会损坏,你必须重新 install/extract 它。
您是否正确设置了 NDK 的路径。检查 local.properties 文件并确保您已正确设置 NDK 的路径。
查看此视频,了解使用 Android studio https://software.intel.com/en-us/videos/building-ndk-apps-with-android-studio
设置 NDK 的详细步骤
尝试使用 android NDK_r9d。
就我而言,我使用 android NDK_r9d、apache ant 1.9.4、windows 64 位和 python 2.7.9。
它的工作完美。
与 Android Studio 的完整 NDK 集成还不完善。 NDK 现在(某种程度上)与 Android SDK 捆绑在一起,尽管它没有随 SDK 下载。一旦你下载了 Android Studio 和 SDK(我相信它们现在都集中在一个下载中),打开 Android Studio IDE 并找到 "Project Structure" 对话框然后是 "SDK Location" 面板。您会看到 NDK 的下载 link。 Android Studio 将 NDK 下载到 Android SDK 根目录下的一个文件夹中,该文件夹位于名为 "ndk-bundle." 的文件夹中。此外,您还需要阅读 Android NDK Preview。祝你好运,IDE 的构建系统、Gradle 和 Gradle 的不同插件与 Gradle 的系统版本(blah)使它变得复杂。
您可以通过这些方式完成。
a。通过将 export ANDROID_NDK='/Users/roofe/Documents/android-ndk-r14b'
添加到 .bash_profile 来添加 ANDROID_NDK 环境变量。然后使用source./.bash_profile
加载它。
b。将 sdk.dir=/Users/roofe/Library/Android/sdk
添加到 Android Studio 的 local.properties。
c。
文件 > 项目结构
下载NDK或设置路径
万一有人路过,有一个解决方法不涉及使用 Android Studio 重新下载 NDK。正如@BoiseBaked 指出的那样,Android Studio 将 Android NDK 存储在 Android SDK 根文件夹下名为 "ndk-bundle" 的文件夹中。因此,在 linux 中,只需在您的 SDK 根文件夹中创建一个符号 link(快捷方式,如果您使用 Windows)到 NDK 根文件夹即可解决问题,如下所示:
ln -s [FULL_PATH_TO_NDK_ROOT] [FULL_PATH_TO_SDK_ROOT]/ndk-bundle
我相信在 Windows 中做类似的事情会奏效。
我有一个正在尝试编译的应用程序,它使用 *.c 文件。
要编译这个我必须使用 NDK。
已下载 64 位版本并浏览网络以查找有关配置的提示 gradle。
似乎配置没问题,gradle 尝试 运行 NDK 构建过程。
它通过调用 ndk-build.cmd 执行此操作并因以下错误而停止:
\AppData\Local\VirtualStore\Windows\SysWOW64\android-ndk-r10d\ndk-build.cmd": CreateProcess error=2, The system cannot find the file specified
我在整个文件夹中搜索了 ndk-build.cmd,但是有 none.
我到底错过了什么?
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 文件,但由于某种原因,找不到本机方法。
编辑4:
这是我的项目的样子:
我手动复制了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 路径, jint 波特率, jint 标志)
这是指*.c文件还是*.java文件?
您的 NDK 位于何处? ndk-build.cmd 必须直接在它的目录中,否则你的 ndk 安装会损坏,你必须重新 install/extract 它。
您是否正确设置了 NDK 的路径。检查 local.properties 文件并确保您已正确设置 NDK 的路径。
查看此视频,了解使用 Android studio https://software.intel.com/en-us/videos/building-ndk-apps-with-android-studio
设置 NDK 的详细步骤尝试使用 android NDK_r9d。 就我而言,我使用 android NDK_r9d、apache ant 1.9.4、windows 64 位和 python 2.7.9。 它的工作完美。
与 Android Studio 的完整 NDK 集成还不完善。 NDK 现在(某种程度上)与 Android SDK 捆绑在一起,尽管它没有随 SDK 下载。一旦你下载了 Android Studio 和 SDK(我相信它们现在都集中在一个下载中),打开 Android Studio IDE 并找到 "Project Structure" 对话框然后是 "SDK Location" 面板。您会看到 NDK 的下载 link。 Android Studio 将 NDK 下载到 Android SDK 根目录下的一个文件夹中,该文件夹位于名为 "ndk-bundle." 的文件夹中。此外,您还需要阅读 Android NDK Preview。祝你好运,IDE 的构建系统、Gradle 和 Gradle 的不同插件与 Gradle 的系统版本(blah)使它变得复杂。
您可以通过这些方式完成。
a。通过将 export ANDROID_NDK='/Users/roofe/Documents/android-ndk-r14b'
添加到 .bash_profile 来添加 ANDROID_NDK 环境变量。然后使用source./.bash_profile
加载它。
b。将 sdk.dir=/Users/roofe/Library/Android/sdk
添加到 Android Studio 的 local.properties。
c。 文件 > 项目结构
下载NDK或设置路径
万一有人路过,有一个解决方法不涉及使用 Android Studio 重新下载 NDK。正如@BoiseBaked 指出的那样,Android Studio 将 Android NDK 存储在 Android SDK 根文件夹下名为 "ndk-bundle" 的文件夹中。因此,在 linux 中,只需在您的 SDK 根文件夹中创建一个符号 link(快捷方式,如果您使用 Windows)到 NDK 根文件夹即可解决问题,如下所示:
ln -s [FULL_PATH_TO_NDK_ROOT] [FULL_PATH_TO_SDK_ROOT]/ndk-bundle
我相信在 Windows 中做类似的事情会奏效。