起初,抱歉我的英语不好。 因此,我尝试使用此源代码运行音频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
但是,如果我重建我的项目第一次错误再来!搜索了很多答案,但没有找到解决方案.. 请帮忙!我做错了什么?
答案 0 :(得分:4)
根据Android NDK: Setup的说明:
看起来非常像你正在跳过第一步(" c:\\ ndk"很可能是NDK安装目录,而不是项目的根目录)。很可能是因为你在设置说明中跳过了它所说的位:
允许您从任何地方运行ndk-build。
如果您真的想构建上述方法,可以尝试将NDK_PROJECT_PATH添加到用户/系统环境变量中 - 但是当您尝试构建不同的NDK项目时,这可能会导致神秘的问题。
答案 1 :(得分:1)
您正在使用Android Studio,而当前gradle插件的AS会忽略您的Makefile,这肯定会产生错误。
由于内置的ndk支持不支持本机依赖(这里需要),你可以简单地停用对ndk-build的内置调用,并直接调用grad调用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
}
}
答案 2 :(得分:1)
您无法使用&nbsp-build'构建Android项目(如果你不使用c或c ++来开发android)。因为ndk构建器用于编译c或c ++项目。我能理解你为何犯这个错误。因为你在项目中使用了用c或c ++编写的库。因此,您应该在终端上找到用c或c ++编写的库,然后编写' ndk-build'然后跑。
对于Ex:
$ cd AndroidStudioProjects / OcrTest / C_orC ++ _ Project / src / main
$ NDK-构建
答案 3 :(得分:1)
@ 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
}
}
答案 4 :(得分:1)
我的NDK项目遇到了完全相同的问题。它只用一个命令解决了。 转到项目jni文件夹,其中包含 Application.mk 和 Android.mk 文件。
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路径 希望能帮助到你。谢谢你。