You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Gradle中执行curl并指定目录输出?及Gradle.kts实现

解决Gradle从私有GitHub仓库下载文件到指定目录的问题

Groovy DSL 版本修改

原来的代码用-O会把文件输出到项目根目录,要指定到Android项目的res/values文件夹,得调整curl命令并确保目标目录存在,修改后的代码如下:

task myCurlTask {
    doLast {
        // 定义目标文件的完整路径,指向app模块的res/values目录
        def targetFilePath = "${project.rootDir}/app/src/main/res/values/colors.xml"
        // 先创建目标目录(如果目录不存在的话)
        new File(targetFilePath).parentFile.mkdirs()
        // 用curl的-o参数指定输出路径,替换原来的-O
        def command = "curl -s -o ${targetFilePath} https://myGitHubToken@raw.githubusercontent.com/myGitHubAccount/myrepo/master/app/src/main/res/values/colors.xml"
        command.execute()
    }
}

关键改动说明:

  • 把-O换成-o并带上完整目标路径,直接指定文件输出位置
  • 增加目录创建逻辑,避免因目标目录不存在导致curl执行失败
  • 把命令执行放在doLast闭包里,确保任务在执行阶段才运行(原写法会在配置阶段就执行,不符合Gradle任务生命周期规范)

Kotlin DSL(build.gradle.kts)版本

对应的KTS写法如下:

tasks.register("myCurlTask") {
    doLast {
        val targetFilePath = "${project.rootDir}/app/src/main/res/values/colors.xml"
        // 创建目标目录
        File(targetFilePath).parentFile.mkdirs()
        val command = "curl -s -o $targetFilePath https://myGitHubToken@raw.githubusercontent.com/myGitHubAccount/myrepo/master/app/src/main/res/values/colors.xml"
        Runtime.getRuntime().exec(command)
    }
}

注意事项:

  • KTS中用tasks.register注册任务,是更规范的写法
  • 执行命令用Runtime.getRuntime().exec(),和Groovy的execute()功能等效
  • 路径处理和目录创建逻辑和Groovy版本一致,保证执行前提条件

额外提醒

  • 别把GitHub Token硬编码在脚本里,建议用环境变量或Gradle属性传递,比如Groovy里用System.getenv("GITHUB_TOKEN"),KTS同理
  • 可以给任务添加依赖,比如让它在编译前执行:
    Groovy:myCurlTask.mustRunAfter preBuild
    KTS:tasks.named("preBuild") { finalizedBy("myCurlTask") }

内容的提问来源于stack exchange,提问作者freeman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 11:45:21