Java 任务';的执行失败:应用程序:CompiledBugndk';无法运行此命令ndk-build.cmd
com.android.ide.common.internal.LoggedErrorException:无法运行命令: C:\Program Files\ADT\sdk\android ndk\ndk-build.cmd ndk\U PROJECT\U PATH=null 这是我在android studio上尝试运行make项目时得到的输出。 我在安卓studio 1.0上 sdk构建工具24.0但以API 14为目标 这就是我的Android.mk文件的样子Java 任务';的执行失败:应用程序:CompiledBugndk';无法运行此命令ndk-build.cmd,java,android,android-ndk,makefile,Java,Android,Android Ndk,Makefile,com.android.ide.common.internal.LoggedErrorException:无法运行命令: C:\Program Files\ADT\sdk\android ndk\ndk-build.cmd ndk\U PROJECT\U PATH=null 这是我在android studio上尝试运行make项目时得到的输出。 我在安卓studio 1.0上 sdk构建工具24.0但以API 14为目标 这就是我的Android.mk文件的样子 Error Code: 1
Error Code:
1
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文件的样子
Error Code:
1
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)
错误:任务执行失败:应用程序:CompiledBugndk.
这意味着gradle android插件正试图调用ndk构建本身来编译您的源代码。您应该在日志窗口中获得比错误代码更多的详细信息
无论如何,目前它使用一个自动生成的Makefile来实现这一点,而忽略您的Makefile,因为您需要集成ffmpeg,所以无法工作
要克服此问题,您应该禁用插件的自动ndk集成,并使其使用标准libs位置获取您的.so文件:
APP_ABI := armeabi
#APP_ABI := armeabi-v7a
APP_PLATFORM := android-14
从那里,您可以自己调用ndk build,或让gradle为您调用:
sourceSets.main {
jniLibs.srcDir 'src/main/libs'
jni.srcDirs = [] //disable automatic ndk-build call
}
有关为什么会出现这一切的更多信息,您可以查看此和我的。以帮助搜索此内容但无法找出上述语句的用户。。。 它放在build.gradle中,{project_name}/app文件夹下 具体而言:
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
}
而不是项目根目录下的build.gradle
将其放在“defaultConfig”部分中
希望这个小小的建议能防止某人花费过多的时间试图找出需要在哪些地方进行更改。下面的模块:应用程序代码工作正常..所以你可以参考这个…==>
defaultConfig {
....
sourceSets.main {
jniLibs.srcDir 'src/main/libs'
jni.srcDirs = [] //disable automatic ndk-build call
}
我今天讨论了这个问题(发帖三年后),注意到如果@ph0b和@SpacemanScott的答案不起作用,可能是因为最新手机缺少2.x.x支持。然后尝试安装最新的OpenCV。非常感谢我通过了它,但现在它找不到我用LOCAL_C_INCLUDES关键字指定的标题。我想下次再问一个问题吧。我一定会看看你的博客,我从阅读有经验的程序员的博客中学到了很多东西。你应该给出一条通往本地社区的绝对路径,这样它会更好地工作。您可以通过
$(本地路径)/
启动它。如果您需要从模块中指定包含,可以在这些模块上设置LOCAL\u C\u EXPORT\u C\u includes
。这样做会从project中隐藏“C”文件夹,因此我无法从Android Studio打开C文件。有什么解决方法吗?如果您使用此def ndkDir=android.ndkDirectory.getAbsolutePath()命令行ndkDir+“/ndk build”、'-C',file('src/main'),则可以将此步骤作为常规生成过程的一部分来执行。absolutePath
谢谢@Rushang Prajapati我希望海报能提供完整的信息,而不是把它运走。。。因此,我继续跟进,但没有屈服于批评他们不够充分的愿望。androidstudio到处都有这样一个文件动物园,文档记录得很差,这是一个需要提供完整信息的最好例子。
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')
}