今天,用Import Module导一个网上的类库library,再在File的Project Structure中的Denpendencies将library作为Moudle denpendency添加进去,
结果sync时出现not found:'runProguard()'的问题,困扰我好久,最后解决。
从字面就能看出来,出现这个问题的原因是找不到runProguard()这个方法了(调用这个方法的地方在每个Module对应的build.gradle文件中)。
那是因为我的Android studio版本比网上的类库library的高,当Android Studio升级时,也自动的将项目下的build.gradle文件
(不是Module对应的build.gradle!)下的内容修改成了:
dependencies {
classpath 'com.android.tools.build:gradle:2.0.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
而升级之前是这样的:
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
}
显然,最简单的解决方法是将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'
( 定义代码混淆文件 注意:proguard-rules.pro要放在主工程的目录下)
}
}
这样一般就能解决,但是接着又出现新的问题,是另一个问题:
在android studio中Error:Library projects cannot set applicationId. applicati
错误原因
升级到 Android studio 正式版2.0之后,lib工程里面不能在 defaultConfig 里面显示设置 applicationId,直接使用 AndroidManifest.xml 里面的定义即可
错误解决,在library的系统文件
build.gradle文件中将 applicationId 配置删除掉
defaultConfig {
applicationId "com.super.app"
minSdkVersion 23
...
}
修改为:
defaultConfig {
minSdkVersion 23
...
}
这样又解决一个问题,但是呢,还没结束,感觉上套了,又出现一个问题:
在android studio中:Error:No such property: GROUP for class: org.gradle.api.publication.maven.
解决方法,其实也很简单:
在library的build.gradle文件中,如下:
dependencies {
compile 'com.android.support:support-v4:20.0.0'
compile fileTree(dir: 'libs', include: ['*.jar'])
}
apply from: 'https://raw.github.com/twotoasters/gradle-mvn-push/master/gradle-mvn-push.gradle'
将最后一行的
apply from: 'https://raw.github.com/twotoasters/gradle-mvn-push/master/gradle-mvn-push.gradle'
删掉,在sync一下即可,这样就把问题全搞定了。
在这里,我在贴一个常见的问题:
解决Gradle DSL method not found: ‘android()’
解决方法:
删掉最外层的build.gradle中的
android {
compileSdkVersion 19
buildToolsVersion '21.1.1'
}
然后重新刷新就ok了。
这篇博客会随时更新,当我碰到新的Android Studio的问题并解决了会继续更新,也希望大家把自己常见的AS上的问题及解决办法告诉我,我们一起来整合起来,方便日后查看。
这次,我又碰到一个常见的导开源项目时会出现的错误,那就是
maven相关问题
导入项目后出现:Error:(47, 0) No such property: sonatypeRepo for class: org.gradle.api.publication.maven.internal.ant.DefaultGroovyMavenDeployer。
这种问题一般是出现在导入一些开源项目的时候。原因为该项目的原作者会把项目发布到maven中央仓库中,所以在gradle中添加了相关的maven发布任务,而发布任务需要配置username(找不到username也是同样的问题)或sonatypeRepo等属性的值,作者是不会把这些值上传的,所以导致找不到这些属性。你不是该项目的作者,自然不需要这些任务,最干净的方法是把这些任务及引用的maven, signing插件的声明删除即可。
一般出错都在library,将library中的有关于moven以及signing代码全部删掉,只留下上图上的东西就行。