【问题标题】:Android NDK buildAndroid NDK 构建
【发布时间】:2018-06-20 15:49:08
【问题描述】:

在尝试构建我的 android ndk 项目时出现以下错误。 安卓工作室版本 3.1.3

FAILURE:构建失败并出现异常。

  • 出了什么问题: 任务 ':app:ndkBuild' 执行失败。

    进程 'command'/Users/bnaskar/Library/Android/sdk/ndk-bundle/ndk-build'' 以非零退出值 2 结束

  • 尝试: 使用 --info 或 --debug 选项运行以获得更多日志输出。运行 --scan 以获得完整的见解。

  • 例外是:

org.gradle.api.tasks.TaskExecutionException:任务“:app:ndkBuild”执行失败。 在 org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:100) 在 org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70) 在 org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51) 在 org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:62) 在 org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54) 在 org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:60) 在 org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:97) 在 org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:87) 在 org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52) 在 org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52) 在 org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54) 在 org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43) 在 org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34) 在 org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.run(DefaultTaskGraphExecuter.java:248) 在 org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336) 在 org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328) 在 org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199) 在 org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110) 在 org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:241) 在 org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:230) 在 org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:123) 在 org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.access$200(DefaultTaskPlanExecutor.java:79) 在 org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:104) 在 org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:98) 在 org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:626) 在 org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:581) 在 org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:98) 在 org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) 在 org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46) 在 org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55) 引起:org.gradle.process.internal.ExecException:进程'command'/Users/bnaskar/Library/Android/sdk/ndk-bundle/ndk-build''以非零退出值2完成 在 org.gradle.process.internal.DefaultExecHandle$ExecResultImpl.assertNormalExitValue(DefaultExecHandle.java:382) 在 org.gradle.process.internal.DefaultExecAction.execute(DefaultExecAction.java:31) 在 org.gradle.api.tasks.AbstractExecTask.exec(AbstractExecTask.java:54) 在 org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73) 在 org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:46) 在 org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39) 在 org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26) 在 org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:780) 在 org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:747) 在 org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:121) 在 org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336) 在 org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328) 在 org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199) 在 org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110) 在 org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:110) 在 org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:92) ... 29 更多

在 7 秒内构建失败 15 个可操作的任务:1 个已执行,14 个最新 jampp-MacBook-Pro:BreakOut kllu$ ./gradlew installDebug --stacktrace

我的 build.gradle 文件

apply plugin: 'com.android.application'
android {
    compileSdkVersion 24
    buildToolsVersion "27.0.3"
    defaultConfig {
        applicationId "com.example.bnn.breakout"
        minSdkVersion 15
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
        //testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

        sourceSets.main {
            jni.srcDirs = [] //disable automatic ndk-build call
            //jniLibs.srcDir "src/main/libs"
        }
        task ndkBuild(type: Exec, description: 'Compile JNI source via NDK') {
            commandLine "/Users/bnnk/Library/Android/sdk/ndk-bundle/ndk-build",
                    '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
        }

    buildTypes {
        debug {
            debuggable true
        }
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:24.2.1'
    implementation 'com.android.support:multidex:1.0.3'
    testImplementation 'junit:junit:4.12'
}

【问题讨论】:

    标签: android gradle android-ndk android-gradle-3.0


    【解决方案1】:

    恐怕您使用不推荐的方式为您的项目构建本机库。新的 Android 插件 (v. 3.1.2) 使用 externalNativeBuild。请参阅official instructions for upgrading

    简而言之,你需要像

    这样的东西
    android { 
        externalNativeBuild {
            ndkBuild {
                path "Android.mk"
            }
        }
    } 
    

    在您的模块中build.gradle

    对于您的文件,结果可能如下:

    apply plugin: 'com.android.application'
    android {
        compileSdkVersion 24
        buildToolsVersion "27.0.3"
        defaultConfig {
            applicationId "com.example.bnn.breakout"
            minSdkVersion 15
            targetSdkVersion 22
            versionCode 1
            versionName "1.0"
            //testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
    
        externalNativeBuild {
          ndkBuild {
            path 'src/main/jni/Android.mk'
          }
        }
    
        buildTypes {
            debug {
                debuggable true
            }
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }
    
    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation 'com.android.support:appcompat-v7:24.2.1'
        implementation 'com.android.support:multidex:1.0.3'
        testImplementation 'junit:junit:4.12'
    }
    

    确保您的 Android 插件是最新的,请参阅 https://stackoverflow.com/a/50953301/192373

    【讨论】:

    • 已添加我的模块 gradle 文件。它曾经在旧的 android 工作室工作,但随着工作室的升级,它似乎在没有太多信息的情况下面临一些问题!!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    • 2011-05-18
    • 2018-01-16
    • 2012-06-09
    • 2017-05-10
    相关资源
    最近更新 更多