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

Ell*_*tus 10 java android gradle

为了构建一些Android项目,必须设置环境变量JAVA_HOME。(请参阅此Stack Exchange问​​题Flutter Bug报告。)

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

Gradle是否有任何方法可以获取封闭的Android Studio进程使用的JDK的路径(或者让该进程在无需用户干预的情况下传入JDK)?JAVA_HOME尚未设置时,它应该可以工作。

Mar*_*ler 5

一般有两种选择:

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

org.gradle.java.home=(path to JDK home)
Run Code Online (Sandbox Code Playgroud)

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

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

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

./gradlew -Dorg.gradle.java.home=$JAVA_PATH
Run Code Online (Sandbox Code Playgroud)

供参考:构建环境


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

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


echo $JAVA_HOME
/usr/java/jdk1.8.0_172
Run Code Online (Sandbox Code Playgroud)

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

/usr/bin/which: no java in ...
Run Code Online (Sandbox Code Playgroud)

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


小智 4

你可以定义一个任务your_project_path/app/build.gradle

task javaHome {
    println "JAVA_HOME:" + System.getProperty("java.home")
}
Run Code Online (Sandbox Code Playgroud)

运行任务:

./gradlew -q app:javaHome
Run Code Online (Sandbox Code Playgroud)

结果:

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

Run Code Online (Sandbox Code Playgroud)