You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决CircleCI上':device_info_plus'编译失败(无效源版本17)

解决CircleCI/Fastlane环境下Java 17编译版本不匹配问题

问题本质

invalid source release: 17 错误说明编译device_info_plus依赖时,当前环境的JDK版本低于17。本地用Java 17解决后,CircleCI/Fastlane环境需确保全局JDK版本生效、Gradle配置对齐、环境变量传递正确三个核心环节统一为Java 17。

分步解决方案

1. 确保CircleCI全局JDK 17生效

不要仅安装JDK 17,需将其设置为默认版本,避免Gradle调用旧版本JDK:

  • 直接使用带JDK 17的CircleCI Android镜像:
    jobs:
      build:
        docker:
          - image: cimg/android:2024.04.1 # 该镜像默认内置JDK 17
        steps:
          - checkout
          - run: java -version # 验证版本输出为17.x
    
  • 手动安装并切换默认JDK(适用于自定义镜像):
    steps:
      - run:
          name: 安装并设置JDK 17为默认
          command: |
            sudo apt-get update && sudo apt-get install -y openjdk-17-jdk
            sudo update-alternatives --set java /usr/lib/jvm/java-17-openjdk-amd64/bin/java
            sudo update-alternatives --set javac /usr/lib/jvm/java-17-openjdk-amd64/bin/javac
            java -version
            javac -version
      - run:
          name: 配置JAVA_HOME环境变量
          command: |
            echo 'export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64' >> $BASH_ENV
            echo 'export PATH=$JAVA_HOME/bin:$PATH' >> $BASH_ENV
    

2. 强制Gradle使用JDK 17

Gradle可能会使用自身内置JVM,需通过配置强制指定JDK 17:

  • 在项目根目录的gradle.properties中添加:
    org.gradle.java.home=/usr/lib/jvm/java-17-openjdk-amd64
    org.gradle.jvmargs=-Xmx2048m
    
  • 统一项目全局编译版本(根build.gradle):
    tasks.withType(JavaCompile) {
        sourceCompatibility = JavaVersion.VERSION_17
        targetCompatibility = JavaVersion.VERSION_17
    }
    
  • 确保App模块编译配置对齐(android/app/build.gradle):
    android {
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_17
            targetCompatibility JavaVersion.VERSION_17
            coreLibraryDesugaringEnabled true // 兼容低版本Android时启用
        }
        kotlinOptions {
            jvmTarget = '17' // 项目用Kotlin时必须添加
        }
    }
    

3. 验证Fastlane环境变量传递

Fastlane会继承CircleCI的环境变量,可在Fastfile中添加验证步骤,确保JDK版本正确:

lane :build_release do
  sh "java -version" # 确认输出为Java 17
  sh "javac -version"
  gradle(task: "clean assembleRelease")
end

4. 清理CircleCI缓存

旧缓存可能残留旧JDK依赖,需触发缓存更新:

  • 手动清理CircleCI项目控制台中的缓存;
  • 修改缓存key强制重新生成缓存:
    - restore_cache:
        keys:
          - gradle-cache-v2-{{ checksum "build.gradle" }}-{{ checksum "app/build.gradle" }}
    

内容的提问来源于stack exchange,提问作者nyphur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 02:49:51