在使用构建类型和产品口味时,如何包含LeakCanary?

时间:2015-09-14 18:30:05

标签: android gradle leakcanary

LeakCanary documentation提到以下处理构建类型:

 dependencies {
   debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3.1'
   releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3.1'
 }

但是,当使用多个product flavors时呢?我在Gradle DSL method not found函数上收到错误buildTypeCompile

以下是我当前的Gradle文件的骨架:

android {
    ...

    dependencies {
        debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3.1'
        ciCompile 'com.squareup.leakcanary:leakcanary-android:1.3.1'
        qaCompile 'com.squareup.leakcanary:leakcanary-android:1.3.1'
        uatCompile 'com.squareup.leakcanary:leakcanary-android:1.3.1'
        prodCompile 'com.squareup.leakcanary:leakcanary-android:1.3.1'
        releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3.1'
    }

    productFlavors {
        foo {
            buildTypes {
                ci {
                    ...
                }

                qa {
                    ...
                }
            }
        }

        bar {
            buildTypes {
                ci {
                    ...
                }

                qa {
                    ...
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:3)

build.gradle是一个构建构建过程的对象模型的脚本。但是,它仍然是一个用脚本语言(Groovy)编写的脚本,因此往往会自上而下处理。

类似debugCompile的方法,在创建相应的对象模型对象时生成。对于debugCompilereleaseCompile,由于debugrelease构建类型是预定义的,因此顺序无关紧要。但是对于自定义构建类型和任何产品风格,在尝试使用生成的方法之前,首先需要先定义它们。

模块级build.gradle文件dependencies关闭最安全的地方是在你确定所有的构建类型和产品风格都存在之后,最后是相应的{{1方法存在。

就个人而言,我喜欢在...Compile之前拥有dependencies,如果您没有自定义构建类型或产品口味,那么它将会正常运作。