Android studio 如何修改gradle文件以在NDK目录中运行Make?

Android studio 如何修改gradle文件以在NDK目录中运行Make?,android-studio,gradle,makefile,android-ndk,task,Android Studio,Gradle,Makefile,Android Ndk,Task,我有一个Android应用程序,我需要在SWIG生成的本地代码中链接它。Makefile能够运行SWIG,安装生成的Java文件,并创建*.so。目前,我们必须进入本机代码目录,手动运行“make”,然后将生成的Java存储在RCS中,这是一个非常糟糕的主意 我了解到我可以在Gradle中创建一个task(){},它将运行和外部任务,如“make”。这就是我所拥有的: task buildSwig(type: Exec) { workingDir './app/src/main/cpp'

我有一个Android应用程序,我需要在SWIG生成的本地代码中链接它。Makefile能够运行SWIG,安装生成的Java文件,并创建*.so。目前,我们必须进入本机代码目录,手动运行“make”,然后将生成的Java存储在RCS中,这是一个非常糟糕的主意

我了解到我可以在Gradle中创建一个task(){},它将运行和外部任务,如“make”。这就是我所拥有的:

task buildSwig(type: Exec) {
    workingDir './app/src/main/cpp'
    commandLine 'make', 'distclean', 'swig', 'c++'
}
我把它放在“build.gradle”中,这样:

buildscript {

    repositories {
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.3'
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
        classpath 'me.tatarka:gradle-retrolambda:3.2.3'
        classpath 'com.getkeepsafe.dexcount:dexcount-gradle-plugin:0.3.1'
    }

}

allprojects {
    repositories {
        jcenter()
        maven {
            url "https://clojars.org/repo/"
        }
        flatDir {
            dirs 'libs'
        }
    }
    configurations.all {
        resolutionStrategy.force 'com.android.support:support-annotations:23.1.1'
    }
}

project.ext.preDexLibs = !project.hasProperty('disablePreDex')

task clean(type: Delete) {
    delete rootProject.buildDir
}

task buildSwig(type: Exec) {
    workingDir './app/src/main/cpp'
    commandLine 'make', 'distclean', 'swig', 'c++'
}
这是一个修改过的标准生成的Gradle文件。我的问题是:1)如何将“buildSwig”任务与构建本身挂钩?2)我是否使用了正确的Gradle脚本?似乎正在忽略该任务。当然,Makefile必须先运行,然后再执行其他操作


此外,一旦此问题得到纠正,生成的Java文件是否会被Gradle构建过程识别?

在您的应用程序
build.Gradle
中,您可以根据您的
buildSwig
任务,使任务具有
JavaCompile
类型:

android {

    ......
    ......

    task buildSwig(type: Exec, description: 'Compile source') {
        commandLine 'make', '-C', file('src/main/cpp').absolutePath, 'distclean', 'swig', 'c++'
    }

    task cleanSwig(type: Exec, description: 'Clean object files') {
        commandLine 'make', '-C', file('src/main/cpp').absolutePath, 'distclean'
    }

    clean.dependsOn 'cleanSwig'

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