Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 配置Gradle以在开始编译之前执行自定义生成步骤_Android_Gradle_Android Ndk_Android Gradle Plugin_Build.gradle - Fatal编程技术网

Android 配置Gradle以在开始编译之前执行自定义生成步骤

Android 配置Gradle以在开始编译之前执行自定义生成步骤,android,gradle,android-ndk,android-gradle-plugin,build.gradle,Android,Gradle,Android Ndk,Android Gradle Plugin,Build.gradle,我今天开始使用Gradle,在搜索了一个小时并尝试了来自SO(例如)和不同博客(例如)以及文档(例如)的所有可能答案后,我需要一些帮助 我的问题很简单:作为常规构建过程的一部分,如何执行定制构建步骤(在我的例子中是使用定制的Android.mk执行ndk构建) build.gradle如下所示: import org.apache.tools.ant.taskdefs.condition.Os apply plugin: 'com.android.application' android {

我今天开始使用Gradle,在搜索了一个小时并尝试了来自SO(例如)和不同博客(例如)以及文档(例如)的所有可能答案后,我需要一些帮助

我的问题很简单:作为常规构建过程的一部分,如何执行定制构建步骤(在我的例子中是使用定制的Android.mk执行ndk构建)

build.gradle如下所示:

import org.apache.tools.ant.taskdefs.condition.Os

apply plugin: 'com.android.application'

android {
    compileSdkVersion 19
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "myApp.prototype"
        minSdkVersion 16
        targetSdkVersion 19

        testApplicationId "myApp.prototype.test"
        testInstrumentationRunner "android.test.InstrumentationTestRunner"
    }

    sourceSets.main.jni.srcDirs = []

    task ndkBuild(type: Exec, description: 'Compile JNI source via NDK') {
        def rootDir = project.rootDir
        def localProperties = new File(rootDir, "local.properties")
        Properties properties = new Properties()
        localProperties.withInputStream { instr ->
            properties.load(instr)
        }

        def ndkDir = properties.getProperty('ndk.dir')
        println ndkDir

        if (Os.isFamily(Os.FAMILY_WINDOWS)) {
            commandLine "$ndkDir\\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'
        } else {
            commandLine "$ndkDir/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'
        }
    }

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

dependencies {
    compile 'com.android.support:appcompat-v7:20.+'
    compile 'com.google.android.gms:play-services-location:6.5+'
    compile 'com.android.support:support-v4:19.1.0'
    compile 'com.google.code.gson:gson:2.2.4'

    compile fileTree(dir: new File(buildDir, 'libs'), include: '*.jar')
}
gradle.projectsEvaluated {
    preBuild.dependsOn(ndkBuild)
}
从命令行执行
gradle ndkBuild
时,一切正常。但我希望Android Studio在运行其余的Android编译过程(如GeneratedBugSources、preBuild、preDebugBuild等)时自动运行ndkBuild

我曾试图参与这样的活动:

import org.apache.tools.ant.taskdefs.condition.Os

apply plugin: 'com.android.application'

android {
    compileSdkVersion 19
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "myApp.prototype"
        minSdkVersion 16
        targetSdkVersion 19

        testApplicationId "myApp.prototype.test"
        testInstrumentationRunner "android.test.InstrumentationTestRunner"
    }

    sourceSets.main.jni.srcDirs = []

    task ndkBuild(type: Exec, description: 'Compile JNI source via NDK') {
        def rootDir = project.rootDir
        def localProperties = new File(rootDir, "local.properties")
        Properties properties = new Properties()
        localProperties.withInputStream { instr ->
            properties.load(instr)
        }

        def ndkDir = properties.getProperty('ndk.dir')
        println ndkDir

        if (Os.isFamily(Os.FAMILY_WINDOWS)) {
            commandLine "$ndkDir\\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'
        } else {
            commandLine "$ndkDir/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'
        }
    }

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

dependencies {
    compile 'com.android.support:appcompat-v7:20.+'
    compile 'com.google.android.gms:play-services-location:6.5+'
    compile 'com.android.support:support-v4:19.1.0'
    compile 'com.google.code.gson:gson:2.2.4'

    compile fileTree(dir: new File(buildDir, 'libs'), include: '*.jar')
}
gradle.projectsEvaluated {
    preBuild.dependsOn(ndkBuild)
}

但是不管我把代码放在哪里,或者从各种可用的任务中使用什么任务(当运行gradle任务时),似乎什么都不起作用。

您是否尝试过在JavaCompile任务上为ndkBuild添加依赖项