如何在 build.gradle 中执行 Ant 目标任务?

How to execute an Ant target task in build.gradle?

如何从 build.gradle 文件中获取与要执行的 Ant 目标关联的任务?

build.gradle 中导入 build.xml 文件的部分:

def targetSdk = android.defaultConfig.targetSdkVersion.getApiLevel()
ant.properties['android.version'] = "android-$targetSdk"
ant.properties['sdk-location'] = SDK_DIR
ant.importBuild(rootDir.absolutePath + "/bcproj/build.xml")

我要执行的ant目标名为compile-android。它在命令行成功运行:

./gradlew compile-android

但我想将其包含在 build.gradle 中,这样我就可以为每个 buildType 指定需要编译的 ant 目标。在我所有的谷歌搜索中,我能找到的所有参考资料都是让它在命令行编译。

更新 1

我试过将 compile-android 任务添加为与构建过程一起执行的另一个任务的依赖项。尽管从概念上讲,两者实际上是相互独立的。这仍然无法让 compile-android 执行。

task copyShopMetadata(type: Exec, dependsOn: 'compile-android') {
    workingDir rootDir
    commandLine './copy_shop_metadata.sh'
}

copyShopMetadata.execute()

我试过扭转依赖关系,还是不行。

Task t = tasks.findByName('compile-android')
t.dependsOn(copyShopMetadata)
copyShopMetadata.execute()

更新 2

我应该注意到,从命令行执行时,添加上面的依赖示例确实有效。然而,我的最终目标是能够在 Android Studio 中点击 "sync project with gradle files" 并编译 compile-android ant 目标。也许这是不可能的?

假设您的任务不打算独立于所有其他处理,您将希望您的任务依赖于其他一些任务,这意味着当您尝试 运行 其他任务,您的任务将首先执行。例如,该任务可能是 "build",因此您可以这样做:

project.build.dependsOn("compile-android")

(我不确定这个的确切语法。)

好的,看起来问题是我对“与 Gradle 同步项目”按钮的作用的误解。它不等同于从命令行执行构建。直到我实际点击 Android Studio 中的 运行 按钮,它才执行 compile-android 任务。因为点击 运行 按钮相当于命令行。