从gradle生成android项目时,找不到参数的方法android()
我有一个基于gradle的Android项目,有4个子模块——两个库和两个应用程序。我试图简化每个子模块的build.gradle文件,方法是将一些共享代码/配置移动到顶级build.gradle文件,并使用从gradle生成android项目时,找不到参数的方法android(),android,gradle,android-gradle-plugin,Android,Gradle,Android Gradle Plugin,我有一个基于gradle的Android项目,有4个子模块——两个库和两个应用程序。我试图简化每个子模块的build.gradle文件,方法是将一些共享代码/配置移动到顶级build.gradle文件,并使用subprojects{}使每个子模块都可以使用这些代码 文件系统结构如下所示: Root |- App1/ |- App2/ |- Lib1/ |- Lib2/ |- build.gradle |- settings.gradle 问题是,如果我在子项目中添加一个androi
subprojects{}
使每个子模块都可以使用这些代码
文件系统结构如下所示:
Root
|- App1/
|- App2/
|- Lib1/
|- Lib2/
|- build.gradle
|- settings.gradle
问题是,如果我在子项目中添加一个android{}
部分,那么gradle任务就会失败。例如,这是我的顶级build.gradle文件:
subprojects { project ->
android {
buildToolsVersion "20.0.0"
}
}
运行gradle将返回以下结果:
出了什么问题:
评估根项目“android”时出现问题。
找不到参数[build_7dngpra6ldok366maq0on77r7e$\u run_closure3]的方法android()_closure5@43d95624]在根项目“android”上
我搜索了类似的帖子,一些人建议在每个子项目中添加一行apply plugin:'android'
,以暴露gradle抱怨的缺少android()
方法。然而,这个解决方案对我来说不起作用,因为它会有效地将这一行添加到库项目中,而库项目需要apply plugin:'android library'
当您在同一个项目中有应用程序和库时,是否有办法在
子项目{}
中使用android{}
如果您有很多Android模块,您可能希望避免在所有模块中手动设置相同的值。因为您可能混合了android和android库项目,所以无法通过子项目关闭来应用这些插件
建议的解决办法是:
…在根项目的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中,这似乎是正确的。用户4118620的答案有一个小问题。。。至少在我使用Gradle 2.10的时候。 为了让安卓模块能看到钥匙。我们需要将ext放在子项目范围下 在根gradle文件中,您需要添加以下内容
subprojects {
ext{
<android_compile_sdk_key> = <sdk_value>
<android_build_key> = <build_value>
}
}
子项目{
分机{
您可以使用afterEvaluate
afterEvaluate {
subprojects { project ->
android {
buildToolsVersion "20.0.0"
}
}
}
我在gradle中进行了此更改,但仍然存在相同的错误我正在为我工作,请确保您编辑了正确的build.gradle文件(共有2个,请检查文件夹)
afterEvaluate {
subprojects { project ->
android {
buildToolsVersion "20.0.0"
}
}
}