当前位置: 首页 > 知识库问答 >
问题:

从 gradle 构建 Android 项目时找不到参数的方法 android()

饶明亮
2023-03-14

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

文件系统结构如下所示:

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

问题是,如果我向子项目添加一个android {}部分,那么gradle任务就会失败。例如,这是我的顶级 build.gradle 文件:

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

运行gradle返回这个:

出错的地方:评估根项目“android”时出现问题。找不到根项目“android”参数[build_7dngpra6ldok366maq0on77r7e$_run_closure3_closure5@43d95624]的方法android()。

我搜索了类似的帖子,有些人建议在每个子项目中添加应用插件:'android'行,以暴露gradle抱怨的丢失的android()方法。但是,该解决方案不适合我,因为它会有效地将该行添加到库项目中,这需要应用插件:'android-Library'代替。

当您在同一个项目中有应用程序和库时,有没有办法在子项目{}中使用android{}

共有3个答案

皇甫礼骞
2023-03-14

您可以使用后评估

afterEvaluate {
        subprojects { project ->
            android {
                buildToolsVersion "20.0.0"
            }
        }
    }
万俟鸿波
2023-03-14

user4118620的答案有一个小问题...至少在Gradle 2.10上,当我使用它时。为了让密钥对Android模块可见。我们需要将 ext 放在子项目范围下

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

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

在每一个子模块中,你只要简单地按照他之前提到的去做

android {
  compileSdkVersion <android_compile_sdk_key>
  buildToolsVersion <android_build_key>
}

您可以在以下链接中找到有关gradle multibuild的文档:

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

乜钱明
2023-03-14

这实际上是对android-gradle插件结构方式的限制,并且在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中,这似乎可以正常工作。

 类似资料:
  • 第62行是。 我是不是漏了什么?我从这里取了一些类似的想法,并修正了解决方案。(请参阅“从文件应用”标题。)

  • Gradle不构建我的android项目。 Gradle版本:1.12 Groovy:1.8.6 Ant:Apache Ant(TM)版本1.9.3编译于2013年12月23日 Ivy:2.2.0 JVM:1.7.0_51(Oracle Corporation 24.51-b03) OS:Mac OS X 10.9.3x86_64 --Stacktrace --调试

  • 我不知道该怎么办;我卡住了。我有以下依赖关系,以前一切都很好: 然后,突然,它开始说: 我不确定是什么改变了,或者是什么导致了这种情况的发生。

  • 分级同步消息为: 错误:(24,0)找不到Gradle DSL方法:“Android()”可能的原因: 我不太确定这个方法到底在哪里。如果它是位于应用程序的文件中的一个,我仍然不知道从这里到哪里去。感谢任何帮助。

  • 问题内容: 现在,寻找这种解决方案的时间已经太久了,我不确定是错过了还是只是输错了什么,但是我的Gradle脚本无法编译。我正在迁移到Gradle,并且对它很陌生。我已经非常习惯于使用Maven进行依赖管理,但是Gradle似乎对我来说最好。通过运行以下代码段: 注意:我确实应用了java,maven,nexus,shadow和rebel插件。 当我运行Gradle任务时,会遇到此错误: 如果我从

  • 到根构建生成文件并从命令行运行gradle,获取: > 其中:生成文件'D:\AndroidStudioProjects\AndroidMain\Build.Gradle'行:23 错误:评估根项目“AndroidMain”时出现问题。 我不认为它在错误的地方。 根项目和添加的子项目都有gradle包装器。 如有任何指示,将不胜感激。 编辑:本练习的全部目的是将核心java代码导入android项