从来好事天生俭,自古瓜儿苦后甜。这篇文章主要讲述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’.`
- api和implementation的区别:
- 问题二: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的问题
- 问题一:Configuration ‘compile’ is obsolete and has been replaced with ‘implementation’ and ‘api’.`
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/
- 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,Gradle 4.4,buildToolsVersion 27.0.3所带来的问题
- 1
- 2
使用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的区别:有一个module_A依赖于glide(module_A使用的是implementation 指令来依赖glide)
api:模块的依赖对外公开,可被依赖包所引用(完全等同于compile指令)
implementation:依赖只作用于当前的module
,将该模块的依赖隐藏在内部,而不对外部公开(使用implementation指令的依赖不会传递)
implementation ‘com.github.bumptech.glide:glide:3.7.0‘
- 1
implementation project(‘:module_A‘)
- 1
module_B要想引用glide,就在module_A使用的是api来引用glide
api ‘com.github.bumptech.glide:glide:3.7.0‘
- 1
文章图片
用api指令编译,Glide依赖对Module是module_B是可见的
文章图片
建议:在Google IO 中提到了一个建议,依赖首先应该设置为implementation的,如果没有错,那就用implementation,如果有错,那么使用api指令。`使用implementation会使编译速度有所增快。`
- 1
- 2
将instrumentTest改为 androidTest
新版本Gradle对instrumentTest做了重命名
旧版本 | 新版本 |
---|---|
instrumentTestCompile | androidTestCompile |
instrumentTest | androidTest |
文章图片
项目里使用了me.tatarka:gradle-retrolambda,
dependencies {
classpath ‘me.tatarka:gradle-retrolambda:3.2.5‘
}
- 1
- 2
- 3
dependencies {
classpath ‘me.tatarka:gradle-retrolambda:3.7.0‘
}
- 1
- 2
- 3
- 4
dependencies {
//classpath ‘com.novoda:bintray-release:0.5.0‘
classpath ‘com.novoda:bintray-release:0.8.0‘
}
- 1
- 2
- 3
- 4
推荐阅读
- Android流量统计
- AndroidStudio升到最新版本(3.1.2)之后
- AndroidStudio3.0到3.1遇到的坑
- 10.14 android输入系统_多点触摸驱动测试及Reader线程InputStage分析
- EOS Dapp开发-基于Docker的开发环境搭建
- Android studio2.3.3升级3.1.2坑
- android 7.0拍照问题file:///storage/emulated/0/photo.jpeg exposed beyond app through ClipData.Item.getUri
- 序列的++=extendappend理解
- 鼠标灵敏度怎样调?鼠标灵敏度调节办法