如何在Github Actions工作流中缓存Android NDK



我想在Github Actions工作流中缓存Android NDK。原因是我需要一个特定版本的NDK和CMake,它们没有预装在MacOS运行程序上。

我尝试使用以下工作流作业来实现这一点:

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中使用。

- 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"

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

注意事项:

  • 您需要创建ndk目录并更改权限以解决问题https://github.com/actions/virtual-environments/issues/1337
  • 确保在if语句so中使用了正确的id(上例中的ndk缓存(您实际上可以使用缓存

您可以轻松地指定要缓存的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'

只要你使用的NDK版本预装了Github Actions运行程序,那么你就不再需要担心缓存你的NDK:(

在此处查找跑步者列表:https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners#supported-软件

跑步者列表示例:https://github.com/actions/runner-images/blob/main/images/linux/Ubuntu2204-Readme.md对于Ubuntu 22.04 runner,它预装了三个NDK

  • 23.2.8568313
  • 24.0.8215888
  • 25.2.9519653(默认(

最新更新