通过 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
看起来任务没有在预期的时间执行。我需要的是这样的:
- 任务构建
- 任务安装
- 任务 XYZ
- 任务运行应用
但我怎样才能做到这一点?
像这样的解决方案 Android 在应用安装后运行 Gradle 任务 似乎不适用于安装任务。
- - - 编辑 - - -
我以相反的方式尝试了它 - 而不是使用 gradle 任务 - 我尝试通过在“启动前”设置中添加“外部工具”调用来更改 AS 的运行配置。
https://developer.android.com/studio/run/rundebugconfig#definingbefore
但是,当在那里选择一个 shell 脚本时,它不会被执行(例如,我在那个脚本中创建了一个文件或目录,所以我可以看到它是否被执行了)。似乎不是那个 error=13 权限问题。因此,如果 gradle 任务不是解决方案,也许任何人都知道使用此选项的解决方案!