MAC上使用Android Studio 3.0的Gradle问题小解

2017-06-11 by Liuqingwen | Tags: Android Gradle | Hits

一、问题

Google I/O 大会后发布了最新的 Android Studio 3.0 预览版,其中新版本的新特性中直接支持我很想使用的 Kotlin 语言。今天开始认真学习安卓开发( joy ),我就打算直接使用 Kotlin 语言在 AS 3.0 中写代码,简洁又高效。 smiley

下载了 Mac 版本的 Android Studio 3.0 Canary 3 后,发现新建项目后出现一些构建上的问题,主要是 AS 3.0 预览版构建工具使用的是 4.0 新版本的 Gradle ,在工程项目文件: gradle/wrapper/gradle-wrapper.properties 中可以看到这一行:

gradle-wrapper.properties
1
distributionUrl=https\://services.gradle.org/distributions/gradle-4.0-milestone-1-all.zip

然后出现几个问题的错误信息包括:

1
2
3
4
5
6
7
8
Unable to load class 'org.gradle.internal.event.ListenerBroadcast'
Possible causes for this unexpected error includes:
Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)
Re-download dependencies and sync project (requires network)
The state of a Gradle build process (daemon) may be corrupt. Stopping all Gradle daemons may solve this problem.
Stop Gradle build processes (requires restart)
Your project may be using a third-party plugin which is not compatible with the other plugins in the project or the version of Gradle requested by the project.
In the case of corrupt Gradle processes, you can also try closing the IDE and then killing all Java processes.

还有:

1
2
3
4
Failed to open zip file.
Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout).
Re-download dependencies and sync project (requires network)
Re-download dependencies and sync project (requires network)

这些问题在网上随处可见,一般按照提示都能解决,但是我的不行!另外,在我后来 Windows 10 上使用 AS 3.0 时并没有出现这些 Gradle 相关的问题,构建一切正常!(除了长达一个小时的后台任务外 joy ),所以这些都是和系统上有相关的小问题,在网上 GoogleStackoverflow 搜索后陆续解决。

二、解决方法

不仅仅是上面的构建问题,还有后面陆续出现的 Build 速度慢、 support 包不能用、 Genymotion 模拟器不会连接等等,都需要自己尝试解决,毕竟新手啊!

  • 安装设置 Gradle Home

首先最基本的思路是查看本地 Gradle 是否安装。用过 Linux 系统的朋友很清楚,一个命令行就可以知道: gradle -v 这个命令能查看 Gradle 的版本,我的 Mac 显示 no such command ,所以先安装 Gradle ,参考官网安装指导,我用的 Homebrew :

1
$ brew install gradle

这样安装好之后,一般 Gradle Home 也设置好了,我写此文的时候 Gradle 在我机器上的版本是 3.5 。 smile

  • 手动下载并手动设置

如果按照上面步骤安装好本地 Gradle 后在 Android Studio 中出现这种错误信息:

1
Error:(1, 0) Minimum supported Gradle version is 4.0-milestone-1. Current version is 3.5.

说明版本不适配 AS 3.0 中要求的 Gradle 版本,那么可以直接手动安装并解压到 /usr/local/Cellar/gradle/<your-version>/ 下以备用,下载地址直接使用 gradle-wrapper.properties 中描述地地址,记得去掉 \ 符号。

  • 手动设置 Gradle 工作路径

按理来说,下载了相应版本后只要设置 Gradle Home 到新版本的路径就可以了,不过我没有,你可以尝试一下。

我采用的是直接在 Android Studio 3.0 预览版中单独设置 Gradle 的工作路径。在设置中: Android Studio->Preferences...->Build, Execution, Deployment->Gradle 选择 Use local gradle distribution 然后指定 Gradle home 为你下载解压路径。

OK 了,开始写代码吧!不过我还是碰到了一些不爽的问题,就像我上面描述的:Build 速度超慢、 support 包不能正确编译、 Genymotion 模拟器连接不上等。实际上这些都是小问题,但是这会难倒新手。

  • Build 速度、 support 包、 Genymotion 模拟器

解决办法很简单:

1. 改进 Build 速度

根目录 build.gradle 中设置本地仓库和阿里云仓库

1
2
3
4
5
mavenLocal()
maven { url 'http://maven.aliyun.com/nexus/content/groups/public' }
maven { url 'https://maven.google.com' }
jcenter()
mavenCentral()

2. 解决 support 包问题

感觉 4.0 的 Gradle 还是变化挺大的,以前的 compile 变成了 implementation ,如果遇到编译期间出现的这个问题:

1
Error:Failed to resolve: Could not resolve com.android.support:recyclerview-v7:25.4.0. Required by: ......

那么直接在 app 目录下 build.gradle 中相应库引用位置添加注释: //noinspection GradleCompatible

1
2
//noinspection GradleCompatible
implementation 'com.android.support:recyclerview-v7:25.4.0'

感觉这是个 Bug ,有时候又能用,奇怪。 cold_sweat

另外我还遇到了一个问题: implementation 'com.android.support:appcompat-v7:25.4.0' 还是不能用,不知道为什么,有朋友知道恳请留言指导,谢谢!

3. 模拟器 Genymotion 连接调试

这是个小问题,新手的话有必要提醒一下。如果不能正常连接 Genymotion 的模拟器,需要在模拟器中设置 SDK 为 Android SDK

Settings->ADB 下,选中设置 Use custom Android SDK tools 就可以了。

好了,一切就绪,愉快的 code 吧! sunglasses

三、总结

Gradle 还是很神奇的,目前它使用的 Groovy 语言,同时 Kotlin 语言版的 Gradle 也在进行中: gradle-script-kotlin ,现在也有预览版可以尝鲜,我也正在尝试使用 Kotlin 版本的 Gradle ,可以参考这篇文章:Using Gradle Script Kotlin for Android ,遗憾的是,还没有成功啊,暂时不折腾了,新手能力有限,慢慢来吧! grin

好吧,就这些小问题,也是对新手的一个考验,留下纪念。

参考资料:
Install a Preview Version of Android Studio: https://developer.android.com/studio/preview/install-preview.html
Gradle service version distributions: http://services.gradle.org/distributions/
Gradle Installation: https://gradle.org/install
Using Gradle Script Kotlin for Android: https://medium.com/@arturogdg/using-gradle-script-kotlin-for-android-d6cd58c80d60
Android Studio - Error: Failed to resolve: com.android.support.constraint:constraint-layout:1.0.0-alpha1: https://stackoverflow.com/questions/40160968/android-studio-error-failed-to-resolve-com-android-support-constraintconstr
Android Studio doesn’t see genymotion
: https://stackoverflow.com/questions/27261474/android-studio-doesnt-see-genymotion
Gradle 使用 maven 镜像仓库的方法: https://my.oschina.net/abcfy2/blog/783743



PS (2017-08-25) : 更新 Android Studio 从 Alpha 到 Beta 版本出问题: Gradle project refresh failed.
解决办法是 AS 中: Build > Clean Project

Known issue: If you have an existing Android Studio project that’s using an alpha version of Android plugin 3.0.0 (such as 3.0.0-alpha9), you may get the following error when you migrate to Android plugin 3.0.0-beta1 and sync your project: Gradle project refresh failed.
Resolve this issue selecting Build > Clean Project from the menu bar—you need to perform this action only once for each project. You can then sync your project files with Gradle by clicking Sync Project from the toolbar.

https://androidstudio.googleblog.com/2017/08/android-studio-30-beta-1.html


Comments: