【问题标题】:How to get a notification when Android Studio finish a build?Android Studio 完成构建时如何获得通知?
【发布时间】:2018-11-10 12:27:44
【问题描述】:

我想在 Gadle 完成构建我的应用程序时收到通知,

请注意,除了 Android Studio 中使用的常用语句外,我对 Gradle 不是很熟悉,但我很高兴我能学到一些东西。

到目前为止我见过的最好的方法似乎是使用announce 和build-announcements 插件,正如this link 中所述。不幸的是,它通常适用于 Gradle,我看不出如何使其适应 Android Studio 的构建系统。顺便说一句,我在 Windows 上并安装了 Snarl,但不知道如何使其与 Android Studio 一起使用。

在教程中,我将这两个插件都应用到了我的 app/build.gradle。

我首先尝试改编来自this SO question 的代码。由于没有关于它的真实信息,我将这些行写在 gradle 文件的根目录中。

assembleRelease.doLast {
    announce.local.send "Gradle Info Task", 'Running'
    println gradle.gradleVersion
    announce.announce("helloWorld completed!", "local")
}

然而,Gradle 甚至不会同步,抛出这个错误:

无法为 org.gradle.api.Project 类型的项目“:myApplication”获取未知属性“assembleRelease”。

然后我尝试创建一个类似this other SO question 中的任务:

task notification() {
        announce.local.send "Gradle Info Task", 'Running'
        println gradle.gradleVersion
        announce.announce("helloWorld completed!", "local")
}
build.finalizedBy(notification) //

这不会引发任何错误,但不会显示任何通知。

为什么我的尝试失败了?我怎样才能实现我的目标?

如果可能的话,非常欢迎提供有关我应该如何自己搜索以找到此信息的信息。

【问题讨论】:

  • 任何反对这个问题的人至少应该解释为什么......如果我不知道哪里出了问题,我应该如何改进它?

标签: android android-studio gradle notifications android-gradle-plugin


【解决方案1】:

您需要添加插件announce 和build announcements。 支持以下目标:Twitter、notify-send (Ubuntu)、Snarl (Windows)、Growl (macOS)。这些是所需的插件:

rootProject {
    apply plugin: "announce"
    apply plugin: 'build-announcements'
}

并完成构建过程(请参阅supported notification services):

// it finalizes :assemble
task finalizeBuild {
    doLast {
        println(":finalizeBuild > doLast")
        announce.announce("task :assemble completed!", "snarl")
    }
}

tasks.whenTaskAdded { task ->
    if (task.name == "assembleDebug") {
        task.finalizedBy finalizeBuild
    } else if (task.name == "assembleRelease") {
        task.finalizedBy finalizeBuild
    }
}

【讨论】:

  • 感谢您的回答,但我已经添加了这两个插件,如问题中所述。我也知道所有这些事情,因为我显然阅读了我提供的所有链接。我忽略了我的问题,所以我的平台是众所周知的。如果你想帮助我,你能回答我的问题吗?或者一些代码?
  • @DanChaltiel 如果项目没有任何assembleRelease 任务,它可能缺少名称为release 的buildType。也没有任务build。 assembleDebug & assembleRelease 是最后的任务。
  • 正如我所说,我只知道 gradle 的基础知识,甚至从未在 AS 之外使用它,因此我在这里寻求帮助。我认为即使在编辑之后,您的答案也更适合具有 gradle 意识的人,所以恐怕我仍然像开始时一样迷茫。我想我将 Android Studio 的默认配置与 debug 和 release buildTypes 一起使用,我什至不知道在哪里可以添加任务而不爆破所有内容(而且我找不到任何简单的教程) .当我将它插入 app/build.gradle 的底部时,您的代码不起作用,这是正确的位置吗?你能详细说明一下吗(ELI5)?
  • @DanChaltiel 任务的名称可能会有所不同。只需运行./gradlew tasks 即可获得正确的名称。或检查构建日志,最底部的任务是什么。如果没有构建类型,它可能是assemble。
  • 您的代码终于可以工作了,但只有println 部分。您上一条评论的命令返回了所有预期的任务,包括 assemble、assembleDebug 和 assembleRelease。仍然不知道为什么 Gradle 无论如何都不会识别它们。我认为我的问题是announce 插件不起作用,而 Snarl 文档也没有多大帮助。我应该知道将 Gradle 连接到 Snarl 的任何配置吗?我找不到任何关于它的文档...
【解决方案2】:

实现您需要的最简单方法:

在 Android Studio 中,进入 Preferences > Appearance & Behavior > Notifications,进入 Gradle Build (Logging) 并选中朗读框。

当您的构建完成后,这将说明 Gradle 构建在 x 分 x 秒内完成。

【讨论】:

  • 这似乎正是我想要的,但我没有“朗读框”,只有组、弹出窗口和日志。会不会是我应该安装的插件?
  • @DanChaltiel 也许有卷轴可以看到。最新的专栏是朗读专栏
  • 看了很久,我很肯定没有复选框。这是截图:i.stack.imgur.com/HDDeQ.png。和你的界面一样吗?你确定这不是插件功能吗?
  • 如果您可以添加自己界面的屏幕截图,那将是一个很大的进步!
  • @DanChaltiel 我正在使用 mac 并且有那个选项。但我检查了我的旧 Windows 笔记本电脑,发现那里没有那个复选框!
【解决方案3】:

您是否考虑过使用声音进行通知?

您可以将其添加到android{ } 标记内的app/.gradle 文件中:

afterEvaluate {
    gradle.buildFinished{ BuildResult buildResult ->
        if (buildResult.failure) {
            ['powershell', """(New-Object Media.SoundPlayer "C:\\failed_notif.wav").PlaySync();"""].execute()
            println("failed doing task")
        } else {
            ['powershell', """(New-Object Media.SoundPlayer "C:\\succeed_notif.wav").PlaySync();"""].execute()
            println("build finished")
        }
    }
}

如果您希望仅在特定构建类型完成后运行通知(仅成功构建),您可以使用:

afterEvaluate {
   assembleDebug.doLast{ //play sound for debug buildType }
   assembleRelease.doLast{ //play sound for release buildType }
}

请注意,此方法只能使用.wav 文件运行。如果你想使用.mp3,你可以试试this。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多