原文:https://blog.csdn.net/xiariluoxue/article/details/80050700

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应用程序特有的几项功能。

  1. AndroidStudio:是Google官方基于IntelliJ IDEA开发的一款Android应用开发工具
  2. Gradle:是一个工具,也是一个编程框架。使用Gradle可完成app的编译打包等工作。
  3. 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

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 踩到的坑的更多相关文章

  1. Android Studio 升级到3.0 提示 java.lang.NoClassDefFoundError

    Android Studio 升级到3.0 提示 java.lang.NoClassDefFoundError 这个问题折腾了2个小时,最后解决了,Stack Overflow 上也有一次类似的问题, ...

  2. android studio 升级到3.3.1后,提示程序包不存在

    android studio 升级到3.3.1后,提示程序包不存在 原因 主Module--A 引用了其他Moduel--B里的jar库, 只需要把B的dependencies改成如下(implent ...

  3. Android Studio 升级到3.0后出现编译错误\.gradle\caches\transforms-1\files-1.1\*****-release.aar

    Android Studio 升级到3.0后出现各种编译问题,其中有一个问题是关于资源找不到的问题,百度了半天,也没有相关的文章 C:\Users.gradle\caches\transforms-1 ...

  4. 关于Android Studio升级到2.0后和Gradle插件不兼容的问题

    今天升级AS到2.0后,用AS在真机上调试,发现报了如下错误: This version of Android Studio is incompatible with the Gradle Plugi ...

  5. Android Studio升级后projectBuild failed.

    近期在升级Android Studio后,发现原先能编译通过的project,突然就编译只是了,原因是生成的AndroidManifest.xml文件里有乱码. 升级后: android studio ...

  6. 记一次Android studio升级之后的坑

    像往常一样打开Android studio,但这次它提示我升级!说是什么为了更好的体验,在好奇心的驱使下,我毅然地点击了“update”按钮.升级之后,编译项目,报出了N多个error,我的心都慌完! ...

  7. Android Studio升级后报 method not found: 'runProguard'的错误

    今天升级了下Android Studio,然后发现更新gradle,然后在sync项目的时候总是报  method not found: 'runProguard'的错误 找了很多发现不对. 最后解决 ...

  8. Android studio 升级,不用下载完整版,完美更新到2.0

    Android studio 2.0 公布已有一旦时间,据说,速度大大提高了.但是一直没有尝试更新,看到大家相继更新,所以迫不及待就准备更新,但是.更新之路确实异常坎坷.询问度娘,千奇百怪的问题接憧而 ...

  9. android开发里跳过的坑——android studio升级完成后eclipse adt无法正常使用

    最近有时间,把android studio做了一次升级,升级完成后,悲催的发现eclipse不能正常运行了,网上查了好多资料,试了很多方法都不行,最后把eclipse使用的sdk与AS使用的SDK区分 ...

随机推荐

  1. Docker应用二:docker常用命令介绍

     Docker常用命令使用介绍 docker中常用的命令: 1.docker search image_name:搜查镜像 2.docker pull image_name:从镜像库中拉去镜像 3.d ...

  2. Linux安装配置SVN服务器

    1. 安装SVN服务器: 检查是否已安装 # rpm -qa subversion 安装SVN服务器 # yum install httpd httpd-devel subversion mod_da ...

  3. memcmp 和 memcpy使用

    #include <iostream> #include <cstring> #include <cstdlib> #include <cstdio> ...

  4. bat 批量更改文件名

    通过如下批处理命令可实现批量更改文件名: @echo set DIR="%cd%" echo DIR=%DIR% set /p ext=文件类型: set /p find=要替换内 ...

  5. 用pip install升级已安装的包的附加包, 以tabulate包为例

    用pip install升级已安装的附加包, 以tabulate包为例 去pypi官网查看tabulate包的介绍, 发现tabulate 0.7.6才开始支持宽字符的美化打印. 而且还需要安装它的附 ...

  6. elasticsearch-head插件安装说明

    下载及安装readme https://github.com/mobz/elasticsearch-head 安装: npm install npm run start 访问:http://local ...

  7. JavaScript基本运算

    JavaScript基本运算 JavaScript:其实它的基本运算和我们数学的基本运算类似的. --------------------------------------------------- ...

  8. 创造101:如果软件测试工程师组团出道,怎样才能站C位?!

    作者 C位出道的华华 虽然华华是一个软件测试技术宅,可以连续七七四十九天加班不重样,心里除了上班工作学习写代码就没有别的爱好了,但是各种潮流资讯啊狗血剧啊娱乐综艺啊,从来没有错过. 比如说现在大火的& ...

  9. js 语法简写积累

    if (!a || !b || !c || !d){//} 简写为:if([a, b, c, d].map(Boolean).includes(false)){//};

  10. Java编程思想 4th 第3章 操作符

    有了数据,还需要进行数据间的运算,因此Java中也有数据间运算的各种符号,书本称之为操作符,正确的翻译应该是运算符. Java中的运算符同C++相同,运算符同运算符对象构成表达式,表达式是运算对象及运 ...