如何使用Android Studio OpenJDK在TFS 2017上构建Android应用?
解决TFS 2017 Gradle任务适配Android Studio内置OpenJDK的问题
我之前帮团队处理过一模一样的问题——TFS 2017的Gradle任务对Oracle JDK的依赖确实有点“顽固”,但通过以下几个方案,完全可以切换到Android Studio内置的OpenJDK,避开许可变更的问题:
方案1:系统级配置JAVA_HOME并重启代理
这是最基础但容易被忽略的步骤:
- 先找到Android Studio内置OpenJDK的具体路径:
- 新版本Android Studio(Arctic Fox及以后)一般在
Android Studio安装目录/jbr - 旧版本可能在
Android Studio安装目录/jre
- 新版本Android Studio(Arctic Fox及以后)一般在
- 在构建代理的机器上,设置系统级的JAVA_HOME环境变量指向这个路径,而不是用户级变量(TFS代理服务一般以系统账户运行,读不到用户变量)
- 必须重启TFS构建代理服务!不重启的话,代理不会加载新的环境变量
- 验证:在代理机器的命令行里运行
echo %JAVA_HOME%(Windows)或echo $JAVA_HOME(Linux),再执行java -version,确认输出的是OpenJDK版本
方案2:在TFS构建定义中强制指定JDK路径
如果系统级配置没生效,可以直接在构建任务里硬指定:
- 打开你的TFS构建定义,找到Gradle任务
- 不要选择“按JDK版本设置JAVA_HOME”,而是切换到“手动指定JDK路径”,填入Android Studio内置OpenJDK的完整路径
- 额外保险:在Gradle任务的参数栏里添加
-Djava.home=你的OpenJDK完整路径,强制Gradle使用这个JDK实例
方案3:修改TFS代理配置文件全局指定
如果需要让这个代理上的所有构建任务都用OpenJDK,可以修改代理的配置文件:
- 找到TFS代理安装目录下的
config.cmd(Windows)或config.sh(Linux) - 在文件开头添加环境变量设置:
- Windows:
set JAVA_HOME=你的OpenJDK路径 - Linux:
export JAVA_HOME=你的OpenJDK路径
- Windows:
- 保存后重启TFS代理服务,之后所有通过这个代理的构建都会默认使用该JDK
额外注意事项
- 确认OpenJDK版本与项目Gradle版本兼容:Android Studio的内置JDK一般是符合Gradle要求的,但如果你的项目用了较旧的Gradle版本,可能需要对应JDK 8,要核对版本匹配
- 优先测试本地构建:先在代理机器上手动运行
gradlew build(如果用Gradle Wrapper)或gradle build,确认能正常构建,再放到TFS里执行,这样可以快速排除TFS本身的问题 - 不要修改项目的Gradle Wrapper配置:除非必要,否则不要改动项目里的
gradle/wrapper/gradle-wrapper.properties,保持项目配置的通用性,代理端的配置更灵活
内容的提问来源于stack exchange,提问作者Sacha K




