Android Studio 升级为3.1 踩到的坑
原文:https://blog.csdn.net/xiariluoxue/article/details/80050700
- AndroidStudio、gradle、buildToolsVersion的关系
- Android Studio gradle插件版本和gradle版本对应关系
- Android Studio 升级为3.1遇到的问题
- 问题一:Configuration ‘compile’ is obsolete and has been replaced with ‘implementation’ and ‘api’.`
- 问题二:The SourceSet ‘instrumentTest’ is not recognized by the Android Gradle Plugin. Perhaps you misspelled something?
- 问题三:extractDebugAnnotations is incompatible with java 8 sources and has been disabled.extractReleaseAnnotations is incompatible with java 8 sources and has been disabled
- 问题四:解决No such property: FOR_RUNTIME for class: org.gradle.api.attributes.Usage的问题
AndroidStudio、gradle、buildToolsVersion的关系
The Android Studio build system is based on Gradle, and the Android plugin for Gradle adds several features that are specific to building Android apps.
Android Studio基于Gradle构建系统,为了构建Android应用,Android gradle 插件添加了构建Android应用程序特有的几项功能。
- AndroidStudio:是Google官方基于IntelliJ IDEA开发的一款Android应用开发工具
- Gradle:是一个工具,也是一个编程框架。使用Gradle可完成app的编译打包等工作。
- buildToolsVersion: android构建工具的版本,其中包含打包工具aapt、dx等。buildToolsVersion在安装的android sdk路径下的/build-tools/
Android Studio gradle插件版本和gradle版本对应关系
- gradle插件版本配置:project对应的
build.gradle
文件中
buildscript {
repositories {
/**Gradle 4.1 and higher include support for Google's Maven repo using
the google() method. And you need to include this repo to download
Android plugin 3.0.0 or higher.*/
jcenter()
google()
...
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.1'
}
}
allprojects {
repositories {
jcenter()
google()
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
buildscript定义了全局的相关属性
repositories
定义仓库:一个仓库代表着依赖包的来源,例如jcenter仓库dependencies
用来定义构建过程:仅仅需要定义默认的Android插件
,该插件可以让你执行相关Android的tasks,注意:不应该在该方法体内定义子模块的依赖包。allprojects
用来定义各个模块的默认属性:不仅仅局限于默认的配置,也可以自己创造tasks在allprojects方法体内,这些tasks将会在所有模块中可见。
- gradle版本配置
在gradle/wrapper/gradle-wrapper.properties
文件中
distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip
- 1
- gradle插件版本和gradle版本对应如下:
官网链接:https://developer.android.google.cn/studio/releases/gradle-plugin.html#updating-plugin
Android Studio 升级为3.1遇到的问题
Android Studio升级为3.1,Gradle 4.4,buildToolsVersion 27.0.3所带来的问题
- 1
- 2
问题一:Configuration ‘compile’ is obsolete and has been replaced with ‘implementation’ and ‘api’.`
使用implementation或者api代替compile
dependencies {
compile 'com.google.dagger:dagger:2.11'
compile 'com.google.dagger:dagger-android:2.11'
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5.4'
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.4'
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
dependencies {
implementation 'com.google.dagger:dagger:2.11'
implementation 'com.google.dagger:dagger-android:2.11'
debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.5.4'
debugImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.4'
}
- 1
- 2
- 3
- 4
- 5
- 6
api和implementation的区别:
api:模块的依赖对外公开,可被依赖包所引用(完全等同于compile指令)
implementation:依赖只作用于当前的module
,将该模块的依赖隐藏在内部,而不对外部公开(使用implementation指令的依赖不会传递)
有一个module_A依赖于glide(module_A使用的是implementation 指令来依赖glide)
implementation 'com.github.bumptech.glide:glide:3.7.0'
- 1
另一个module_B,依赖于module_A:
implementation project(':module_A')
- 1
此时module_B里边不能引用glide,module_B要想引用glide,就在module_A使用的是api来引用glide
api 'com.github.bumptech.glide:glide:3.7.0'
- 1
用implementation指令编译,Glide依赖对Module是module_B是不可见的
用api指令编译,Glide依赖对Module是module_B是可见的
建议:在Google IO 中提到了一个建议,依赖首先应该设置为implementation的,如果没有错,那就用implementation,如果有错,那么使用api指令。`使用implementation会使编译速度有所增快。`
- 1
- 2
问题二:The SourceSet ‘instrumentTest’ is not recognized by the Android Gradle Plugin. Perhaps you misspelled something?
将instrumentTest改为 androidTest
新版本Gradle对instrumentTest做了重命名
旧版本 | 新版本 |
---|---|
instrumentTestCompile | androidTestCompile |
instrumentTest | androidTest |
问题三:extractDebugAnnotations is incompatible with java 8 sources and has been disabled.extractReleaseAnnotations is incompatible with java 8 sources and has been disabled
项目里使用了me.tatarka:gradle-retrolambda,
dependencies {
classpath 'me.tatarka:gradle-retrolambda:3.2.5'
}
- 1
- 2
- 3
对retrolambda进行了升级,解决了问题
dependencies {
classpath 'me.tatarka:gradle-retrolambda:3.7.0'
}
- 1
- 2
- 3
- 4
问题四:解决No such property: FOR_RUNTIME for class: org.gradle.api.attributes.Usage的问题
dependencies {
//classpath 'com.novoda:bintray-release:0.5.0'
classpath 'com.novoda:bintray-release:0.8.0'
}
- 1
- 2
- 3
- 4
升级com.novoda.bintray-release版本
Android Studio 升级为3.1 踩到的坑的更多相关文章
- Android Studio 升级到3.0 提示 java.lang.NoClassDefFoundError
Android Studio 升级到3.0 提示 java.lang.NoClassDefFoundError 这个问题折腾了2个小时,最后解决了,Stack Overflow 上也有一次类似的问题, ...
- android studio 升级到3.3.1后,提示程序包不存在
android studio 升级到3.3.1后,提示程序包不存在 原因 主Module--A 引用了其他Moduel--B里的jar库, 只需要把B的dependencies改成如下(implent ...
- Android Studio 升级到3.0后出现编译错误\.gradle\caches\transforms-1\files-1.1\*****-release.aar
Android Studio 升级到3.0后出现各种编译问题,其中有一个问题是关于资源找不到的问题,百度了半天,也没有相关的文章 C:\Users.gradle\caches\transforms-1 ...
- 关于Android Studio升级到2.0后和Gradle插件不兼容的问题
今天升级AS到2.0后,用AS在真机上调试,发现报了如下错误: This version of Android Studio is incompatible with the Gradle Plugi ...
- Android Studio升级后projectBuild failed.
近期在升级Android Studio后,发现原先能编译通过的project,突然就编译只是了,原因是生成的AndroidManifest.xml文件里有乱码. 升级后: android studio ...
- 记一次Android studio升级之后的坑
像往常一样打开Android studio,但这次它提示我升级!说是什么为了更好的体验,在好奇心的驱使下,我毅然地点击了“update”按钮.升级之后,编译项目,报出了N多个error,我的心都慌完! ...
- Android Studio升级后报 method not found: 'runProguard'的错误
今天升级了下Android Studio,然后发现更新gradle,然后在sync项目的时候总是报 method not found: 'runProguard'的错误 找了很多发现不对. 最后解决 ...
- Android studio 升级,不用下载完整版,完美更新到2.0
Android studio 2.0 公布已有一旦时间,据说,速度大大提高了.但是一直没有尝试更新,看到大家相继更新,所以迫不及待就准备更新,但是.更新之路确实异常坎坷.询问度娘,千奇百怪的问题接憧而 ...
- android开发里跳过的坑——android studio升级完成后eclipse adt无法正常使用
最近有时间,把android studio做了一次升级,升级完成后,悲催的发现eclipse不能正常运行了,网上查了好多资料,试了很多方法都不行,最后把eclipse使用的sdk与AS使用的SDK区分 ...
随机推荐
- Lena与数字图像处理
在数字图像处理中,Lena(Lenna)是一张被广泛使用的标准图片,特别在图像压缩的算法研究中. 黑白Lena图 标准Lena (为什么用这幅图,是因为这图的各个频段的能量都很丰富:即有低频(光滑 ...
- printf与fprintf函数的区别
printf是标准输出流的输出函数,用来向屏幕这样的标准输出设备输出,而fprintf则是向文件输出,将输出的内容输出到硬盘上的文件或是相当于文件的设备上 printf是有缓冲的输出,fprintf没 ...
- 通过TodoList案例对比Vue.js的MVVM设计模式与JQuery的MVP设计模式
Vue MVVM设计模式: 在使用vue进行编程时,不会再涉及到DOM的操作,取而代之的是修改数据层,当把数据进行变更的时候,vue之中它的底层会自动的根据数据的不同帮助我们去重新渲染页面. 编码时不 ...
- Vue入坑教程(二)——项目结构详情介绍
之前已经介绍了关于Vue的脚手架vue-cli的安装,以及一些文件目录介绍.具体可以查看<vue 入坑教程(一)--搭建vue-cli脚手架> 下面简单说一下具体的文件介绍 (一) pac ...
- android 水波纹效果实现
1.在drawable文件下,新建seletor,作为button的背景,这里我用的是两个圆角的shape <?xml version="1.0" encoding=&quo ...
- python核心编程笔记——Chapter6
Chapter 6.序列:字符串,列表和元组 这章内容比较多啊,看得比较久,而且题目又难很多. 6.1鉴定一个字符串是否是另外一个字符串的字串,这道题目不是很确定,好像没有直接的判定吧. 直接是否内建 ...
- No known class method for selector 'setImage:andName:'错误分析.//删除.h与.m文件时的注意事项
CHENYILONG Blog No known class method for selector 'setImage:andName:'错误分析.//删除.h与.m文件时的注意事项 ...
- HDU 6205 (模拟) card card card
题目链接 Problem Description As a fan of Doudizhu, WYJ likes collecting playing cards very much. One day ...
- js中call与apply的区别以及使用~
今天看了一下call与apply的区别~~ <!DOCTYPE html> <html> <head> <title>testCall</titl ...
- git之存储(git stash)-------(二)
关于git stash命令的使用方法网上一大把,我想记录的是我在使用过程中觉得实用及好用的: 当在一个分支的开发工作未完成,却又要切换到另外一个分支进行开发的时候,可以先将自己写好的代码,储存在一个箱 ...