首页 文章

Android NDK构建

提问于
浏览
1

在尝试构建我的android ndk项目时遇到以下错误 . Android studio 3.1.3版

FAILURE:构建因异常而失败 .

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

处理'命令'/ Users / bnaskar / Library / Android / sdk / ndk-bundle / ndk-build''以非零退出值2结束

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

  • 例外是:

org.gradle.api.tasks.TaskExecutionException:任务':app:ndkBuild'的执行失败 . 在org.gradle上的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的org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:62)上的.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51) org.gradle.api.internal.tasks.execution上的.gasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:60) org.gradle.api.internal.tasks.execu上的org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:87)中的.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:97)在org.gradle.api.internal.tasks.exe执行(SkipTaskWithNoActionsExecuter.java:52)org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter中的.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52) . 执行(SkipOnlyIfTaskExecuter.java:54)org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter . java:34)at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter $ EventFiringTaskWorker $ 1.run(DefaultTaskGraphExecuter.java:248)org.gradle.internal.progress.DefaultBuildOperationExecutor $ RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)at org . gradle.internal.progress.DefaultBuildOperationExecutor $ RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)org.gradle.internal.progress.DefaultBuild在Org.gradle.internal.progress.DefaultBupeOperationExecutor.run(DefaultBuildOperationExecutor.java:110)上的OperationExecutor.execute(DefaultBuildOperationExecutor.java:199)org.gradle.execution.taskgraph.DefaultTaskGraphExecuter $ EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:241) at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter $ EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:230)org.gradle.execution.taskgraph.DefaultTaskPlanExecutor $ TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:123)at org.gradle.execution.taskgraph .DefaultTaskPlanExecutor $ TaskExecutorWorker.access $ 200(DefaultTaskPlanExecutor.java:79)org.gradle.execution.taskgraph.DefaultTaskPlanExecutor $ TaskExecutorWorker $ 1.execute(DefaultTaskPlanExecutor.java:104)at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor $ TaskExecutorWorker $ 1 . 执行(DefaultTaskPlanExecutor.java:98)org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.jav) a:626)org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:581)org.gradle.execution.taskgraph.DefaultTaskPlanExecutor $ TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:98)at org.gradle.internal .concurrent.ExecutorPolicy $ CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)atg.gradle.internal.concurrent.ManagedExecutorImpl $ 1.run(ManagedExecutorImpl.java:46)at org.gradle.internal.concurrent.ThreadFactoryImpl $ ManagedThreadRunnable.run( ThreadFactoryImpl.java:55)引起:org.gradle.process.internal.ExecException:进程'命令'/ 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)at org.gradle.api.tasks . 在org.gradle.internal.reflect.Ja上的AbstractExecTask.exec(AbstractExecTask.java:54) vaMethod.invoke(JavaMethod.java:73)org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:46)at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute( StandardTaskAction.java:39)atg.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)atorg.gradle.api.internal.AbstractTask $ TaskActionWrapper.execute(AbstractTask.java:780)atg.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)at org.gradle.internal.progress.DefaultBuildOperationExecutor $ RunnableBuildOperationWorker.execute (DefaultBuildOperationExecutor.java:328)在org.gradle上的org.gradle.internal.progress.DefaultOperationExecutor.exe执行(DefaultBuildOperationExecutor.java:199)org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110) . org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActio)中的api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:110) nsTaskExecuter.java:92)......还有29个

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

我的build.gradle fie

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'
}

1 回答

  • 2

    我担心您使用为您的项目构建本机库的弃用方式 . 新的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

相关问题