详解Android Gradle插件3.0挖坑日记

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

  1. Gradle 4.1
  2. Android Studio
  3. Gradle
  4. 配置属性

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

配置属性的改动

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

implementation

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

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

官方的 Maven 库

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

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

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

repositories {
  google()
}

一些报错

1. 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 导致的报错。

2. 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 使用了比它低的版本,就会报这个错误。

3. 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'
    }
  }
}

加上这些代码。问题即可解决。

4. 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
      }
    }
}

5.All flavors must now belong to named flavor dimension.

参考官网链接 : 官网解决链接

截个图

6. databinding

不仅需要

 dataBinding {
    enabled = true
 }

还需要

implementation 'com.android.databinding:library:1.3.1'
implementation 'com.android.databinding:adapters:1.3.1'

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 详解Androidstudio3.0 关于Gradle报错的问题(小结)

    前言 升级Android Studio to 3.0 canary 1版本后,之前一个正常的Project,一直报错,报错内容如下 Error:Failed to complete Gradle execution. Cause: The version of Gradle you are using (3.3) does not support the forTasks() method on BuildActionExecuter. Support for this is available

  • android studio 3.0 gradle 打包脚本配置详解

    本文介绍了android studio 3.0 gradle 打包脚本配置,分享给大家,具体如下: 修改输出的名字 保存输出的文件路径 def fileArray = [] //遍历输出文件 android.applicationVariants.all { variant -> variant.outputs.all { output -> def outputFile = output.outputFile if (outputFile != null && outputF

  • 详解Android Gradle插件3.0挖坑日记

    为了提升编译速度,这几天用上了 AS 3.0 和 Gradle 3.0 插件,不得不说不论是 AS 3.0,还是 Gradle 3.0 都变化非常大,具体的更新日志参考下官网,其中 Gradle 3.0的配置和可能遇到的问题可以说是非常详细了.Gradle 4.1-all 官方下载速度很慢,我直接放出来下载地址和相关官方文档地址吧. Gradle 4.1 Android Studio Gradle 配置属性 下面来列决下我遇到的坑和解决方法: 配置属性的改动 Gradle 3.0 和之前有一点很

  • 详解Android Studio 3.0的新特性与适配

    简介 Android Studio升级到3.0后,有不少的改动和新特性,先贴出官方的迁移说明. 本文会持续收集与总结本人在使用Android Studio 3.0进行开发的过程中所遇到的问题. 版本配置 Gradle版本 Android Studio 3.0需要的Gradle版本至少为4.1. 如果是使用gradle wrapper,则工程根目录/gradle/wrapper/gradle-wrapper.properties中的distributionUrl字段为https\://servic

  • Android+OpenCV4.2.0环境配置详解(Android studio)

    仅是个人记录,希望能对有需要的给予一些小小的帮助 首先我们肯定是要去到OpenCV的官网下载对应的SDK,并解压得到文件夹(opencv-4.2.0-android-sdk) 其次是NDK环境搭建(双击shift,输入sdk,找到sdk manager,将下面红色框框勾选安装) 创建项目,我选用的是(并不是只有这一选择) 导入Module File->New->Import Module 路径选择**\opencv-4.2.0-android-sdk\OpenCV-android-sdk\sd

  • 详解Android中PopupWindow在7.0后适配的解决

    本文介绍了详解Android中PopupWindow在7.0后适配的解决,分享给大家,具体如下: 这里主要记录一次踩坑的经历. 需求:如上图左侧效果,想在按钮的下方弹一个PopupWindow.嗯,很简单一个效果,然当适配7.0后发现这个PopupWindow显示异常,然后网上找到了下面这种方案. 7.0适配方案(但7.1又复现了) // 将popupWindow显示在anchor下方 public void showAsDropDown(PopupWindow popupWindow, Vie

  • 详解Android Studio中Git的配置及协同开发

    一. Android Stutio配置git setting–>Version Control–>Git–>Path to Git executable中选择git.exe的位置,这个Stutio一般会默认配置好: 配置完路径后点击后面的Test按钮,出现下面提示框则表示配置成功: 二. 将项目分享到github 1. 设置github账号密码 打开Setting–>Version Control–>GitHub,填写完账号密码后,点击Test测试,如果连接成功会弹出如下提示

  • 详解Android studio 3+版本apk安装失败问题

    studio2.3升级到3.1之后将apk发给别人下载到手机上安装,华为提示安装包无效或与操作系统不兼容,魅族提示apk仅为测试版,要求下载正式版安装. 在网上找了一下,发现是studio3.0之后的instant run功能引起的,直接点击绿色箭头按钮烧出来的apk都是不完整的,也就是魅族指的测试版,并且这个apk的路径在app\build\intermediates\instant-run-apk\debug下,而原来的app\build\outputs\apk\debug路径下已经没有ap

  • 详解Android Studio实现用户登陆界面demo(xml实现)

    使用Android Studio 编写的第一个demo,使用布局文件-xml实现用户登录界面 注:所建工程均为Android 6.0 所以只要是Android 6.0(包括6.0)以上的真机,模拟机都可以使用 Step1:Android Studio 开发环境的搭建: 1.安装JDK (1.8): 2.安装Android studio (3.3.1) 包含 gradle.sdk manage .avd manage : 3.使用sdk manage 下载安装 sdk: 4.使用avd manag

  • 详解Android性能优化之启动优化

    1.为什么要进行启动优化 网上流行一种说法,就是8秒定律,意思是说,如果用户在打开一个页面,在8秒的时间内还没有打开,那么用户大概的会放弃掉,意味着一个用户的流失.从这里就可以看出,启动优化的重要性了. 2.启动的分类 2.1 冷启动 先来看看冷启动的流程图 从图中可以看出,APP启动的过程是:ActivityManagerProxy 通过IPC来调用AMS(ActivityManagerService),AMS通过IPC启动一个APP进程,ApplicationThread通过反射来创建App

  • 详解android在mob平台实现qq登陆和分享

    个人感觉mob平台功能还是比较强大的,很多功能都可以通过他们平台来实现. 建议仔细观看每一个步骤,如果一个步骤没处理好,可能就会让你的这个功能无法实现.相信我一定可以成功的. 废话少说,先看一下效果: 1.在mob平台配置ShareSDK环境 1.如何在mob平台创建应用 下面为我创建的应用,如图所示,我们选择接入的接口为ShareSDK 2.获取你的App Key和App Secret(建议用自己的) 获取你先创建应用的App Key和App Secret,这里主要告诉你在哪里找App Key

  • 详解Android Lint的原理及其使用

    Android Lint 原理及使用详解 Android Lint 是 ADT 16中引入的新工具,用于扫描 Android 项目源中的潜在错误. Lint 是 Android 提供的一个强大的,用于静态扫描应用源码并找出其中的潜在问题的实用工具.lint 工具可以检查你的 Android 项目源文件是否有潜在的错误,以及在正确性.安全性.性能.易用性.无障碍性和国际化方面是否需要优化改进. Lint 既可以用作命令行工具,也可以与 Eclipse 和 IntelliJ 集成在一起.它被设计成独

随机推荐