Android studio 如何修改gradle文件以在NDK目录中运行Make?
我有一个Android应用程序,我需要在SWIG生成的本地代码中链接它。Makefile能够运行SWIG,安装生成的Java文件,并创建*.so。目前,我们必须进入本机代码目录,手动运行“make”,然后将生成的Java存储在RCS中,这是一个非常糟糕的主意 我了解到我可以在Gradle中创建一个task(){},它将运行和外部任务,如“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'
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
}
}