2

LeakCanary文档提到了以下处理构建类型的内容:

 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 {
                    ...
                }
            }
        }
    }
}
4

1 回答 1

3

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

方法,如debugCompile,是在创建相应的对象模型对象时生成的。在 and 的情况下debugCompilereleaseCompile由于debugandrelease构建类型是预定义的,所以顺序并不重要。但是对于自定义构建类型和任何产品风格,您需要先定义它们,然后再尝试使用生成的方法。

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

就个人而言,我喜欢dependenciesbefore android,如果您没有自定义构建类型或产品风格,那将起作用。

于 2015-09-14T20:07:57.627 回答