web-dev-qa-db-ja.com

タスク ':app:compileDebugNdk'の実行に失敗しました。このコマンドndk-build.cmdの実行に失敗しました

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スタジオのプロジェクトで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)

これは私のapplication.mkファイルのようです

APP_ABI := armeabi
#APP_ABI := armeabi-v7a
APP_PLATFORM := Android-14
13
user3188402

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 およびmy ブログ投稿

24
ph0b

これを検索したが、上記のステートメントがどこに行くのかわからない人を助けるために... {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
    }

うまくいけば、この小さなアドバイスにより、誰かがこの変更をどこで行う必要があるかを把握しようとして過度の時間を費やすことを防ぐことができます。

20
SpacemanScott

module:appコードの下で完璧に動作します..これを参照できます... ==>

  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')
}
0
Manthan Patel

今日(質問を投稿してから3年後)この問題を経験しましたが、@ ph0bと@SpacemanScottの回答が機能しない場合は、最新の携帯電話で2.x.xがサポートされていない可能性があります。その後、最新のOpenCVをインストールしてみてください。

0
Manaslu