【问题标题】:How to cache Android NDK in Azure devops pipeline?如何在 Azure devops 管道中缓存 Android NDK?
【发布时间】:2021-01-21 01:57:28
【问题描述】:

在 Azure devops 管道中创建任务时,我需要缓存 NDK 以减少构建时间。因此,我正在尝试为此编写一个任务。

例如,这是我用于缓存 gradle 和 konan 存储库的内容

variables:
  GRADLE_USER_HOME: $(Pipeline.Workspace)/.gradle
  KONAN_USER_HOME: /Users/runner/.konan

steps:
  - bash: env
    displayName: env vars

  - task: Cache@2
    inputs:
      key: 'gradle | "$(Agent.OS)"'
      restoreKeys: gradle
      path: $(GRADLE_USER_HOME)
    displayName: Gradle build cache

  - task: Cache@2
    inputs:
      key: 'konan | "$(Agent.OS)" | cache'
      restoreKeys: konan
      path: $(KONAN_USER_HOME)
    displayName: Konan build cache

它们工作得很好!

但是对于 NDK,我如何知道我的 NDK 的相对存储库路径并缓存它,假设任务是这样的

  - task: Cache@2
    inputs:
      key: 'ndk | "$(Agent.OS)"'
      restoreKeys: ndk
      path: $(NDK_PATH)
    displayName: NDK build cache

这方面的任何帮助都非常有帮助。

【问题讨论】:

  • 很好,看来 ndk 已经是 env 的一部分了。变量
  • 感谢@sallah,让我们从 devops 设置中查找环境变量。

标签: android azure-devops android-ndk azure-pipelines


【解决方案1】:

我如何知道我的 NDK 的相对存储库路径?

您可以使用环境变量ANDROID_NDK_PATH 来获取NDK 的路径。

如果您使用的是预装在微软托管代理windows-latest中的ndk,则ANDROID_NDK_PATH的值为C:\Program Files (x86)\Android\android-sdk\ndk-bundle

【讨论】:

  • 是的,但这无法回答完整的解决方案。谢谢我想通了。在不知道系统配置本身的情况下获取环境变量路径并不容易。而且我无权访问该机器设置。
【解决方案2】:

所以,我想通了,忘了在这里发帖,这就是我发现的。 1 - 从 devops 设置中获取 android-ndk 的相对路径(我没有这些权限)。 2 - 然后运行缓存任务以缓存到该路径中

1 - 使用此 bash 输出获取相关环境变量。 CREDITS所以我在步骤中写:

steps:
  - bash: env
    displayName: env vars

打印所有可用的环境变量example gist with some vars intentionally removed 从中我选择了与我的使用相关的路径

2021-01-19T16:17:44.4273060Z ANDROID_HOME=/Users/runner/Library/Android/sdk

2021-01-19T16:17:44.4276800Z ANDROID_SDK_ROOT=/Users/runner/Library/Android/sdk

2021-01-19T16:17:44.4320010Z ANDROID_NDK_18R_PATH=/Users/runner/Library/Android/sdk/ndk/18.1.5063045

2021-01-19T16:17:44.4328690Z ANDROID_NDK_HOME=/Users/runner/Library/Android/sdk/ndk-bundle

现在最相关的路径是到ANDROID_SDK_ROOT,因为这是有意义的,然后将/ndk 附加到它。

接下来就是我的任务了

2 缓存任务:

  • 为路径NDK_HOME: /Users/runner/Library/Android/sdk/ndk创建变量

并将其添加到缓存任务中,完全如下所示

variables:
  GRADLE_USER_HOME: $(Pipeline.Workspace)/.gradle
  KONAN_USER_HOME: /Users/runner/.konan
  NDK_HOME: /Users/runner/Library/Android/sdk/ndk

pool:
  vmImage: 'macos-latest'

name: $(date:yyyy).$(Month)$(rev:.r)

steps:
  - bash: env
    displayName: env vars

  - task: Cache@2
    inputs:
      key: 'gradle | "$(Agent.OS)"'
      restoreKeys: gradle
      path: $(GRADLE_USER_HOME)
    displayName: Gradle build cache

  - task: Cache@2
    inputs:
      key: 'konan | "$(Agent.OS)" | cache'
      restoreKeys: konan
      path: $(KONAN_USER_HOME)
    displayName: Konan build cache

  - task: Cache@2
    inputs:
      key: 'ndk | "$(Agent.OS)"'
      restoreKeys: ndk
      path: $(NDK_HOME)/ndk
    displayName: NDK build cache

像魅力一样工作?

另一种方式动态创建变量from this answer。谢谢 那么我的任务看起来像

steps:
  - bash: env
    displayName: env vars

  - bash: echo "##vso[task.setvariable variable=ANDROID_SDK_ROOT;]$ANDROID_SDK_ROOT"

  - task: Cache@2
    inputs:
      key: 'ndk | "$(Agent.OS)"'
      restoreKeys: ndk
      path: $(ANDROID_SDK_ROOT)/ndk
    displayName: NDK build cache

以同样的方式工作

【讨论】:

  • 如何告诉我的管道使用特定版本?如何安装?
猜你喜欢
  • 2021-02-26
  • 2021-02-16
  • 1970-01-01
  • 2021-02-14
  • 2022-10-14
  • 2022-08-17
  • 2020-10-15
  • 2021-11-25
  • 1970-01-01
相关资源
最近更新 更多