前言:自从用上Android studio 之后,遇到各种gradle 的问题,前一段时间,把我经常遇到的问题总结了一下 ,大部分问题是Google 查到了,亲测可用之后,总结分享出来。也感谢这些前辈们处理完这些问题留下的宝贵经验总结。
1.Gradle DSL method not found runProguard()
从字面就能看出来,出现这个问题的原因是找不到runProguard()这个方法了(调用这个方法的地方在每个Module对应的build.gradle文件中)。
这是因为,当Android Studio升级时,也自动的将项目下的build.gradle文件(不是Module对应的build.gradle!)下的内容修改成了:
dependencies {
classpath 'com.android.tools.build:gradle:1.0.0-rc4'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
而升级之前是这样的(以我的电脑为例,应该是类似的):
dependencies {
classpath 'com.android.tools.build:gradle:0.12.2'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
显然,最简单的解决方法是将gradle的版本改回去,此方法可能的确有效。
但是,这种做法显然不是最好的方法。查阅官方文档之后(http://tools.android.com/tech-docs/new-build-system)之后发现,在新版本的gradle中,runProguard这个方法已经废弃了,并且改为新的方法了:minifyEnabled. 因此,正确的解决方法不是修改gradle的版本号,而是将项目中每个Module对应的build.gradle文件中的runProguard方法名改为minifyEnabled,即:
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
问题完美解决。
2.Error Plugin with id android-apt not found.note
删除 Plugin with id ‘android-apt’ not found
3.Could not find property outputFile on com android build gradle.note
Android studio从1.0 RC 4升级到1.0(其实就是打了一个8M的patch)后,这个时候相应的gradle的版本也会直接使用“com.android.tools.build:gradle:1.0.0”,如果这时你在gradle文件中又用到outputFile就会出现上述的问题。好吧,其实这也是gradle团队搞的问题,有时候我们多希望gradle能像android一样,对旧版本有一个非常好的兼容性。
废话不多说,直接说怎么解决这个问题吧,这个问题的原因是outputFile这个函数被换地方了。
old:
applicationVariants.all { variant ->
......
variant.outputFile = new File(variant.outputFile.parent, name);
......
}
}
new:
applicationVariants.all { variant ->
......
variant.outputs.each { output ->
output.outputFile = new File(output.outputFile.parent, name);
......
}
}
按上述方式改就ok了。
4.Gradle DSL method not found android().note
解决方法:
删掉最外层的build.gradle中的
android {
compileSdkVersion 19
buildToolsVersion '21.1.1'
}
后续问题总结将继续更新
版权声明:本文为博主原创文章,未经博主允许不得转载。(转载请注明出自 AllenCoder)