Android SafeArgs 给出 GitHub 操作错误

问题描述 投票:0回答:1

我可以在本地 Android studio 终端中运行 lintDebug 或测试用例,构建成功。我目前正在学习 CI/CD 并尝试在推送代码时运行 Github Actions 来完成这项工作。但是在推送时,CI 在第一个作业上失败,但出现以下异常:

> Could not resolve all files for configuration ':classpath'.
   > Could not resolve androidx.navigation:navigation-safe-args-gradle-plugin:2.7.7.
     Required by:
         project : > androidx.navigation.safeargs:androidx.navigation.safeargs.gradle.plugin:2.7.7
      > No matching variant of androidx.navigation:navigation-safe-args-gradle-plugin:2.7.7 was found. The consumer was configured to find a library for use during runtime, compatible with Java 11, packaged as a jar, and its dependencies declared externally, as well as attribute 'org.gradle.plugin.api-version' with value '8.4' but:
          - Variant 'apiElements' capability androidx.navigation:navigation-safe-args-gradle-plugin:2.7.7 declares a library, packaged as a jar, and its dependencies declared externally:
              - Incompatible because this component declares a component for use during compile-time, compatible with Java 17 and the consumer needed a component for use during runtime, compatible with Java 11
              - Other compatible attribute:
                  - Doesn't say anything about org.gradle.plugin.api-version (required '8.4')
          - Variant 'runtimeElements' capability androidx.navigation:navigation-safe-args-gradle-plugin:2.7.7 declares a library for use during runtime, packaged as a jar, and its dependencies declared externally:
              - Incompatible because this component declares a component, compatible with Java 17 and the consumer needed a component, compatible with Java 11
              - Other compatible attribute:
                  - Doesn't say anything about org.gradle.plugin.api-version (required '8.4')
          - Variant 'sourcesElements' capability androidx.navigation:navigation-safe-args-gradle-plugin:2.7.7 declares a component for use during runtime, and its dependencies declared externally:
              - Incompatible because this component declares documentation and the consumer needed a library
              - Other compatible attributes:
                  - Doesn't say anything about its target Java version (required compatibility with Java 11)
                  - Doesn't say anything about its elements (required them packaged as a jar)
                  - Doesn't say anything about org.gradle.plugin.api-version (required '8.4')

据我从错误中了解到,GitHub 运行程序使用 Java 11,而我的代码使用 Java 17。因此,在我的 CI 中,我在每个 use 关键字下添加了 java-version 和 distribution 来解决该问题。我也尝试过使用自托管运行,也没有成功。这是生成错误的 CI 代码的开始部分:

name: CI

on:
  push:
    branches: [master]

  pull_request:
    branches: [master]

jobs:
  start:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout the code
        uses: actions/checkout@v4
        with:
          distribution: 'temurin'
          java-version: '17'
          overwrite-settings: false
  
      - name: Run sample script
        run: echo Hello, world

  lint:
    name: Perform lint check
    needs: [start]
    runs-on: ubuntu-latest
    steps:
      - name: Checkout the code
        uses: actions/checkout@v4
        with:
          distribution: 'temurin'
          java-version: '17'
          overwrite-settings: false

      - name: Cache Gradle
        uses: actions/cache@v4
        with:
          distribution: 'temurin'
          java-version: '17'
          overwrite-settings: false
          path: ~/.gradle/caches
          key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
          restore-keys: ${{ runner.os }}-gradle-

      - name: Make Gradle executable
        run: chmod +x ./gradlew
  
      - name: Run lint
        run: ./gradlew lintDebug
  
      - name: Upload html test report
        uses: actions/upload-artifact@v4
        with:
          distribution: 'temurin'
          java-version: '17'
          overwrite-settings: false
          name: lint.html
          path: app/build/reports/lint-results-debug.html

  unit-test:
    name: Perform Unit Testing
    needs: [lint]
    runs-on: ubuntu-latest
    steps:
      - name: Checkout the code
        uses: actions/checkout@v4
        with:
          distribution: 'temurin'
          java-version: '17'
          overwrite-settings: false
  
      - name: Run tests
        run: ./gradlew test
  
      - name: Upload test report
        uses: actions/upload-artifact@v4
        with:
          distribution: 'temurin'
          java-version: '17'
          overwrite-settings: false
          name: unit_test_report
          path: app/build/reports/test/testDebugUnitTest/

当我搜索类似问题时,建议将相关插件

id("androidx.navigation.safeargs.kotlin")
放在插件部分的末尾,并在build.gradle中检查compileOptions为
JavaVersion.VERSION_17
。做了这些,但仍然无法解决错误。任何帮助或想法将不胜感激。预先感谢。

android gradle continuous-integration github-actions android-safe-args
1个回答
0
投票

一段时间后,我发现 SafeArgs 并没有出现该错误。因为当我从项目中完全删除 safeargs 并使用 Bundle 时,这次我在 safears 下方的 build.gradle 中声明的下一个插件会抛出相同的错误。

我认为我正在使用 

com.android.application

运行我的 CI,下面的代码显然不会覆盖 github runner 的 java 版本:

JavaVersion.VERSION_17

在文档中,我发现我可以将自己的 java 版本安装到 Github 运行程序,因此在每个作业中我都添加了带有 
with: distribution: 'temurin' java-version: '17'

的行。通过这个,我创建了与我本地 ubuntu 机器相同的环境,然后它在那里也像一个魅力一样工作。下面的代码只是我的 CI 的一部分,但足以让您了解如何更改 Github 的默认运行器机器。希望有帮助。

run

© www.soinside.com 2019 - 2024. All rights reserved.