2016-12-29 51 views
2

Firebase-Crash has a new feature。您可以使用Gradle命令上传mapping.txt./gradlew :app:firebaseUploadReleaseProguardMapping如何在assembleRelease后执行任务?

我想让这个过程自动化。我想在创建发行版apk后立即将该mapping.txt文件上传到Firebase。

如何在强制assembleRelease之后强制Gradle执行firebaseUploadReleaseProguardMapping?有没有更简单的方法来做到这一点?

+0

你是怎么解决这个问题? –

+0

我还没解决。我正在使用@Doug史蒂文生的解决方案,但它不完全是我想要的。 –

回答

3

通常,您可以使用dependsOn方法定义任务的相关性。

例如:

task A << { 
    println 'Hello from A' 
} 

task B << { 
    println 'Hello from B' 
} 

B.dependsOn A 

您将获得

> gradle -q B 
Hello from A 
Hello from B 

在你的情况,你可以指定:

firebaseUploadReleaseProguardMapping.dependsOn assembleRelease 

您也可以使用finalizedBy方法。

A.finalizedBy B 

需要注意的是:

  • 这将运行B即使A失败。
  • finalizedBy被标记为“孵化”,这意味着这是一个实验性功能,其行为可以在将来的版本中更改。

    ... 
    :app:transformClassesWithDexForRelease 
    :app:mergeReleaseJniLibFolders UP-TO-DATE 
    :app:transformNative_libsWithMergeJniLibsForRelease 
    :app:transformNative_libsWithStripDebugSymbolForRelease 
    :app:packageRelease 
    :app:assembleRelease 
    :app:firebaseUploadReleaseProguardMapping 
    

    请参阅firebaseUploadReleaseProguardMapping已经依赖于assembleRelease:仔细,当你的目标firebaseUploadReleaseProguardMapping得到执行的任务链

+0

有了这个解决方案,我必须运行'./gradlew:app:firebaseUploadReleaseProguardMapping'。我对吗?我不想改变主要任务。我的意思是,我想运行'./gradlew:app:assembleRelease'。 –

+0

你说得对。据我所知还有另一种方式,但请注意。 –

+0

而不是 firebaseUploadReleaseProguardMapping.dependsOn assembleRelease 您需要: assembleRelease.dependsOn firebaseUploadReleaseProguardMapping –

1

看。您不需要强制任何额外的依赖关系来执行您正在尝试执行的操作 - 依赖关系已由插件设置,因此,当您告诉gradle运行该任务时,它将已完成发布版本。如果您始终希望在成功发布构建后上传,只需定位firebaseUploadReleaseProguardMapping而不是assembleRelease。

0

可以定义一个外部工具“生成APK签署并上传的ProGuard映射文件” - 而不是“生成APK签署”按钮,因为任务firebaseUploadReleaseProguardMapping取决于assembleRelease,因此将总是执行它。在火力地堡插件最近进行了更新,以1.1.0 ...

Screenshot

结果:

:mobile:assembleRelease 
:mobile:firebaseUploadReleaseProguardMapping 
Attempting to upload Proguard mapping file...