You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bitbucket Pipeline构建Android项目时提示找不到Ninja的求助

问题描述

执行Bitbucket Pipeline构建包含C++代码的Android项目时出现以下错误:

Execution failed for task ':core_data:configureCMakeRelWithDebInfo[arm64-v8a]'
> [CXX1416] Could not find Ninja on PATH or in SDK CMake bin folders

项目在本地Android Studio中可正常构建,但不清楚如何在Bitbucket Pipeline环境中正确安装Ninja与CMake并配置PATH变量。已尝试执行sudo apt-get update && sudo apt-get install -y ninja-build,但问题仍未解决。当前使用的bitbucket-pipeline.yml配置如下:

image: mingc/android-build-box:latest

pipelines:
  default:
    - parallel:
        - step:
            size: 2x
            name: KtLint
            caches:
              - gradle
              - gradle-wrapper
            script:
              - chmod +x gradlew
              - ./gradlew ktlintCheck
            artifacts:
              - app/build/reports/**
        - step:
            size: 2x
            name: Unit-Test
            caches:
              - gradle
              - gradle-wrapper
            script:
              - chmod +x gradlew
              - bash ./gradlew testProductionDebugUnitTest
  custom:
    deployment-production-release-apk:
      - variables:
          - name: VERSION_CODE
          - name: VERSION_GROUPS
            default: "Mobile-QA,Mobile-DEV,Mobile-DESG,Mobile-BIZ,External"
          - name: ADDITIONAL_NOTE
      - step:
          size: 2x
          name: Production Release APK
          clone:
            depth: full
          deployment: production
          caches:
            - gradle
          script:
            - if [ -z "$VERSION_CODE" ]; then export VERSION_CODE=$BITBUCKET_BUILD_NUMBER; fi
            - COMMIT_MESSAGES=`git log origin/development.. --oneline --pretty=format:" • [%h] %s ~%cn"`
            - COMMIT_HASH=`git rev-parse --short $BITBUCKET_COMMIT`
            - DATETIME=$(date '+%D %H:%M %Z');
            - export VERSION_NOTE="Branch=$BITBUCKET_BRANCH"$'\n'"Commit=$COMMIT_HASH"$'\n'"Datetime=$DATETIME"
            - if [ -n "$ADDITIONAL_NOTE" ]; then export VERSION_NOTE="$VERSION_NOTE"$'\n'"Note=$ADDITIONAL_NOTE"; fi
            - if [ -n "$COMMIT_MESSAGES" ]; then export VERSION_NOTE="$VERSION_NOTE"$'\n\n'"Commit History"$'\n'"${COMMIT_MESSAGES::15500}"; fi
            - echo $VERSION_NOTE
            # Setup licenses
            - mkdir "${ANDROID_HOME}/licenses" || true
            # Give execution access to gradle
            - chmod +x gradlew
            ##########  ASSEMBLE AND UPLOAD TO FIREBASE ##########
            # Firebase App Distribution requires FIREBASE_TOKEN environment variable
            - bash ./gradlew assembleProductionRelease appDistributionUploadProductionRelease

definitions:
  caches:
    gradle-wrapper: ~/.gradle/wrapper
解决方案

1. 使用Android SDK自带的CMake和Ninja

Android SDK提供了与Gradle插件适配的CMake和Ninja版本,无需通过apt安装第三方版本,步骤如下:

  • 在Pipeline步骤中用sdkmanager安装指定版本的CMake和Ninja(版本可根据项目需求调整,3.22.1为常用稳定版):
    yes | sdkmanager "cmake;3.22.1" "ninja;1.10.2"
    
  • 将SDK中的工具路径添加到系统PATH:
    export PATH=$ANDROID_HOME/cmake/3.22.1/bin:$ANDROID_HOME/ninja/1.10.2/bin:$PATH
    

2. 修改Bitbucket Pipeline配置

将上述命令添加到执行构建的步骤(例如Production Release APK)的script块中,确保在执行gradlew前完成配置。修改后的脚本示例:

script:
  - if [ -z "$VERSION_CODE" ]; then export VERSION_CODE=$BITBUCKET_BUILD_NUMBER; fi
  - COMMIT_MESSAGES=`git log origin/development.. --oneline --pretty=format:" • [%h] %s ~%cn"`
  - COMMIT_HASH=`git rev-parse --short $BITBUCKET_COMMIT`
  - DATETIME=$(date '+%D %H:%M %Z');
  - export VERSION_NOTE="Branch=$BITBUCKET_BRANCH"$'\n'"Commit=$COMMIT_HASH"$'\n'"Datetime=$DATETIME"
  - if [ -n "$ADDITIONAL_NOTE" ]; then export VERSION_NOTE="$VERSION_NOTE"$'\n'"Note=$ADDITIONAL_NOTE"; fi
  - if [ -n "$COMMIT_MESSAGES" ]; then export VERSION_NOTE="$VERSION_NOTE"$'\n\n'"Commit History"$'\n'"${COMMIT_MESSAGES::15500}"; fi
  - echo $VERSION_NOTE
  # Setup licenses
  - mkdir "${ANDROID_HOME}/licenses" || true
  # 安装并配置CMake和Ninja
  - yes | sdkmanager "cmake;3.22.1" "ninja;1.10.2"
  - export PATH=$ANDROID_HOME/cmake/3.22.1/bin:$ANDROID_HOME/ninja/1.10.2/bin:$PATH
  # Give execution access to gradle
  - chmod +x gradlew
  ##########  ASSEMBLE AND UPLOAD TO FIREBASE ##########
  # Firebase App Distribution requires FIREBASE_TOKEN environment variable
  - bash ./gradlew assembleProductionRelease appDistributionUploadProductionRelease

3. 验证配置有效性

可在脚本中加入以下命令,确认工具已加入PATH:

- echo $PATH
- which ninja
- which cmake

为什么apt安装的Ninja不生效?

Android Gradle插件默认优先查找Android SDK自带的CMake和Ninja,apt安装的版本不在SDK的bin目录下,插件无法识别。使用SDK自带版本能保证与本地Android Studio使用的版本一致,避免版本兼容性问题。

内容的提问来源于stack exchange,提问作者ethan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 04:52:43