【问题标题】:execution failed for task ':app:compileDebugNdk' failed to run this command ndk-build.cmd任务':app:compileDebugNdk'的执行失败未能运行此命令ndk-build.cmd
【发布时间】:2015-02-11 17:19:01
【问题描述】:
Error:Execution failed for task ':app:compileDebugNdk'.

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

Error Code:
1

这是我在 android studio 上尝试对我的项目运行 make 时得到的输出。 我在安卓工作室 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)

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

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

【问题讨论】:

    标签: java android android-ndk makefile


    【解决方案1】:

    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
    }
    

    从那里你可以自己调用 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
    }
    

    有关这一切的原因的更多信息,您可以查看此gist 和我的blog post

    【讨论】:

    • 非常感谢我通过了它,但现在它找不到我用 LOCAL_C_INCLUDES 关键字指定的标题。我想另一个问题。我一定会看看你的博客,我从阅读经验丰富的程序员博客中学到了很多东西。
    • 你应该给出一个 LOCAL_C_INCLUDES 的绝对路径,这样它才能更好地工作。您可以通过$(LOCAL_PATH)/ 启动它。如果你需要从你的模块中指定包含,你可以在这些上设置LOCAL_C_EXPORT_C_INCLUDES
    • 这样做会从项目中隐藏“c”文件夹,因此我无法从 Android Studio 打开 c 文件。有什么解决办法吗?
    • 如果您使用此def ndkDir = android.ndkDirectory.getAbsolutePath() commandLine ndkDir + "/ndk-build", '-C', file('src/main').absolutePath,则可以将此步骤作为常规构建过程的一部分执行
    【解决方案2】:

    为了帮助任何搜索过这个但无法弄清楚上述语句的位置的人...... 它位于 {project_name}/app 文件夹下的 build.gradle 中。

    具体来说:

    {YourApp} / app / build.gradle
    

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

    将它放在“defaultConfig”部分中。

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

    希望这个小建议可以防止某人花费过多时间试图找出需要在哪些地方以及在哪里进行更改。

    【讨论】:

    • 谢谢。 @Rushang Prajapati 我希望海报能提供完整的信息,而不是把它运出去......所以我跟进了,没有屈服于批评他们不够充分的愿望。 Android Studio 到处都有这样一个文件库,文档记录很差,这是需要提供完整信息的一个典型例子。
    【解决方案3】:

    以下模块:应用程序代码完美运行..所以你可以参考这个...==>

      apply plugin: 'com.android.application'
    
    android {
        compileSdkVersion 25
        buildToolsVersion "25.0.3"
        defaultConfig {
            applicationId "com.mnthn.liking"
            minSdkVersion 15
            targetSdkVersion 25
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    
        }
    
    
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
        sourceSets {
            main {
                jni.srcDirs = ['src/main/jniLibs/']
                jni.srcDirs = []
            }
        }
    }
    
    dependencies {
        compile fileTree(include: ['*.jar'], dir: 'libs')
        androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
            exclude group: 'com.android.support', module: 'support-annotations'
        })
        compile 'com.android.support:appcompat-v7:25.3.1'
        compile 'com.android.support.constraint:constraint-layout:1.0.2'
        testCompile 'junit:junit:4.12'
        compile project(':openCVLibrary331')
    }
    

    【讨论】:

      【解决方案4】:

      我今天(发布问题 3 年后)遇到了这个问题,并注意到如果 @ph0b 和 @SpacemanScott 的答案不起作用,可能是由于最新手机缺乏 2.x.x 支持。然后尝试安装最新的 OpenCV。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-06
        • 1970-01-01
        • 2013-10-11
        • 1970-01-01
        • 1970-01-01
        • 2017-04-04
        • 2015-05-03
        • 1970-01-01
        相关资源
        最近更新 更多