如何在 Android Studio 中的 Gradle 中获取 JDK 路径?



为了构建一些 Android 项目,需要设置环境变量JAVA_HOME。(请参阅此堆栈交换问题和颤振错误报告。

我正在从事的一个项目就是这种情况。我想更改 Gradle 文件,因此无需设置JAVA_HOME

Gradle 有没有办法获取封闭的 Android Studio 进程使用的 JDK 路径(或者让进程在没有用户干预的情况下传入 JDK(?这应该在未设置JAVA_HOME时起作用。

通常有两个选项可用:

a( 编辑gradle.properties文件并定义要使用的 JDK:

org.gradle.java.home=(path to JDK home)

在那里它不能动态设置,因为它是鸡蛋/母鸡的问题。

它也可能在其他计算机上失败,因为路径可能会有所不同。

但是可以将其作为命令行选项传递:

./gradlew -Dorg.gradle.java.home=$JAVA_PATH

供参考:构建环境。


b( 但是,也可以在文件gradlew之上添加export JDK_HOME语句。想出了一个shell脚本,它至少可以检测Linux上的默认JDK安装(Android Studio在JRE上运行(:

tmp=`which java`
export JAVA_HOME=${tmp::-9}

echo $JAVA_HOME
/usr/java/jdk1.8.0_172

当然,人们还必须考虑根本不存在JDK:

/usr/bin/which: no java in ...

通常,这假设默认的JDK已经设置了替代方案,就像包管理器通常会做的那样; 例如yum install jdk1.8.0_102.x86_64。这里的问题是,没有简单的方法来识别在Windows上使用哪个JDK路径,因为Windows没有which命令,并且可能必须从注册表中读取。帮助程序 PS 脚本或可执行文件可以查找该值并根据需要截断,从文件gradlew.bat调用。可能还有其他方法可以获取路径。

您可以在your_project_path/app/build.gradle中定义任务

task javaHome {
println "JAVA_HOME:" + System.getProperty("java.home")
}

运行任务:

./gradlew -q app:javaHome

结果:

JAVA_HOME:/usr/lib/jvm/java-8-openjdk-amd64/jre

最新更新