我有一个Android应用程序,我需要在SWIG生成的本机代码中链接。 Makefile能够运行SWIG,安装生成的Java文件,并创建* .so。目前,我们必须进入本机代码目录并运行' make'然后手工将生成的Java存储在我们的RCS中,这是一个非常糟糕的主意。
我了解到我可以在Gradle中创建一个将运行的任务(){}和外部任务,例如' 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必须在其他所有内容之前运行。
此外,一旦纠正了此问题,Gradle构建过程是否会识别生成的Java文件?
答案 0 :(得分:0)
在您的应用build.gradle
中,您可以根据JavaCompile
任务制作buildSwig
类型的任务:
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
}
}