build.gradle配置报错:android()方法未找到及插件缺失求助
解决Gradle同步失败:找不到
android()方法和com.android.application插件的问题 问题根源
你遇到的两个错误本质上都是没有正确配置Android Gradle插件的依赖和应用正确的插件:
- 第一个错误
找不到android()方法:因为你的build.gradle没有先应用Android插件,Gradle无法识别android{}配置块; - 第二个错误
找不到com.android.application插件:因为项目没有配置获取Android插件的仓库(Google Maven仓库),也没有声明插件的依赖。
完整修复步骤
1. 修正build.gradle的基础结构
首先在文件最顶部添加buildscript块,用来配置Android插件的仓库和依赖,然后应用正确的Android插件。由于你的项目包含可启动的Activity,应该使用com.android.application插件而非com.android.library。
修改后的完整build.gradle代码如下:
// 第一步:配置Android Gradle插件的仓库与依赖 buildscript { repositories { google() // 必须添加Google仓库以获取Android插件 mavenCentral() } dependencies { // 插件版本需与compileSdkVersion匹配:compileSdk 27对应插件版本3.0.x classpath 'com.android.tools.build:gradle:3.0.1' } } // 第二步:应用正确的Android应用插件 apply plugin: 'com.android.application' android { buildToolsVersion "27.0.1" compileSdkVersion 27 sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] aidl.srcDirs = ['src'] renderscript.srcDirs = ['src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] jniLibs.srcDirs = ['libs'] } // 旧版instrumentTest可保留,新版Gradle已替换为androidTest instrumentTest.setRoot('tests') } } // 处理Native库的自定义任务(旧项目遗留逻辑可保留) task copyAndroidNatives() { file("libs/armeabi/").mkdirs(); file("libs/armeabi-v7a/").mkdirs(); file("libs/x86/").mkdirs(); configurations.natives.files.each { jar -> def outputDir = null if (jar.name.endsWith("natives-armeabi-v7a.jar")) outputDir = file("libs/armeabi-v7a") if (jar.name.endsWith("natives-armeabi.jar")) outputDir = file("libs/armeabi") if (jar.name.endsWith("natives-x86.jar")) outputDir = file("libs/x86") if (outputDir != null) { copy { from zipTree(jar) into outputDir include "*.so" } } } } task run(type: Exec) { def path def localProperties = project.file("../local.properties") if (localProperties.exists()) { Properties properties = new Properties() localProperties.withInputStream { instr -> properties.load(instr) } def sdkDir = properties.getProperty('sdk.dir') if (sdkDir) { path = sdkDir } else { path = "$System.env.ANDROID_HOME" } } else { path = "$System.env.ANDROID_HOME" } def adb = path + "/platform-tools/adb" commandLine "$adb", 'shell', 'am', 'start', '-n', 'com.guillocrack.crazymeatball/com.guillocrack.crazymeatball' } // Eclipse项目配置(旧项目遗留逻辑可保留) eclipse { sourceSets { main { java.srcDirs "src", 'gen' } } jdt { sourceCompatibility = 1.6 targetCompatibility = 1.6 } classpath { plusConfigurations += [project.configurations.compile] containers 'com.android.ide.eclipse.adt.ANDROID_FRAMEWORK', 'com.android.ide.eclipse.adt.LIBRARIES' } project { name = appName + "-android" natures 'com.android.ide.eclipse.adt.AndroidNature' buildCommands.clear(); buildCommand "com.android.ide.eclipse.adt.ResourceManagerBuilder" buildCommand "com.android.ide.eclipse.adt.PreCompilerBuilder" buildCommand "org.eclipse.jdt.core.javabuilder" buildCommand "com.android.ide.eclipse.adt.ApkBuilder" } } // Idea项目配置(旧项目遗留逻辑可保留) idea { module { sourceDirs += file("src"); scopes = [COMPILE: [plus: [project.configurations.compile]]] iml { withXml { def node = it.asNode() def builder = NodeBuilder.newInstance(); builder.current = node; builder.component(name: "FacetManager") { facet(type: "android", name: "Android") { configuration { option(name: "UPDATE_PROPERTY_FILES", value: "true") } } } } } } } dependencies { compile files('libs/pushbots.2.0.80.jar') }
2. 匹配Gradle版本与Android插件版本
Android插件和Gradle版本有严格的对应关系,com.android.tools.build:gradle:3.0.1需要Gradle 4.1及以上版本。你可以修改项目根目录下gradle/wrapper/gradle-wrapper.properties文件:
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
3. 同步项目
修改完成后,点击Android Studio工具栏的Sync Project with Gradle Files按钮,等待同步完成即可。
额外说明
- 如果你的项目是供其他App依赖的库模块,才需要使用
apply plugin: 'com.android.library'; - 旧版的
instrumentTest在新版Gradle中已被androidTest取代,若后续涉及测试可考虑迁移到新版测试组件; - 你的
copyAndroidNatives任务逻辑,在新版Android插件中可通过jniLibs.srcDirs直接配置,旧项目可继续保留原有逻辑。
内容的提问来源于stack exchange,提问作者user9175219
相关产品推荐
相关产品推荐

