当前位置: 首页 > 知识库问答 >
问题:

更新Android Gitlab CI/CD管道从Java1.8到Java11?

石喜
2023-03-14

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

Gradle7.0.2需要Java11。

Gitlab管道中的错误消息为

评估项目“:app”时出现问题。未能应用插件的com.Android内部的应用程序'。Android Gradle插件需要Java 11才能运行。您当前正在使用Java1.8。您可以尝试以下一些选项:-更改IDE设置。-更改JAVA_HOME环境变量。-改变org。格拉德尔。JAVA主页位于渐变中。属性

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

 .\gradlew --version

.gitlab-ci.yml:原始完整。gitlab-ci.yml脚本在2018年的这篇文章中描述,它适用于Java1.8(不适用于Java11)和gradle 4(不适用于gradle 7)https://about.gitlab.com/blog/2018/10/24/setting-up-gitlab-ci-for-android-projects/

在Android Studio的本地PC上:从Java1.8升级到11

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

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

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

.gitlab ci。yml:从Java1.8升级到11

原著。gitlab ci。当在新的Gradle 7.0.2版本上构建的代码被推送到gitlab时,yml在Gradle 7.0.2中产生了以下错误:

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

评估项目“:app”时出现问题。未能应用插件的com.Android内部的应用程序'。Android Gradle插件需要Java 11才能运行。您当前正在使用Java1.8。您可以尝试以下一些选项:-更改IDE设置。-更改JAVA_HOME环境变量。-改变org。格拉德尔。JAVA主页位于渐变中。属性

在第1行gitlab-ci.yml改变图像

image: openjdk:8-jdk

image: openjdk:11-jdk

产生了另一个错误:

$echo y | android sdk linux/tools/bin/sdkmanager“平台;android-${android_COMPILE_sdk}”

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

有什么建议吗?


共有1个答案

缪嘉志
2023-03-14

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

从这:

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
 类似资料:
  • 我打算有一个带有Jenkins的光盘管道,它接受我的应用程序,将码头工人映像发布到我的私人码头工人存储库。我想我知道怎么做。 我不确定的是库伯内特斯部分。我想把那个图像部署到我的私人库伯内特斯集群(目前是1个主集群) 问:安装了 kubectl 和 docker 的詹金斯从站是否需要成为 Kubernetes 集群的一部分才能触发部署?如何触发该部署?

  • 问题内容: 对于任何发行版,请使用下面的Git工作流程, 对于连续交付,我的理解是,需要创建两条Jenkins管道,如下所示: 1)构建管道,该管道在每个 功能 分支(绿色)合并到 Develop 分支(紫色)时触发。管道将推送Nexus存储库。此罐子的目的是进行质量检查 2)发布管道在每个新的 Release 分支合并到 Master 分支时触发。管道将推送Nexus存储库。该罐子直接投入生产。

  • 问题内容: 我想更新git clone上的子模块。 有没有办法用詹金斯管道Git命令来做到这一点? 目前我正在这样做… 但是,一旦克隆,它就不会更新子模块 问题答案: 使用当前的Git插件,您甚至不需要它。 GIT插件支持带有子模块的存储库,而子模块本身又具有子模块。 但是,必须将其打开: 在“作业配置”->“源代码管理”,“ Git”->“高级按钮”(在要构建的分支下)->“递归更新”子模块中

  • 我们为我的后端启用了AWS Amplify项目,并启用了CI/CD和AppSync作为API。CI/CD一直工作正常,直到AppSync应用程序的API_密钥未过期,现在它已过期,管道正在失败。我已尝试手动更新API_密钥过期,但管道仍然失败。有一些解决方案描述为手动排序或升级Amplify CLI版本,但在我的案例中,似乎我没有这两个选项。 我们还有第三种选择吗? 下面是构建管道中的日志。

  • 我有一个Jenkins项目,在SCM中存储的JenkinsFile中定义了一个声明性管道。我使用“来自SCM的管道脚本”选项。 有时,如果出现故障,我会在jenkins工作区快速修复,并从特定阶段开始重新运行管道。这是很好的工作。 有些情况下,我需要更新JenkinsFile,然后用更新后的Jenkins文件进行“阶段重启”。然而,我在workspace文件夹中的任何地方都找不到JenkinsFi

  • 我正在尝试从管道中自动创建Jenkins管道构建。 我有一个管道,它创建一个比特桶存储库并向其提交一些代码,包括一个Jenkinsfile。 我需要向此管道添加另一个步骤,然后为其创建管道生成,这将运行 Jenkinsfile 中的步骤。 我认为Jobs DSL应该能够处理这一点,但我找到的文档非常稀少,我仍然不完全确定是否有可能或如何做到这一点。 任何帮助都将不胜感激。我想生成的Pipeline