1

升级到 Gradle 7 后,项目在 Android Studio 的本地 PC 上成功构建,但在 Gitlab 管道中没有。

Gradle 7.0.2 需要 Java 11。

Gitlab管道中的错误消息是

评估项目 ':app' 时出现问题。未能应用插件“com.android.internal.application”。Android Gradle 插件需要 Java 11 才能运行。您当前使用的是 Java 1.8。您可以尝试以下一些选项: - 更改 IDE 设置。- 更改 JAVA_HOME 环境变量。-改变org.gradle.java.homegradle.properties

(通过在命令提示符下从项目目录在本地计算机上执行以下命令来检查您的 gradle 版本)

 .\gradlew --version

.gitlab-ci.yml: 原始完整的 .gitlab-ci.yml 脚本在 2018 年的这篇文章中进行了描述,该脚本适用于 Java 1.8(不适用于 Java 11)和 Gitlab 上的 gradle 4(不适用于 gradle 7):https: //about.gitlab.com/blog/2018/10/24/setting-up-gitlab-ci-for-android-projects/

在 Android Studio 的本地电脑上:从 Java 1.8 升级到 11

在 Android Studio 的本地电脑上,从 Java 1.8 升级到 11 需要 3 个步骤(并重新启动):

第 1 步:将 Android Studio 中的 Gradle 设置调整为 Java 11 或更高版本

(Arctic Fox 2020.3.1 补丁4:文件->设置->构建、执行、部署->构建工具->Gradle->Gradle JDK) 在此处输入图像描述

第 2 步:更新 JAVA_HOME 变量(Windows“编辑系统环境变量”[在此处输入图像描述

将 JAVA_HOME 变量设置为与 Android Studio 中的相同

第 3 步:将 build.gradle 从 JavaVersion.VERSION_1_8 更新为 JavaVersion.VERSION_11 在此处输入图像描述

在此处输入图像描述

通过选择打开(在灯泡中或右上角) 在此处输入图像描述 重新启动,也可以在菜单项目结构中更改它。

.gitlab-ci.yml :从 Java 1.8 升级到 11

当基于新 gradle 版本 7.0.2 构建的代码被推送到 gitlab 时,原始 .gitlab-ci.yml 使用 Gradle 7.0.2 产生以下错误:

原始 gitlab.ci.yaml 的第一个错误

评估项目 ':app' 时出现问题。未能应用插件“com.android.internal.application”。Android Gradle 插件需要 Java 11 才能运行。您当前使用的是 Java 1.8。您可以尝试以下一些选项: - 更改 IDE 设置。- 更改 JAVA_HOME 环境变量。-改变org.gradle.java.homegradle.properties

从第 1 行更改 .gitlab-ci.yml 中的图像

image: openjdk:8-jdk

image: openjdk:11-jdk

产生了另一个错误:

$ 回声 y | android-sdk-linux/tools/bin/sdkmanager "platforms;android-${ANDROID_COMPILE_SDK}" >/dev/null 线程 "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema at com. android.repository.api.SchemaModule$SchemaModuleVersion.(SchemaModule.java:156) 在 com.android.repository.api.SchemaModule.(SchemaModule.java:75) 在 com.android.sdklib.repository.AndroidSdkHandler.(AndroidSdkHandler.java :81) 在 com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:73) 在 com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:48) 原因:java。 lang.ClassNotFoundException:在 java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) 在 java.base/jdk.internal.loader.ClassLoaders$AppClassLoader 的 javax.xml.bind.annotation.XmlSchema。

我在这个问题上花了很多时间。

有什么建议么 ?

4

1 回答 1

0

这是原始脚本中需要更改的部分:

由此:

image: openjdk:8-jdk

variables:
  ANDROID_COMPILE_SDK: "28"
  ANDROID_BUILD_TOOLS: "28.0.2"
  ANDROID_SDK_TOOLS:   "4333796"

before_script:
  - apt-get --quiet update --yes
  - apt-get --quiet install --yes wget tar unzip lib32stdc++6 lib32z1
  - wget --quiet --output-document=android-sdk.zip https://dl.google.com/android/repository/sdk-tools-linux-${ANDROID_SDK_TOOLS}.zip
  - unzip -d android-sdk-linux android-sdk.zip
  - echo y | android-sdk-linux/tools/bin/sdkmanager "platforms;android-${ANDROID_COMPILE_SDK}" >/dev/null
  - echo y | android-sdk-linux/tools/bin/sdkmanager "platform-tools" >/dev/null
  - echo y | android-sdk-linux/tools/bin/sdkmanager "build-tools;${ANDROID_BUILD_TOOLS}" >/dev/null
  - export ANDROID_HOME=$PWD/android-sdk-linux
  - export PATH=$PATH:$PWD/android-sdk-linux/platform-tools/
  - chmod +x ./gradlew
  # temporarily disable checking for EPIPE error and use yes to accept all licenses
  - set +o pipefail
  - yes | android-sdk-linux/tools/bin/sdkmanager --licenses
  - set -o pipefail

对此:

image: openjdk:11-jdk

variables:
  ANDROID_COMPILE_SDK: "31"
  ANDROID_BUILD_TOOLS: "32.0.0"
  ANDROID_COMMAND_LINE_TOOLS: "7583922"
  GRADLE_OPTS: "-Dorg.gradle.daemon=false"


before_script:
  - export GRADLE_USER_HOME=$(pwd)/.gradle
  - chmod +x ./gradlew
  - apt-get --quiet update --yes
  - apt-get --quiet install --yes wget tar unzip lib32stdc++6 lib32z1
  - mkdir -p android-sdk-linux/cmdline-tools
  - export ANDROID_SDK_ROOT=$PWD/android-sdk-linux
  - cd android-sdk-linux/cmdline-tools
  - wget --quiet --output-document=android-sdk.zip https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_COMMAND_LINE_TOOLS}_latest.zip
  - unzip android-sdk.zip
  - rm android-sdk.zip
  - mv cmdline-tools version
  - echo y | version/bin/sdkmanager "platforms;android-${ANDROID_COMPILE_SDK}" >/dev/null
  - echo y | version/bin/sdkmanager "platform-tools" >/dev/null
  - echo y | version/bin/sdkmanager "build-tools;${ANDROID_BUILD_TOOLS}" >/dev/null
  - export PATH=$PATH:$ANDROID_SDK_ROOT/platform-tools/
  # temporarily disable checking for EPIPE error and use yes to accept all licenses
  - set +o pipefail
  - yes | version/bin/sdkmanager --licenses
  - set -o pipefail
  - cd ../../
  - chmod +x ./gradlew

**请注意,变量也在 .gitlab-ci-yml 中进行了升级。它们也位于本地 build.gradle 中:在此处输入图像描述

在此处输入图像描述

于 2022-01-08T11:43:38.313 回答