我该如何在Github Actions工作流程中缓存Android NDK?

11

我希望在Github Actions工作流中缓存Android NDK。原因是我需要特定版本的NDK和CMake,而这些在MacOS runners上没有预安装。

我尝试使用以下工作流程作业来实现:

jobs:
  build:
    runs-on: macos-latest
    steps:

    - name: Cache NDK
      id: cache-primes
      uses: actions/cache@v1
      with:
        path: ${{ env.ANDROID_NDK_HOME }}
        key: ${{ runner.os }}-ndk-${{ hashFiles(env.ANDROID_NDK_HOME) }}

    - name: Install NDK
      run: echo "y" | $ANDROID_HOME/tools/bin/sdkmanager "ndk;21.0.6113669" "cmake;3.10.2.4988404"
这个问题的关键在于env上下文中不包含ANDROID_NDK_HOME变量。这意味着build.steps.with.path会被计算为空。
如果我使用以下步骤进行调试,则存在常规环境变量并打印出正确的路径:
jobs:
  build:
    steps:
    - name: Debug print ANDROID_NDK_HOME
      run: echo $ANDROID_NDK_HOME

但是根据我的理解,普通环境变量只能在shell脚本中使用,不能在build.steps.with中使用。

3个回答

6
  - name: Prepare NDK dir for caching ( workaround for https://github.com/actions/virtual-environments/issues/1337 )
    run: |
      sudo mkdir -p /usr/local/lib/android/sdk/ndk
      sudo chmod -R 777 /usr/local/lib/android/sdk/ndk
      sudo chown -R $USER:$USER /usr/local/lib/android/sdk/ndk
  - name: NDK Cache
    id: ndk-cache
    uses: actions/cache@v2
    with:
      path: /usr/local/lib/android/sdk/ndk
      key: ndk-cache-21.0.6113669-v2
  - name: Install NDK
    if: steps.ndk-cache.outputs.cache-hit != 'true'
    run: echo "y" | sudo /usr/local/lib/android/sdk/tools/bin/sdkmanager --install "ndk;21.0.6113669"

这是我在项目中使用的配置。

需要注意以下几点:


2

1
你可以轻松地指定要缓存的NDK安装目录。
- name: Cache (NDK)
  uses: actions/cache@v2
  with:
    path: ${ANDROID_HOME}/ndk/21.0.6113669
    key: ndk-cache


- name: Install NDK
  run: echo "y" | sudo ${ANDROID_HOME}/tools/bin/sdkmanager --install 'ndk;21.0.6113669'

2
将其复制到我的工作流中并不能立即使用。NDK已重新安装。 - Lukas1
@Lukas1 你想在哪里分享你的配置文件呢?昨天我为我的Github操作添加了缓存,结果缓存真的起作用了。 - Kazuki
1
@Kazuki 是的,它有效。我认为你可以把它作为答案发表,并希望它会被采纳。因为这绝对是正确的答案。 - Lukas1
@Lukas1,实际上我的先前评论不起作用(它无法缓存正确的文件夹,因为您不能将环境变量用作缓存操作的路径)。我已经更新了我的解决方案,链接在此https://dev59.com/ClIH5IYBdhLWcg3wKqTW#63163680,仅供参考。另外,如果您可以给我的答案点个赞,那就太好了。 - Kazuki
在我的工作流程中,我使用 echo "y" | sudo ${ANDROID_HOME}/tools/bin/sdkmanager --install 'ndk;21.0.6113669' 进行安装,这对我很有效,我不需要创建其他文件夹。 - Lukas1
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接