让 Terminal 和 Android Studio 使用同一个 Gradle Daemon
在同时使用 Terminal 和 Android Studio 开发和编译 Android 项目时,跑 gradle 任务经常有一个提示,类似:
Starting a Gradle Daemon, 2 incompatible Daemons could not be reused, use --status for details
这表示 Gradle 又开启了一个新的 Daemon,已经存在的没有被重用。
执行gradlew --status
可以看到已经有3个Daemon 存活,对于我这台13年末产的老爷机来说是个严重的负担
1 | $ ./gradlew --status |
存在多个 Daemon 的原因
Gradle 官方给的解释是:
- Gradle 版本不一样,比如一个项目用了 Gradle 4.4 而另一个用了 Gradle 4.6;
- Java 版本不一样,比如一个项目使用 JDK 7 而另一个则是 JDK 8 执行的 Gradle;
- Daemon JVM 参数不一样,比如一个项目指定了
-Xmx1024m
而另一个-Xmx2048m
; - 存在的 Daemon 都处于
BUSY
状态,比如Android Studio 和 Terminal 同时跑 Gradle 任务。
如何共用一个Daemon
针对上述原因,可以得到以下方案:
对于同一个项目来说,使用同一个 JDK 执行 Gradle即可;如果是多个项目则另外需要指定使用同一个版本的gradle、并设置同样的 JVM 参数。
如何让 Android Studio 和 Terminal 使用同一个 JDK
Android Studio 使用的其实是内置的 Open JDK,而 Terminal 则使用的机子上安装的 JDK
1 | $ /Applications/Android\ Studio.app/Contents/jre/jdk/Contents/Home/jre/bin/java -version |
这里,我将 Android Studio 的 JDK 路径改为机子上安装的 JDK:
MacOS 上可以使用 /usr/libexec/java_home
命令获取 JDK 的安装路径
1 | $ /usr/libexec/java_home |
Android Studio 中 File -> Project Structure
将 Use embeded JDK
勾掉,并修改为本机的JDK路径即可