Android Studio shell 脚本构建配置自行运行,但不作为 Windows 的前置步骤

Android Studio shell script build configuration runs on its own but not as a pre-step on Windows

我正在尝试在 Android Studio 中 运行 一个 Flutter 应用程序,但在此之前,我需要将一些文件从一个目录复制到另一个目录。所以我创建了以下 copy_webenv.cmd Windows 脚本:

xcopy webenv\%1  web\ /E/Y

然后我在 Android Studio 中创建了一个 Shell 脚本构建配置,运行 使用 dev 参数设置此脚本:

当我 运行 这个构建配置独立运行时,它完美运行:

(c) 2016 Microsoft Corporation. All rights reserved.

C:\Users\sarbogast\dev\buzzwordbingo>C:\Users\sarbogast\dev\buzzwordbingo\copy_webenv.cmd dev

C:\Users\sarbogast\dev\buzzwordbingo>xcopy webenv\dev  web\ /E/Y
webenv\dev\favicon.png
webenv\dev\index.html
webenv\dev\icons\Icon-192.png
webenv\dev\icons\Icon-512.png
4 File(s) copied

但是当我尝试将此构建配置添加到我的 Flutter 构建配置的“启动前”步骤时:

和运行这个构建配置,我得到以下错误:

Error running 'copy webenv dev'
Executable is not specified

我在任何地方都看不到任何可执行字段。

看起来这是 android 工作室中的一个错误。 要解决此问题,您可以改用 gradle 任务或使用外部工具。

没有Gradle任务

如果您不能为您的用例使用 gradle 任务,那么您可以在 Before Launch 选项中使用 Run External tool 选项。

.

然后在工具配置中,您可以只使用 cmd 作为程序,使用 /c copy_webenv.cmd dev 作为参数。

有Gradle任务

如果您可以处理 gradle 任务,那么您需要将其添加到您的 build.gradle:

task runCopyScript(type: Exec) {
    commandLine 'cmd', '/c', 'copy_webenv.cmd', 'dev'
}

然后当 gradle 被同步时,您可以在 android studio 的编辑器中点击它旁边的播放按钮到 运行 它以便它被添加为 运行配置。

然后您可以将该配置添加为“启动前”。

一些旁注:

  • 实际上,为此使用 gradle copy 任务会更好。这样一来,它将立即与平台无关并且 gradle 也可以进行优化。
  • 实际上,如 this answer 所示,使用 gradle 将其挂接到构建系统中会更好。这样一来,其他人在第一次检查项目时会更容易,并且还会简化使用某些 CI 系统构建的内容。
  • 你也可以使用 build variants