android - 如何获取构建变体输出目录

标签 android gradle android-gradle-plugin

我需要运行 Android 项目的 assemble* 任务完成后发生的一些任务。特别是,这些任务需要知道特定构建变体的所有已编译类的输出目录是什么。如何检索 assembleFlavor1Debug 任务的输出目录?

我当前的解决方法是这样的(尽管此解决方法存在其自身的问题,例如无法找到汇编任务,即使它已放置在 android 配置 block 之后):

android.buildTypes.all { theBuildType ->
    android.productFlavors.all { theFlavor ->
        String capitalizedType = ... //Type name with first letter capitalized
        String capitalizedFlavor = ... //Flavor name with first letter capitalized
        ...
        project.tasks["assemble${capitalizedType}${capitalizedFlavor}"].configure {
            doLast {
                project.ext.variantOutput = "build/intermediates/classes/${theFlavor.name}/${theBuildType.name}"
            }
        }
    }
}

编辑#1:我能够修复我的解决方法。主要问题是 Android assemble* 任务(assembleProdDebug、assembleProdRelease 等)尚未在项目上创建,即使配置是在 Android 配置 block 之后发生的。通过将上面的整个代码 fragment 封装到 gradle.taskGraph.whenReady {...} 中,我能够获得 assemble* 任务的附加配置。 block ,但这确实意味着我失去了继续配置依赖关系图的能力。幸运的是,在我的特定情况下不配置依赖项并不是重大损失;我所需要的只是能够记录最后组装的构建类型和产品风格。

我还想指出,此行为是在 Android Gradle 插件 1.0.0 版本中出现的。虽然我没有检查过,但在该插件的较新版本上可能不会出现这些 Android 任务缺失的情况。

编辑#2:所以我也尝试了 Android Gradle 插件的 1.3.0 版本。我还想指出,这是 LIBRARY Android 插件,而不是应用程序插件(不过,我怀疑这些缺失的 assemble* 任务也不会在应用程序插件的项目配置期间生成)。

最佳答案

您可能想尝试使用 afterEvaluate 闭包,而不是使用 gradle.taskGraph.whenReady 包装整个内容。任务应该在项目评估后存在。

这意味着您的闭包将在配置阶段结束时和执行阶段之前运行。此时所有任务都必须注册。

afterEvaluate { project ->
    // do work on `Project` object just like normal
    project.android.buildTypes.all { theBuildType ->
        ...
    }
}

引用:https://docs.gradle.org/current/javadoc/org/gradle/api/Project.html#afterEvaluate(groovy.lang.Closure)

关于android - 如何获取构建变体输出目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33091708/

相关文章:

android - 从数据库中获取值并将其显示在android中的TextView中

android - 如何检查 Android 是否可以打开已知扩展名的文件

java - 将使用 ant 构建的 Java eclipse 项目迁移到 Gradle

android - 传递soap对象(soap1.2)android时无法从HttpResponse获取响应?

android - myfirebasemessaging 服务不可分配给 android.app.service

android - 如何在 Android 应用程序中使用来自 GitHub 的库

gradle - 确保运行特定的Gradle任务

android - 资源条目 activity_horizo​​ntal_margin 已定义

android - Android Studio 如何知道新的依赖版本?

android - 如何编译播放服务:11. 2.0