【问题标题】:How do I get file outputs of gradle task如何获取 gradle 任务的文件输出
【发布时间】:2019-07-02 19:37:20
【问题描述】:

我想在 Android Studio 中创建一个 gradle 任务,它将对另一个项目的构建任务的输出做一些事情

task foo {
   dependsOn ':someApp:build'
   ...
   copy results of :someApp:build to another location
   ...
}

我不能只硬编码路径,因为我不知道 someApp 是构建为 debug 还是 release,并且输出路径会因构建类型而异。

【问题讨论】:

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


    【解决方案1】:

    不使用硬编码路径的动态复制任务。

    applicationVariants.all {
            variant->
                variant.outputs.each { output ->
                    println("..a")
                    task "copy${variant.buildType.name}"(type:Copy){
                        println("${variant.buildType.name}")
                        dependsOn app:assembleDebug
    
                        copy {
                            from "$buildDir\\outputs\\apk\\${variant.buildType.name}\\app-${variant.buildType.name}.apk"
                            into "C:\\Users\\rkumar8\\AndroidStudioProjects\\MyApplication\\app\\build\\outputs\\apk\\"
                        }
    // you can add multiple copy if required, i am doing it here release build was named app-release-unsigned.apk
                        copy {
                            from "$buildDir\\outputs\\apk\\${variant.buildType.name}\\app-${variant.buildType.name}-unsigned.apk"
                            into "C:\\Users\\rkumar8\\AndroidStudioProjects\\MyApplication\\app\\build\\outputs\\apk\\"
                        }
    
    
                    }
    
                }
        }
    

    【讨论】:

    • 这太冗长了,并且把所有的逻辑都从它需要的地方移开了。必须有一个更直接的方法来做到这一点(旁注,这个例子依赖于 assembleDebug 不是 buildType 不可知的)
    【解决方案2】:

    我在 app 模块的 build.gradle 的 android 块中添加了一个任务。

    applicationVariants.all {
            variant->
                variant.outputs.each { output ->
                    println("..a")
                    task "copy${variant.buildType.name}"(type:Copy){
                        println("${variant.buildType.name}")
                        dependsOn app:assembleDebug
    
                        copy {
                            from "$buildDir\\outputs\\apk\\${variant.buildType.name}\\app-${variant.buildType.name}.apk"
                            into "C:\\Users\\rkumar8\\AndroidStudioProjects\\MyApplication\\app\\build\\outputs\\apk\\"
                        }
    // you can add multiple copy if required, i am doing it here release build was named app-release-unsigned.apk
                        copy {
                            from "$buildDir\\outputs\\apk\\${variant.buildType.name}\\app-${variant.buildType.name}-unsigned.apk"
                            into "C:\\Users\\rkumar8\\AndroidStudioProjects\\MyApplication\\app\\build\\outputs\\apk\\"
                        }
    
    
                    }
    
                }
        }
    
    1. 还有一篇文章用于在 android 构建路径中添加我们的任务。 https://discuss.gradle.org/t/how-to-insert-my-task-into-a-pre-defined-build-android-build/29685/3

    【讨论】:

    • 这使用了调试目录的硬编码路径。我希望能够根据我是构建调试还是发布(或任何其他 buildType)来复制。
    猜你喜欢
    • 2016-03-04
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多