MAC上使用Android Studio 3.0的Gradle问题小解
一、问题
Google I/O 大会后发布了最新的 Android Studio 3.0 预览版,其中新版本的新特性中直接支持我很想使用的 Kotlin 语言。今天开始认真学习安卓开发( ),我就打算直接使用 Kotlin 语言在 AS 3.0 中写代码,简洁又高效。
下载了 Mac 版本的 Android Studio 3.0 Canary 3 后,发现新建项目后出现一些构建上的问题,主要是 AS 3.0 预览版构建工具使用的是 4.0 新版本的 Gradle ,在工程项目文件: gradle/wrapper/gradle-wrapper.properties
中可以看到这一行:
1 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.0-milestone-1-all.zip |
然后出现几个问题的错误信息包括:
1 | Unable to load class 'org.gradle.internal.event.ListenerBroadcast' |
还有:
1 | Failed to open zip file. |
这些问题在网上随处可见,一般按照提示都能解决,但是我的不行!另外,在我后来 Windows 10 上使用 AS 3.0 时并没有出现这些 Gradle 相关的问题,构建一切正常!(除了长达一个小时的后台任务外 ),所以这些都是和系统上有相关的小问题,在网上 Google 和 Stackoverflow 搜索后陆续解决。
二、解决方法
不仅仅是上面的构建问题,还有后面陆续出现的 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 。
- 手动下载并手动设置
如果按照上面步骤安装好本地 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 | mavenLocal() |
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 | //noinspection GradleCompatible |
感觉这是个 Bug ,有时候又能用,奇怪。
另外我还遇到了一个问题: implementation 'com.android.support:appcompat-v7:25.4.0'
还是不能用,不知道为什么,有朋友知道恳请留言指导,谢谢!
3. 模拟器 Genymotion 连接调试
这是个小问题,新手的话有必要提醒一下。如果不能正常连接 Genymotion 的模拟器,需要在模拟器中设置 SDK 为 Android SDK 。
在 Settings->ADB
下,选中设置 Use custom Android SDK tools
就可以了。
好了,一切就绪,愉快的 code 吧!
三、总结
Gradle 还是很神奇的,目前它使用的 Groovy 语言,同时 Kotlin 语言版的 Gradle 也在进行中: gradle-script-kotlin ,现在也有预览版可以尝鲜,我也正在尝试使用 Kotlin 版本的 Gradle ,可以参考这篇文章:Using Gradle Script Kotlin for Android ,遗憾的是,还没有成功啊,暂时不折腾了,新手能力有限,慢慢来吧!
好吧,就这些小问题,也是对新手的一个考验,留下纪念。
参考资料:
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/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