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
相关产品推荐
相关产品推荐

