出錯現象:
大概意思是找不到:com.android.application 插件,以上現象對於初學者來說會經常碰到,下面分析下產生的原因。
原因分析
首先來看看導入后的工程結構:
對於此工程結構,是否有個疑問? 這是未正常同步完成的結構,Gradle Scripts下面似乎少了個 build.gradle ,上圖紅框部分描述清楚了是 Module: GraphicsDemo ,表示該 build.gradle 是Module的,而不是Project的。來看看一個正常的 Project+Module的工程是怎樣的:
請注意紅框位置,一個是Project, 一個是 Module 。這兩個 build.gradle 究竟啥區別呢? 眾所周知,Android Studio在組織工程結構的時候是以Project作為基礎,可以在它的基礎上創建多個Module,正如上圖所示!不少開發人員在貢獻自己的代碼到Github或者CSDN下載頻道的時候,就直接把Module 整個文件夾丟上去了,導致下載使用的人出現了上述錯誤現象。 究其原因,還是先了解下 兩種類型 gradle文件的錯用吧!
build.gradle(Project: xxxx)
該文件是整個工程編譯的全局文件,優先級最高
源碼如下:
// Top-level build file where you can add configuration options common to all sub-projects/modules. // 優先級最高的build文件,先於Module的build.gradle執行 buildscript { repositories { jcenter() //指定maven鏡像,下同 } dependencies { classpath 'com.android.tools.build:gradle:2.2.0' //指定classpath // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { jcenter() } } task clean(type: Delete) { delete rootProject.buildDir //指定clean的時候清除掉指定目錄 }
從上述的注釋可以看出該文件的作用:
1. 編譯工程最頂級的文件,優先級最高;
2. 指定maven倉庫地址,gradle相關的包是從maven拉取下來的;
3. 指定 classpath,不然無法找到某些類,標題出現的問題就是這個原因。
build.gradle(Module: xxx)
該文件是某個Module編譯時候用到的文件
源碼如下:
//注意:Gradle是通過插件來區分是可執行的工程還是libiary工程,下面表示可執行工程 apply plugin: 'com.android.application' android { compileSdkVersion 23 buildToolsVersion "23.0.3" defaultConfig { applicationId "mashen.graphicsdemo" minSdkVersion 17 targetSdkVersion 22 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.4.0' }
這里面的配置都是大家耳熟能詳的了,重點看看第一行,apply plugin: ‘com.android.application’ 表示當前Module是可執行工程。 然而找不到這個插件,原因就是 com.android.application 來源於 com.android.tools.build:gradle:2.2.0 。 這下估計都明白了!
解決方案:
將build.gradle里面的配置腳本拷貝到Module下的 build.gradle里面,也就是下面的腳本:
buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.2.0' //注意:更換成自己的AS的版本 } } allprojects { repositories { jcenter() } }
查看gradle版本: Terminal —> gradle -v (前提是配置了環境變量)
本文轉自:http://blog.csdn.net/seafishyls/article/details/53572939