Could not find method android() for arguments when building Android project from gradle

白昼怎懂夜的黑 提交于 2019-11-28 04:56:32

This is actually a limitation on the way that the android-gradle plugin is structured and there is a workaround documented at the android tools website.

If you have a lot of Android modules, you may want to avoid manually setting the same values in all of them. Because you probably have a mix of android and android-library project you can't apply these plugins through a subprojects closure.

The proposed solution is:

...in the root project's build.gradle:

ext {
  compileSdkVersion = 19
  buildToolsVersion = "19.0.1"
}

in all the android modules:

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

...

One think I noticed was that this doesn't work on older versions of gradle (I was trying with 1.10 and got an error). With Gradle 2.1 this seems to work correctly though.

There's one minor issue with user4118620's answer... at least on Gradle 2.10 when I used it. In order to have the key visible to the android modules. We need to place the ext under the subproject scope

At the root gradle file you need to add the following

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

At each of the submodules you then simply follow what he mentioned earlier

android {
  compileSdkVersion <android_compile_sdk_key>
  buildToolsVersion <android_build_key>
}

You can find the docs about the gradle multibuild on the following link

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!