【问题标题】:Gradle 4.1 does crashlytics upload before release build finishesGradle 4.1 在发布构建完成之前会进行 crashlytics 上传
【发布时间】:2018-02-06 07:55:03
【问题描述】:

将我们的开发和构建环境从 Android Studio 2 升级到 3(目前在 gradle 4.1 上),我们在运行 Crashlytics APK 分发上传任务时遇到了一个奇怪的问题。它尝试过早上传 APK。在我们构建的 60 年代左右,它失败了:

Uploading D:\GitRunner\path\to\release\appname-flavour1name-release.apk to Crashlytics...
 WARN - Crashlytics halted compilation because it can't find the specified file: D:\GitRunner\path\to\release\appname-flavour1name-release.apk
:appname:crashlyticsUploadDistributionFlavournameRelease FAILED

(正常构建时间约为 7 分钟。)我确实仔细检查了 APK 的输出路径,一切似乎都是正确的。

有趣的是,当远程连接到 Windows 构建机器并运行我们的 CI 手动运行的构建命令时:

gradlew.bat assembleFlavour1NameRelease assembleFlavour2NameRelease appname:crashlyticsUploadDistributionFlavour1NameRelease reptile:crashlyticsUploadDistributionFlavour1NameRelease --stacktrace

一切正常。

最终我将不良行为追溯到运行构建命令之前运行的git clean。不知何故,这改变了足以使构建通过或不通过的行为。

【问题讨论】:

    标签: android android-gradle-plugin crashlytics


    【解决方案1】:

    我也遇到过同样的问题。如果您的项目中有多个模块,--max-workers=1 的解决方案将大大减慢您的构建时间。

    您可以通过在 build.gradle 文件中手动设置 crashlyticsUploadDistribution 任务的顺序来解决此问题:

    tasks.whenTaskAdded { task ->
        if (task.name == "crashlyticsUploadDistributionDebug") {
            task.dependsOn assembleDebug
        }
        if (task.name == "crashlyticsUploadDistributionRelease") {
            task.dependsOn assembleRelease
        }
    }
    
    afterEvaluate {
        crashlyticsUploadDistributionDebug.dependsOn assembleDebug
        crashlyticsUploadDistributionRelease.dependsOn assembleRelease
    }
    

    【讨论】:

    • 这似乎是多余的。为什么需要在 whenTaskAdded 和 afterEvaluate 中做同样的事情?
    【解决方案2】:

    我怀疑 gradle 任务的顺序可能已关闭。 Crashlytics 似乎会在等待构建实际完成之前尝试上传 APK。

    添加 gradle 命令行标志:--max-workers=1 使构建始终通过。

    【讨论】:

    • 这样您就可以创建自己的任务来执行上传(通过调用 crashlytics 上传)并使其依赖于 Crashlytics 其他任务
    • 当我意识到依赖关系不正常时,这是我的第一个想法。但是,添加 gradle 任务依赖项听起来工作量太大。 --max-workers=1 hack 似乎可以解决问题。另外,就我而言,Crashlycits 的任务应该具有正确的依赖关系。也许您可以添加另一个答案来添加任务?
    • 在 jenkins 中 --max-workers=1 应该添加到 Invoke Gradle Script 下的 Switches 字段中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-04
    • 2014-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多