通过Gradle安装应用程序后,我需要将一些文件复制到Android App文件夹(数据/数据/ ...)。 必须在启动应用程序之前在每个调试版本中完成此操作,因此我假设我可以找到一个可以在安装后执行(但在运行之前)执行的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
任务似乎没有在预期的时间执行。我需要的是这样的:
但是我该如何实现呢?
像这样的解决方案 Android run Gradle task after app install 似乎不适合安装任务。
-----编辑-----
我尝试了另一种方法-而不是使用gradle任务-我尝试通过在“启动前”设置中添加“外部工具”调用来更改AS的运行配置。
https://developer.android.com/studio/run/rundebugconfig#definingbefore
但是,当在其中选择一个shell脚本时,该脚本将不会执行(例如,我正在该脚本中创建文件或目录,因此我可以查看它是否已完全执行)。似乎不是error = 13权限问题。因此,如果gradle任务不是解决方案,那么也许任何人都知道使用此选项的解决方案!
答案 0 :(得分:1)
在gradle中,您可以使用mustRunAfter任务,这不会在任务之间创建依赖关系,而是会强制一个任务位于构建序列中其他任务的列表之后。
一个例子:
task taskY {
mustRunAfter "taskX"
}
https://gradle.github.io/kotlin-dsl-docs/api/org.gradle.api/-task/must-run-after.html