任务 ':app:compileDebugNdk' 的执行失败,无法运行此命令 ndk-build.cmd

2022-09-03 16:45:19
Error:Execution failed for task ':app:compileDebugNdk'.

com.android.ide.common.internal.LoggedErrorException: Failed to run command: C:\Program Files\ADT\sdk\android-ndk\ndk-build.cmd NDK_PROJECT_PATH=null

Error Code:
1

这是我在尝试在Android Studio上运行我的项目时获得的输出。我使用的是 android studio 1.0 sdk build tools 24.0,但目标是 API 14

这是我 Android.mk 文件的样子

 LOCAL_PATH := $(call my-dir)

 include $(CLEAR_VARS)

 LOCAL_MODULE    := Main
 LOCAL_SRC_FILES := Main.cpp
 LOCAL_LDLIBS := -llog -ljnigraphics -lz -landroid
 LOCAL_SHARED_LIBRARIES := libavformat libavcodec libswscale libavutil

 include $(BUILD_SHARED_LIBRARY)
 $(call import-module,ffmpeg/android/arm)

这是我 application.mk 文件的样子

APP_ABI := armeabi
#APP_ABI := armeabi-v7a
APP_PLATFORM := android-14

答案 1

Error:Execution failed for task ':app:compileDebugNdk'.

这意味着 gradle android 插件正在尝试调用 ndk-build 本身来编译源代码。您应该获得比日志窗口中的错误代码更多的详细信息。

无论如何,目前它使用自动生成的Makefile执行此操作并忽略您的,这无法正常工作,因为您需要集成ffmpeg。

要解决此问题,您应该禁用插件的自动 ndk 集成,并使其使用标准库位置来获取 .so 文件:

sourceSets.main {
    jniLibs.srcDir 'src/main/libs'
    jni.srcDirs = [] //disable automatic ndk-build call
}

从那里,您可以自己调用ndk-build,或者让gradle为您调用它:

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

// call 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
    }
}

tasks.withType(JavaCompile) {
    compileTask -> compileTask.dependsOn ndkBuild
}

有关为什么会这样的更多信息,您可以查看此要点和我的博客文章


答案 2

为了帮助任何搜索此内容但无法弄清楚上述陈述去哪里的人...它被放置在 {project_name}/app 文件夹下的 build.gradle 中。

具体说来:

{YourApp} / app / build.gradle

而不是项目根部的 build.gradle。

将其放在“默认配置”部分中。

defaultConfig {
    ....
    sourceSets.main {
        jniLibs.srcDir 'src/main/libs'
        jni.srcDirs = [] //disable automatic ndk-build call
    }

希望这个小小的建议可以防止有人花费过多的时间试图弄清楚需要做出这种改变的原因。


推荐