跳转到内容

Android Studio Gradle 配置解决方案

本文基于以下环境:

  • 系统:Ubuntu 15.10
  • Android Studio:2.2.3,其他系统的操作类似。

使用 Android Studio(以下简称 AS)导入安卓项目时,经常会在 Gradle build 时卡死在 Building gradle project info 界面上。

原因是被导入项目的 Gradle 构建工具版本与当前使用的版本不一致。因为网络原因使得 Android Studio 在后台下载 Gradle 速度较慢,导致 AS 出现假死的现象。

实际上AS一直在后台下载 Gradle 工具,通过 Ubuntu 的终端可以看到下载的情况。 AS 终端日志:

Downloading https://services.gradle.org/distributions/gradle-2.12-all.zip
................................................................
................................................................
//下载成功
Unzipping /home/<user>/.gradle/wrapper/dists/gradle-2.12-all/8ywkdai6puj5z81fume4e7njw/gradle-2.12-all.zip
to /home/<user>/.gradle/wrapper/dists/gradle-2.12-all/8ywkdai6puj5z81fume4e7njw
Set executable permissions for: /home/<user>/.gradle/wrapper/dists/gradle-2.12-all/8ywkdai6puj5z81fume4e7njw/gradle-2.12/bin/gradle
//...

说明解决方案前先介绍 Android Plugin for Gradle 和 Gradle 构建工具的版本配置位置 (Gradle 配置构建)。

Android Plugin for Gradle 的版本配置位置

Section titled “Android Plugin for Gradle 的版本配置位置”

顶级 build.gradle 文件位于项目根目录,用于定义适用于项目中所有模块的构建配置。 在项目的顶级构建文件中,我们配置了 Android Plugin for Gradle 的版本。

buildscript {
/**
* The repositories {} block configures the repositories Gradle uses to
* search or download the dependencies. Gradle pre-configures support for remote
* repositories such as JCenter, Maven Central, and Ivy. You can also use local
* repositories or define your own remote repositories. The code below defines
* JCenter as the repository Gradle should use to look for its dependencies.
*/
repositories {
jcenter()
}
/**
* The dependencies {} block configures the dependencies Gradle needs to use
* to build your project. The following line adds Android Plugin for Gradle
* version 2.2.0 as a classpath dependency.
*/
dependencies {
classpath 'com.android.tools.build:gradle:2.2.0'
}
}

Android Plugin for Gradle 版本不同于 Gradle 版本,Gradle Plugin 是 AS 用来构建安卓 App 的一个插件,提供了一些针对 Android 应用的特征。

Gradle 工具是用来自动化执行和管理构建流程,同时也允许你定义灵活的自定义构建配置的高级构建工具(类比Maven/Ant等)。Android Plugin for Gradle 与这个构建工具包协作,共同提供专用于构建和测试 Android 应用的流程和可配置设置(Android 官网介绍)。

以下为安卓插件版本与 Gradle 版本的对应关系:

Plugin version Required Gradle version
1.0.0 - 1.1.3 2.2.1 - 2.3
1.2.0 - 1.3.1 2.2.1 - 2.9
1.5.0 2.2.1 - 2.13
2.0.0 - 2.1.2 2.10 - 2.13
2.1.3+ 2.14.1+

Gradle 构建工具版本则配置在工程项目的gradle/wrapper/gradle-wrapper.properties文件中

...
distributionUrl = https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
...

解决 Gradle 工具下载时,AS 出现假死有两个方案:

  • 手动下载 Gradle 构建工具;
  • 使用当前可用的 Gradle 构建工具。

1.导入工程,卡在Building gradle project info的界面时,强制退出AS。这一步主要是为了生成第四步需要用到的 t7wfomcrmv8dmyii9c9waem8 文件夹。

2.查看需要导入的工程目录下的 gradle/wrapper/gradle-wrapper.properties文件,查看当前使用的 Gradle 版本。

distributionUrl = https\://services.gradle.org/distributions/gradle-2.14.1-all.zip

3.从 Gradle 下载 下载相应版本的Gradle Distribution。

4.将下载的.zip复制到如下位置:

ubuntu:/home/.gradle/wrapper/dists/gradle-2.14.1-all/t7wfomcrmv8dmyii9c9waem8
win7:C:\Users\Administrator\.gradle\wrapper\dists\gradle-2.14.1-all\8bnwg5hd3w55iofp58khbp6yv

注意:t7wfomcrmv8dmyii9c9waem8这个随机数文件夹是第一步导入时AS 自动生成的,每个人有可能不一样

5.重新启动 AS ,导入项目。

1.新建一个 AS 项目或者打开一个已有的可以运行的项目。

2.查看可运行项目工程目录下的 gradle/wrapper/gradle-wrapper.properties文件,查看当前使用的Gradle 版本。

distributionUrl = https\://services.gradle.org/distributions/gradle-2.4-all.zip

3.复制distributionUrl这一整行的内容:

distributionUrl=https\://services.gradle.org/distributions/gradle-2.4-all.zip

4.将复制内容粘贴到导入工程gradle/wrapper/gradle-wrapper.properties文件的相应位置,替换原有的 distributionUrl。

5.打开可运行项目的顶级构建文件,查看当前插件版本

dependencies {
classpath 'com.android.tools.build:gradle:1.3.1'
}

6.修改导入工程的顶级构建文件中的插件版本。

7.重新使用 AS 导入工程。

第一种解决方案同样需要下载 Gradle ,手动下载的速度依据网络情况不同下载时间也不一样。 例如gradle-2.14.1-all.zip的压缩包大小约为 60 MB,下载时间大概 5 分钟。

第二种解决方案操作相对繁琐,但是不需要下载 Gradle 工具。但是需要注意 Plugin 的版本和 Gradle 构建工具版本的对应情况。

不同版本 Gradle 构建工具的方法有不一致的地方,为了避免出现项目构建失败或者引起其他问题,因此比较推荐第一种解决方案。

如果有 VPN ,直接导入工程,然后等待下载完成,下载时间根据网络情况4-10分钟不等。