1

通过 Gradle 安装应用程序后,我需要将一些文件复制到 Android 应用程序文件夹 (data/data/...)。这必须在应用程序启动之前的每个调试版本中完成,因此我假设我可以找到一个可以在安装之后(但在运行命令之前)执行的 gradle 任务。

在执行类似

tasks.whenTaskAdded { task ->
    if (task.name == 'build') {
         task.dependsOn taskXYZ
    }
}

然后它们在我的构建任务执行之前被执行。但是,由于我需要在安装过程之后(以及在应用程序运行之前)发生这种情况,所以我希望得到这样的结果:

tasks.whenTaskAdded { task ->
    if (task.name.startsWith('install')){
       println ">>>>>>>>> " + task.name
       task.finalizedBy taskXYZ
    }

但遗憾的是,这不起作用。

在构建输出中,我可以看到它在开始时几乎执行了。

Executing tasks: [:app:assemblePlayStoreStagingDebug] in project /Users/...

> Configure project :app
###########################
TASK XYZ WAS EXECUTED HERE!
###########################
---> installPlayStoreStagingDebug

> Task :app:preBuild UP-TO-DATE
> Task :app:prePlayStoreStagingDebugBuild
> Task :app:compilePlayStoreStagingDebugAidl UP-TO-DATE
...
> Task :app:stripPlayStoreStagingDebugDebugSymbols UP-TO-DATE
> Task :app:packagePlayStoreStagingDebug
> Task :app:assemblePlayStoreStagingDebug

BUILD SUCCESSFUL in 6s
33 actionable tasks: 6 executed, 27 up-to-date

看起来任务没有在预期的时间执行。我需要的是这样的:

  1. 任务构建
  2. 任务安装
  3. 任务 XYZ
  4. 任务运行应用

但我怎样才能做到这一点?

像这样的解决方案 Android 在应用安装后运行 Gradle 任务 似乎不适用于安装任务。

- - - 编辑 - - -

我以相反的方式尝试了它 - 而不是使用 gradle 任务 - 我尝试通过在“启动前”设置中添加“外部工具”调用来更改 AS 的运行配置。

https://developer.android.com/studio/run/rundebugconfig#definingbefore

但是,当在那里选择一个 shell 脚本时,它不会被执行(例如,我在那个脚本中创建了一个文件或目录,所以我可以看到它是否被执行了)。似乎不是那个 error=13 权限问题。因此,如果 gradle 任务不是解决方案,也许任何人都知道使用此选项的解决方案!

4

1 回答 1

0

在 gradle 中,您可以使用 mustRunAfter 任务,这不会在任务之间创建依赖关系,但会强制一个任务在构建序列中的其他任务列表之后。

一个例子:

task taskY { 
    mustRunAfter "taskX" 
}

https://gradle.github.io/kotlin-dsl-docs/api/org.gradle.api/-task/must-run-after.html

于 2019-11-29T15:01:04.380 回答