Android NDK:找不到应用项目目录?

Android NDK: Could not find application project directory?

首先,抱歉我的英语不好。 因此,我尝试 运行 使用此源代码录制音频 mp3 示例: https://github.com/yhirano/Mp3VoiceRecorderSampleForAndroid

如果我构建项目,我得到一个错误:

Error:Execution failed for task ':app:ndkBuild'.
> A problem occurred starting process 'command 'ndk-build.cmd''

然后我在 AndroidStudio 中打开终端并输入:

1) cd c:\ndk
2) ndk-build

还有另一个错误:

Android NDK: Could not find application project directory !
Android NDK: Please define the NDK_PROJECT_PATH variable to point to it.
c:\ndk\build/core/build-local.mk:148: *** Android NDK: Aborting    .  Stop.

好的,我在终端做下一步:

ndk-build NDK_PROJECT_PATH=c:/AndroidStudioProjects/Mp3VoiceRecorderSampleForAndroid-master/

这个命令给我肯定的结果:

[armeabi] Install        : libmp3lame.so => libs/armeabi/libmp3lame.so

但是如果我重建我的项目第一个错误又来了!搜索了很多答案,但没有找到解决方案.. 请帮忙!我做错了什么?

按照 Android NDK: Setup 的说明:

  1. 切换到项目的根目录。
  2. 通过在命令提示符下键入 ndk-build 来执行 ndk-build 以构建应用程序的本机组件。
  3. 像常规 Android 应用程序一样构建和安装您的项目。

您似乎跳过了第一步("c:\ndk" 很可能是 NDK 安装目录,而不是项目的根目录)。很可能是因为您跳过了设置说明中的位:

  1. 使用包含 NDK
  2. 的目录位置更新您的 PATH 环境变量

这将允许您从任何地方 运行 ndk-build。

如果你真的想按照上面描述的方式构建,你可以尝试将 NDK_PROJECT_PATH 添加到 user/system 环境变量 - 但是当你尝试构建不同的时,这可能会导致神秘的问题NDK 项目。

您正在使用 Android Studio,而当前 gradle 插件的 AS 会忽略您的 Makefile,这肯定会产生错误。

由于内置的​​ ndk 支持不支持本地依赖项(此处需要),您可以简单地停用对 ndk-build 的内置调用,然后 gradle 调用 ndk-build直接考虑您的 Makefile:

import org.apache.tools.ant.taskdefs.condition.Os

...

android {  
  ...
  sourceSets.main {
        jniLibs.srcDir 'src/main/libs' //set .so files location to libs instead of jniLibs
        jni.srcDirs = [] //disable automatic ndk-build call
    }

    // add a task that calls regular ndk-build(.cmd) script from app directory
    task ndkBuild(type: Exec) {
        if (Os.isFamily(Os.FAMILY_WINDOWS)) {
            commandLine 'ndk-build.cmd', '-C', file('src/main').absolutePath
        } else {
            commandLine 'ndk-build', '-C', file('src/main').absolutePath
        }
    }

    // add this task as a dependency of Java compilation
    tasks.withType(JavaCompile) {
        compileTask -> compileTask.dependsOn ndkBuild
    }
}

您不能使用 'ndk-build' 构建 android 项目(如果您不使用 c 或 c++ 开发 android)。因为ndk builder是用来编译c或c++项目的。我能理解你为什么会犯这个错误。因为您在项目中使用了一个用 C 或 C++ 编写的库。因此,您应该在终端上转到用 c 或 c++ 编写的库,然后编写 'ndk-build' 和 运行.

例如:

$cd AndroidStudioProjects/OcrTest/C_orC++_Project/src/main

$ndk-build

@ph0b 我用过你的 build.gradle 但对我没用。现在我正在使用它并且工作正常。

import org.apache.tools.ant.taskdefs.condition.Os

...

android {  
  ...
  sourceSets.main {
        jniLibs.srcDir 'src/main/libs' //set .so files location to libs instead of jniLibs
        jni.srcDirs = [] //disable automatic ndk-build call
    }

    // add a task that calls regular ndk-build(.cmd) script from app directory
    task ndkBuild(type: Exec) {
        if (Os.isFamily(Os.FAMILY_WINDOWS)) {
            commandLine 'ndk_path' + 'ndk-build.cmd', '-C', file('src/main').absolutePath
        } else {
            commandLine 'ndk-build', '-C', file('src/main').absolutePath
        }
    }

    // add this task as a dependency of Java compilation
    tasks.withType(JavaCompile) {
        compileTask -> compileTask.dependsOn ndkBuild
    }
}

我的 NDK 项目遇到了完全相同的问题。它仅通过一个命令就解决了。 转到包含 Application.mkAndroid.mk 文件的项目 jni 文件夹。

cd /home/rajib/Desktop/GIT_Code/testProject/jni/

现在输入以下命令

/home/rajib/Android/NDK-Manual/android-ndk-r10e/ndk-build NDK_PROJECT_PATH=./ NDK_APPLICATION_MK=./Application.mk APP_BUILD_SCRIPT=./Android.mk

N.B:这里要使用自己的NDK路径
希望能帮助到你。谢谢。