如何解决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
相关产品推荐
相关产品推荐

