在从Gradle构buildAndroid项目时,找不到方法android()作为参数

我有一个基于gradle的Android项目,有4个子模块 – 两个库和两个应用程序。 我试图通过将一些共享的代码/configuration移动到顶层build.gradle文件来简化每个子模块的build.gradle文件,并使用subprojects {}使每个子模块都可以使用该代码。

文件系统结构如下所示:

 Root |- App1/ |- App2/ |- Lib1/ |- Lib2/ |- build.gradle |- settings.gradle 

问题是,如果我添加一个android {}节到子项目,然后gradle任务失败。 例如,这是我的顶级build.gradle文件:

 subprojects { project -> android { buildToolsVersion "20.0.0" } } 

运行gradle返回这个:

出了什么问题:评估根项目“android”时出现问题。 在根项目“android”上无法find方法android()的参数[build_7dngpra6ldok366maq0on77r7e $ _run_closure3_closure5 @ 43d95624]。

我search了类似的post,一些人build议添加行apply plugin: 'android'到每个子项目,以揭露gradle抱怨缺less的android()方法。 然而,这个解决scheme对我来说不起作用,因为它会将这一行有效地添加到库项目中,这需要apply plugin: 'android-library'

当在同一个项目中有应用程序和库时,是否有方法在subprojects {}使用android {}

Solutions Collecting From Web of "在从Gradle构buildAndroid项目时,找不到方法android()作为参数"

这实际上是对android-gradle插件的结构进行限制, 在android工具网站上有一个解决方法。

如果你有很多的Android模块,你可能想避免手动设置相同的值。 因为你可能有android和android-library项目的混合,你不能通过子项目闭包应用这些插件。

build议的解决scheme是:

在根项目的build.gradle中:

 ext { compileSdkVersion = 19 buildToolsVersion = "19.0.1" } 

在所有的android模块中:

 android { compileSdkVersion rootProject.ext.compileSdkVersion buildToolsVersion rootProject.ext.buildToolsVersion } 

有人认为我注意到这是不适用于旧版本的gradle(我试图用1.10,并得到一个错误)。 与Gradle 2.1这似乎工作正常,但。

user4118620的答案有一个小问题,至less在Gradle 2.10时,我使用它。 为了让键可见的android模块。 我们需要把分机放在子项目的范围内

在根gradle文件中,您需要添加以下内容

 subprojects { ext{ <android_compile_sdk_key> = <sdk_value> <android_build_key> = <build_value> } } 

在每个子模块中,您只需遵循他之前提到的内容

 android { compileSdkVersion <android_compile_sdk_key> buildToolsVersion <android_build_key> } 

你可以在下面的链接find关于gradle multibuild的文档

https://docs.gradle.org/current/userguide/multi_project_builds.html#sub:adding_specific_behavior