一、Java8确实快了

为了提升编译速度,这几天用上了 AS 3.0 和 Gradle 3.0 插件,不得不说不论是 AS 3.0,还是 Gradle 3.0 都变化非常大,具体的更新日志参考下官网,其中 Gradle 3.0的配置和可能遇到的问题可以说是非常详细了。Gradle 4.1-all 官方下载速度很慢,我直接放出来下载地址和相关官方文档地址吧。

网盘下载地址:https://pan.baidu.com/s/1o80wwu2

密码: h9nb

Android Studio

Gradle

配置属性官方迁移指南

下面来列决下我遇到的坑和解决方法:

二、配置属性的改动

Gradle 3.0 和之前有一点很大的不同就是配置属性的变化,详情可以参考上面列出的配置属性链接,这里我再具体的把两个关键字implementation和api解释一下。这里我使用的插件版本为build:gradle:3.0.0-beta5

三、api

api你可以简单的理解为之前的compile。举个例子,你使用api在lib.A下的build.gradle引用一个本地lib包,这里假设名为lib.A,那么当lib.B有改动的时候,重新编译不仅会编译lib.B,还会编译包括lib.A的所有通过api引用它的包。使用api进行引用,相当于把lib.B对外暴露了接口,这时候,假使有一个lib.C引用了lib.A,那么lib.C是可以直接使用lib.B的代码的。简单的画个图来解释下。

四、api引用示例.png

可以看到,通过api来引用实际上是和原来的compile一样的,虽然可以让lib.B的接口让lib.C来使用,但当lib.B有代码改动的时候,lib.A和lib.C都需要重新编译,无疑编译速度大大降低了。

如下图所示。implementation 引用的 lib 不会对外暴露自己的接口,也就是说,当lib.A implementation lib.B,lib.C implementation lib.A 的时候,如果lib.B发生了改变,那么只有lib.A会重新编译,lib.C将不会编译!这将大大减少编译时间。

![Uploading implementation引用实例_625757.png …]

总而言之,更好的方式就是尽量使用implementation来进行依赖,这样会大大改善工程的构建时间,除非你明确需要向外暴露当前 lib 依赖的接口时,才需要使用 api 依赖。

六、官方的 Maven 库

之后很多官方库的最新版本比如multidex等等,都会在官方的 Maven 库中进行更新,所以,如果你需要引用这些最新版本的库,你就需要配置官方的 Maven 地址maven {

url "https://maven.google.com"

}

如果你使用的是 4.0 版本以上的 gradle,那么可以直接使用 google() 来配置仓库:repositories {

google()

}

七、一些报错Error:Could not get unknown property ‘apkVariantData’ for object of type com.android.build.gradle.internal.api.ApplicationVariantImpl.

Gradle 3.0 的 api 有一些变化,所以如果你项目中引用了一些第三方 gradle 插件使用了一些旧的api,就会导致报错,比如这里就是因为apkVariantData这个指令已经从 gradle 3.0 剔除了。

解决方法首先是看看你引用的包的最新版本有没有适配3.0的。如果没有,要么你去下载它的插件源码,升级它的 gradle 插件到 3.0 ,再自己把过时的 api 换掉,要不就先暂时在项目中注释掉相关插件代码。

比如我这里就是因为AndResGuard使用了这个老 api 导致的报错。Error:The specified Android SDK Build Tools version (23.0.1) is ignored, as it is below the minimum supported version (25.0.0) for Android Gradle Plugin 3.0.0-beta5.Android SDK Build Tools 26.0.0 will be used.

Gradle 3.0 的最低支持 SDK Build Tools 版本为 25.0.0,所以如果你的项目中的 application 和 library 使用了比它低的版本,就会报这个错误。Error:Removing unused resources requires unused code shrinking to be turned on. See http://d.android.com/r/tools/shrink-resources.html for more information.

官网的说明很清楚了:

资源压缩只与代码压缩协同工作。代码压缩器移除所有未使用的代码后,资源压缩器便可确定应用仍然使用的资源。这在您添加包含资源的代码库时体现得尤为明显 - 您必须移除未使用的库代码,使库资源变为未引用资源,才能通过资源压缩器将它们移除。

要启用资源压缩,请在 build.gradle 文件中将 shrinkResources 属性设置为 true(在用于代码压缩的 minifyEnabled 旁边)。例如:android {

...

buildTypes {

release {

shrinkResources true

minifyEnabled true

proguardFiles getDefaultProguardFile('proguard-android.txt'),

'proguard-rules.pro'

}

}

}

加上这些代码。问题即可解决。Error:java.lang.RuntimeException: Annotation processors must be explicitly declared now. The following dependencies on the compile classpath are found to contain annotation processor. Please add them to the annotationProcessor configuration.

