2014-12-12 22 views
12
Error:Execution failed for task ':app:compileDebugNdk'. 

com.android.ide.common.internal.LoggedErrorException çalıştırılamadı Dosyalar \ ADT \ sdk \ android-ndk \ ndk-build.cmd NDK_PROJECT_PATH = nullyürütme görev için başarısız oldu ': app: compileDebugNdk' komutunu çalıştırmak için başarısız oldu: C: Program bu komutu ndk-build.cmd

Error Code: 
1 

bu android stüdyoda benim proje üzerinde bir derleme yapmak çalışırken olsun çıkıştır. Ben 1,0 sdk 14

bu benim application.mk dosyası

neye benzediği

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) 

gibi benim Android.mk dosya göründüğünü olduğu araçlar 24.0 fakat hedefleme API inşa android stüdyoda çıkıyorum Error:Execution failed for task ':app:compileDebugNdk'.

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

cevap

24

gradle android eklentisi Kaynaklarınızı derlemek için kendini-inşa ndk aramaya çalışıyor demektir . Günlük pencerenizdeki hata kodundan daha fazla ayrıntı almalısınız.

Her neyse, şu anda otomatik olarak oluşturulmuş bir Makefile kullanıyor ve sizin görmezden geliyor, bu da ffmpeg'i entegre etmeniz gerektiğinden çalışamıyor. ndk-build Arayabileceğin oradan

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

:

bu aşmak için, eklentinin otomatik ndk entegrasyonunu devre dışı bırakmak ve sizin .bu dosyaları almak için standart kütüphanelerini konumu kullanmaya yapmalıdır kendinizi veya yapmak gradle sizin için çağrı:

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 
} 

neden tüm Bu konuda daha fazla bilgi için kontrol edebilirsiniz bu gist ve benim blog post.

+0

Çok teşekkürler, geçmiş olsun ama şimdi LOCAL_C_INCLUDES anahtar sözcüğü ile belirttiğim başlıkları bulamıyorum. Sanırım başka bir zaman için başka bir soru. Kesinlikle blogunuza bakacağım, sadece deneyimli programcı bloglarını okumaktan çok şey öğrendim. – user3188402

+0

LOCAL_C_INCLUDES için mutlak bir yol vermelisiniz, bu yüzden daha iyi çalışıyor. Bunu, $ $ (LOCAL_PATH)/'ile başlatabilirsiniz. Modüllerinizden belirtmeniz gerekiyorsa, bunlara 'LOCAL_C_EXPORT_C_INCLUDES 'ayarlayabilirsiniz. – ph0b

+0

Bunu yapmak, "c" klasörünü projeden gizler; dolayısıyla Android Studio'dan c dosyalarını açamıyorum. Herhangi bir geçici çözüm var mı? – Parmaia

19

Bunu arayan herkese yardımcı olmak için, ancak yukarıdaki ifadenin nereye gittiğini anlayamıyoruz ... {project_name}/app klasörü altındaki build.gradle dizinine yerleştirilir.

Özellikle

:

{YourApp}/app/build.gradle 

Ve projenin kökünde build.gradle.

"defaultConfig" bölümüne yerleştirin.

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

Umarım, bu küçük tavsiye dışarı hangi gösterdiğini ve bu değişikliğin yapılması gerektiğini anlamaya çalışıyorum zaman aşırı miktarda harcama birisini önleyecektir.

+0

adam Günümü kurtardı @SpacemenScott –

+1

Teşekkürler. @Rushang Prajapati Afişler, posterlerin dribble yerine ** tam ** bilgi sağlamasını isterdi ... Bu yüzden, yeterli olmadıkları için onları eleştirme arzumu vermeden takip ettim. Ve Android Studio, bir yerde, kötü bir şekilde belgelenen, böyle bir hayvanat bahçesi dosyalarına sahip, tam bilgi sağlama ihtiyacının en iyi örneğidir. – SpacemanScott

+0

En kullanışlı Cevap. Anlaması çok kolay. Teşekkürler –

0

modülü aşağıdaki gibidir: uygulama kodu mükemmel çalışır.==>

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

Ben (3 yıl soruyu yazdıktan sonra) bugün bu sorunu geçti ve @ ph0b ve @SpacemanScott cevapları işe yaramazsa nedeniyle yeni yer 2.xx desteğinin olmaması nedeniyle olabileceğini fark telefonları. Son OpenCV'yi yüklemeyi deneyin.

İlgili konular