【问题标题】:Execution failed for task ":app:ndkBuild". >Process 'Command' finished with non-zero exit value 2任务“:app:ndkBuild”执行失败。 >进程“命令”以非零退出值 2 结束
【发布时间】:2017-09-26 08:38:41
【问题描述】:

大家好,我目前正在关注 Youtube 上的教程,以使用 android studio 创建移动应用程序,不幸的是我遇到了一些错误,我自己无法解决。 .cpp 和 .h 文件的错误相同。任何帮助将不胜感激,在此先感谢! :)

这是我的 gradle 构建中的错误:

Error:Execution failed for task ':app:ndkBuild'.
> Process 'command 'C:/Users/dell/AppData/Local/Android/sdk/ndk-bundle/ndk-
build.cmd'' finished with non-zero exit value 2

这是我的 .h 文件(Android 工作室说“jint”存在拼写错误并且缺少“;”):

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
#include <stdio.h>
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

/* Header for class com_example_dell_mpdetecthumans_OpencvNativeClass */

#ifndef _Included_com_example_dell_humandetectionndk_OpencvNativeClass
#define _Included_com_example_dell_humandetectionndk_OpencvNativeClass
#ifdef __cplusplus
extern "C" {
#endif

/*
* Class:     com_example_dell_mpdetecthumans_OpencvNativeClass
* Method:    convertGray
* Signature: (JJ)I
*/
int toGray(Mat img, Mat& gray);

JNIEXPORT jint JNICALL 
Java_com_example_dell_humandetectionndk_OpencvNativeClass_convertGray
(JNIEnv *, jclass, jlong, jlong);

#ifdef __cplusplus
}
#endif
#endif

.cpp 文件(Android studio 说“jint”有拼写错误,缺少“;”):

#include <com_example_dell_humandetectionndk_OpencvNativeClass.h>

JNIEXPORT jint JNICALL 
Java_com_example_dell_humandetectionndk_OpencvNativeClass_convertGray
(JNIEnv *, jclass, jlong addrRgba, jlong addrGray){
Mat& mRgb = *(Mat*)addrRgba;
Mat& mGray = *(Mat*)addrGray;

int conv;
jint retVal;
conv = toGray(mRgb, mGray);

retVal = (jint)conv;

return retVal;
}

int toGray(Mat img, Mat& gray){
cvtColor(img, gray, CV_RGBA2GRAY);
if(gray.rows==img.rows && gray.cols==img.cols)
    return 1;
    return 0;
}

Android.mk:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)


#opencv
OPENCVROOT:= C:\OpenCV-2.4.9-android-sdk
OPENCV_CAMERA_MODULES:=on
OPENCV_INSTALL_MODULES:=on
OPENCV_LIB_TYPE:=SHARED
include ${OPENCVROOT}/sdk/native/jni/OpenCV.mk

LOCAL_SRC_FILES := com_example_dell_humandetectionndk_OpencvNativeClass.cpp

LOCAL_LDLIBS += -llog
LOCAL_MODULE := MyOpencvLibs


include $(BUILD_SHARED_LIBRARY)

我的应用程序.mk

APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := armeabi-v7a
APP_PLATFORM := android-16

我的应用 build.gradle

sourceSets.main {
    jni.srcDirs = [] //disable automatic ndk-build call
}

task ndkBuild(type: Exec, description: 'Compile JNI source via NDK') {
    commandLine "C:/Users/dell/AppData/Local/Android/sdk/ndk-bundle/ndk-build.cmd",
            'NDK_PROJECT_PATH=build/intermediates/ndk',
            'NDK_LIBS_OUT=src/main/jniLibs',
            'APP_BUILD_SCRIPT=src/main/jni/Android.mk',
            'NDK_APPLICATION_MK=src/main/jni/Application.mk'
}

tasks.withType(JavaCompile) {
    compileTask -> compileTask.dependsOn ndkBuild
}

这是我正在关注的教程链接:https://www.youtube.com/watch?v=Oq3oiCfSgbo&t=727s

【问题讨论】:

  • 最新的 Android Studio 和 Android Gradle 插件支持 NDK-Build 和 CMake。目前没有必要为此创建 gradle 任务。请看看这个answerandroid guides
  • 指向文本文件的链接以及指向文本屏幕截图的链接?只需在问题中发布错误文本。如果太大,请使用 gist/pastebin。
  • @Sheikh 什么是 gradle 任务?这是否意味着上面我的应用程序 build.gradle 中的代码块?
  • @Dan Albert 好的,我已经编辑了帖子
  • @JonathanSeow,如果您将在您的应用程序 build.gradle 中使用块 externalNativeBuild { ndkBuild { ... } },那么您可以避免创建任务 ndkBuild 并制作 compileTask在这个 gradle 文件中依赖它。

标签: android c++ android-ndk


【解决方案1】:

大部分错误消息可能就在您粘贴的内容的正上方。一般来说,工作室的构建输出如下所示:

  • 这里是 Cmake/ndk 输出
  • 此处的最终 gradle 消息

我们需要来自实际构建系统的输出来诊断发生了什么——您能否滚动到错误:任务“:app:ndkBuild”的执行失败位上方,看看是否有任何看起来像失败的东西?

【讨论】:

  • 信息:Gradle 任务 [:app:generateDebugSources, :app:mockableAndroidJar, :app:prepareDebugUnitTestDependencies, :app:generateDebugAndroidTestSources, :app:compileDebugSources, :app:compileDebugUnitTestSources, :app:compileDebugAndroidTestSources, :openCVLibrary249 :generateDebugSources, :openCVLibrary249:generateDebugAndroidTestSources, :openCVLibrary249:mockableAndroidJar, :openCVLibrary249:prepareDebugUnitTestDependencies, :openCVLibrary249:compileDebugSources, :openCVLibrary249:compileDebugAndroidTestSources, :openCVLibrary249:compileDebugUnitTestSources]
  • 这是 gradle build 输出的剩余块
  • 退出代码 2 = windows 找不到您指定的文件。我猜你在手动调用 ndk build 时遇到了路径错误。
猜你喜欢
  • 1970-01-01
  • 2015-06-27
  • 1970-01-01
  • 2015-10-17
  • 2016-02-23
  • 2017-05-31
  • 1970-01-01
  • 1970-01-01
  • 2016-02-15
相关资源
最近更新 更多