这个问题是注解适配问题,新的 gradle 插件不再支持 annotation processors,如果需要使用需要显式声明:defaultConfig{

...

versionCode 1

versionName 1.0

javaCompileOptions {

annotationProcessorOptions {

includeCompileClasspath false

}

}

}

android studio漫画,Android Studio 3.0 更新Gradle 插件填坑相关推荐

  1. 【错误记录】Android Studio 创建 Flutter 应用被卡住 ( 更新 Flutter 插件 | 命令行创建 | 断网 )

    文章目录 一.报错信息 二.解决方案 一.报错信息 在 Android Studio 中 , 选择 " 菜单栏 / File / New / New Flutter Project &quo ...

  2. Gradle 7.0+发布Gradle插件到私有maven仓库笔记

    最近用Java写了一个Gradle插件 插件介绍 https://blog.csdn.net/wang382758656/article/details/124236006?spm=1001.2014 ...

  3. 数据仓库有坑怎么办,如何从0到1来填坑

    |0x00 什么是数据仓库的坑 "填坑"是一个新人刚加入团队,或者是接手一个新业务,所以经常需要面对的事情. "坑"的出现,与历史业务的发展,密切相关.通常体现 ...

  4. kylin4.0.1安装与填坑

    kylin4.0.1安装 解压安装包 将hdfs-site.xml,core-site.xml,hive-site.xml,spark-defaults.conf文件添加到/$KYLIN_HOME/c ...

  5. Android Gradle和Gradle插件区别

    2019独角兽企业重金招聘Python工程师标准>>> 一.引言 1.什么是Gradle?什么是Gradle插件? build.gradle中依赖的classpath 'com.an ...

  6. android studio 更新 Gradle错误解决方法

    Android Studio每次更新版本都会更新Gradle这个插件,但由于长城的问题每次更新都是失败,又是停止在Refreshing Gradle Project ,有时新建项目的时候报 Gradl ...

  7. XM7 FOR ANDROID,如何使用Android Studio开发Gradle插件

    缘由 首先说明一下为什么会有这篇文章.前段时间,插件化以及热修复的技术很热,Nuwa热修复的工具NuwaGradle,携程动态加载技术DynamicAPK,还有希望做最轻巧的插件化框架的Small.这 ...

  8. 如何在Visual Studio中安装.net6.0 或者 将在Visual Studio中将.net 5.0更新为6.0

    将在Visual Studio中将.net 5.0更新为6.0? 1.如何在Visual Studio中安装.net6.0 2.要将 visual studio 中的 .net 5.0 更新到 .ne ...

  9. AndroidStudio Refreshing Gradle Project编译更新Gradle卡住问题

    描述 重新安装AndroidStudio或从Eclipse换到AS的时候,在编译新的项目的时候,一般会遇到如下图那样. 一般是因为在AndroidStudio每次更新版本都会更新Gradle这个插件( ...

最新文章

  1. Ubuntu下取消MySQL自动启动
  2. 计算机网络-基本概念(5)【网络层】-IP多播
  3. 3分钟弄明白JAVA三大修饰符
  4. P3375 【模板】KMP字符串匹配
  5. CF1271D Portals
  6. python3.8 实现鼠标自动移动_“新生报到”!【移动机器人 HD-1500】负载1500kg,实现了重型货物运输的自动化...
  7. Java案例:读取文本文件部分内容
  8. Eclipse导出WAR包
  9. linux的acid属性,Linux_Linux下主要浏览器Acid3大测试(组图),最近浏览器大战愈演愈烈,而 - phpStudy...
  10. 怎么把手机录音转换成mp3?
  11. 五合一建站系统YouDianCMS开源啦
  12. 深度解析:什么是支付核心?
  13. 为什么DDR电源设计时需要VTT电源?
  14. Excel中的Vlookup函数操作实例
  15. USB通信协议与供电协议全解
  16. win10亮度_Win10系统运行游戏或大型软件的优化设置教程
  17. tableau ODBC驱动下载方法和链接(连接mysql的驱动)
  18. 什么是软连接,以及软连接在linux系统中的用法
  19. jquery徽章_城市需要能够获得数字徽章
  20. 正在从你的计算机中删除office,手动删除Office 2013或Office 365即点即用安装的步骤...

热门文章

  1. 广东设大学生创业基金及股权交易平台
  2. php 文件夹打包_php将文件夹打包成zip文件
  3. GitHub重磅官宣!这些面试官常问的开发面试题你都掌握好了吗?吐血整理
  4. Spring 核心方法 refresh 刷新流程简要概述及相关源码扩展实现(一)
  5. 【周赛-简单】5488. 使数组中所有元素相等的最小操作数
  6. 韩国机器美女能说会道 面有喜怒
  7. java虚拟机架构图,图解快速入门Java虚拟机JVM
  8. HDU-2570 迷瘴
  9. 关于Echarts使用本地文件时出现的问题
  10. 两台PC通过网线传输文件方法