You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

GitHub Actions中Gradle未使用指定JDK 8执行导致Java版本不兼容的问题解决咨询

GitHub Actions中Gradle未使用指定JDK 8执行导致Java版本不兼容的问题解决咨询

我在Android Studio项目的GitHub Actions工作流里设置了以下步骤:

# previous download of repository
    - name: ☕ Set up JDK 8 ☕
      uses: actions/setup-java@v3
      with:
        distribution: 'temurin'
        java-version: '8'
    - name:  Set JAVA_HOME for Gradle 
      run: echo "org.gradle.java.home=${{ env.JAVA_HOME_8_X64 }}" >> gradle.properties
    - name: ✅ Grant execute permission for Gradle ✅
      run: chmod +x gradlew
    - name:  Build APK 
      run: ./gradlew assembleRelease
    # more actions

但是执行./gradlew assembleRelease的时候报错了,原因是Gradle实际用了Java 21来执行,而我的Android版本只兼容Java 8,请问该怎么解决这个版本不兼容的问题?


我之前也碰到过类似的问题,其实核心是Gradle本身的运行环境和项目编译依赖的JDK可能没对齐,咱们可以从这几个方向调整:

1. 直接在Gradle执行步骤中强制指定JDK环境

有时候光靠gradle.properties里的配置可能不够,因为GitHub Actions的运行环境默认可能带了高版本JDK。咱们可以在执行gradlew的步骤里,直接把环境变量指定为JDK 8的路径,确保Gradle进程用的是咱们指定的版本:

- name:  Build APK 
  run: ./gradlew assembleRelease
  env:
    JAVA_HOME: ${{ env.JAVA_HOME_8_X64 }}
    PATH: ${{ env.JAVA_HOME_8_X64 }}/bin:$PATH

这样能强制覆盖掉系统默认的Java环境,避免Gradle误拾取到高版本。

2. 检查Gradle版本的兼容性

你得留意哦,有些高版本的Gradle本身已经不再支持Java 8作为自身的运行环境了(比如Gradle 8.x及以上版本,要求运行环境至少是Java 11)。如果你的项目用了这类高版本Gradle,哪怕你指定了项目编译用Java 8,Gradle自己还是会去用高版本Java运行。

这种情况有两个解决办法:

  • 降级Gradle到支持Java 8运行的版本(比如Gradle 7.x系列);
  • 调整配置,让Gradle运行用Java 11,但项目编译依然用Java 8——不过这得确认你的Android版本支持这种搭配。

3. 确认setup-java的环境变量是否正确

有时候JAVA_HOME_8_X64这个变量可能没被正确设置,你可以在设置JDK之后加个调试步骤,打印一下环境变量看看:

- name: 🐛 Debug JAVA_HOME 🐛
  run: echo "JAVA_HOME: $JAVA_HOME, JAVA_HOME_8_X64: $JAVA_HOME_8_X64"

如果发现JAVA_HOME_8_X64是空的,那可以改用actions/setup-java设置的JAVA_HOME变量来配置gradle.properties,比如修改这个步骤:

- name:  Set JAVA_HOME for Gradle 
  run: echo "org.gradle.java.home=${{ env.JAVA_HOME }}" >> gradle.properties

备注:内容来源于stack exchange,提问作者José María

火山引擎 最新活动