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

use*_*402 13 java android makefile android-ndk

Error:Execution failed for task ':app:compileDebugNdk'.
Run Code Online (Sandbox Code Playgroud)

com.android.ide.common.internal.LoggedErrorException:无法运行命令:C:\ Program Files\ADT\sdk\android-ndk \ndk-build.cmd NDK_PROJECT_PATH = null

Error Code:
1
Run Code Online (Sandbox Code Playgroud)

这是我在android studio上运行make项目时获得的输出.我在android studio 1.0 sdk构建工具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)
Run Code Online (Sandbox Code Playgroud)

这是我的application.mk文件的样子

APP_ABI := armeabi
#APP_ABI := armeabi-v7a
APP_PLATFORM := android-14
Run Code Online (Sandbox Code Playgroud)

ph0*_*h0b 24

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

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

无论如何,目前它使用自动生成的Makefile并忽略你的,这是无法工作的,因为你需要集成ffmpeg.

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

sourceSets.main {
    jniLibs.srcDir 'src/main/libs'
    jni.srcDirs = [] //disable automatic ndk-build call
}
Run Code Online (Sandbox Code Playgroud)

从那里你可以自己打电话给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
}
Run Code Online (Sandbox Code Playgroud)

有关所有这些的更多信息,您可以查看这个要点和我的博客文章.


Spa*_*ott 20

为了帮助任何搜索过此内容的人,但无法确定上述语句的位置...它位于{project_name}/app文件夹下的build.gradle中.

特别:

{YourApp} / app / build.gradle
Run Code Online (Sandbox Code Playgroud)

而不是项目根目录下的build.gradle.

将其放在"defaultConfig"部分中.

defaultConfig {
    ....
    sourceSets.main {
        jniLibs.srcDir 'src/main/libs'
        jni.srcDirs = [] //disable automatic ndk-build call
    }
Run Code Online (Sandbox Code Playgroud)

希望这个小建议可以防止有人花费过多的时间来弄清楚需要做出哪些改变和改变.