React Native项目Bitbucket Pipeline生成APK失败问题排查
问题排查与修复
问题根源
你脚本里的sdkmanager路径写错了。下载的Android Command Line Tools(版本7302050)解压后,目录结构是:
android-sdk/ └── cmdline-tools/ ├── bin/ │ └── sdkmanager ├── lib/ └── ...
但你的脚本里调用的是$ANDROID_HOME/cmdline-tools/tools/bin/sdkmanager,多了一层不存在的tools目录,导致系统找不到该文件。
修复步骤
修改Pipeline脚本中涉及sdkmanager的路径和PATH配置:
- 修正PATH环境变量
把原来的:
export PATH=$PATH:$ANDROID_HOME/cmdline-tools/tools/bin:$ANDROID_HOME/platform-tools
改为:
export PATH=$PATH:$ANDROID_HOME/cmdline-tools/bin:$ANDROID_HOME/platform-tools
- 修正sdkmanager调用路径
把下面两行:
- yes | $ANDROID_HOME/cmdline-tools/tools/bin/sdkmanager --licenses # Accept Android SDK licenses - $ANDROID_HOME/cmdline-tools/tools/bin/sdkmanager "build-tools;30.0.3" "platforms;android-30" # Install required Android packages
改为:
- yes | $ANDROID_HOME/cmdline-tools/bin/sdkmanager --licenses # Accept Android SDK licenses - $ANDROID_HOME/cmdline-tools/bin/sdkmanager "build-tools;30.0.3" "platforms;android-30" # Install required Android packages
完整修复后的脚本
pipelines: branches: development: # Replace with the name of your specific branch - step: name: Build and package APK image: node:16.0.0 caches: - node script: - apt-get update && apt-get install -y openjdk-11-jdk # Install OpenJDK 11 - wget https://dl.google.com/android/repository/commandlinetools-linux-7302050_latest.zip -O android-sdk-tools.zip # Download Android SDK tools - mkdir -p android-sdk/cmdline-tools - unzip -q android-sdk-tools.zip -d android-sdk/cmdline-tools # Unzip Android SDK tools - export ANDROID_HOME=$PWD/android-sdk - export PATH=$PATH:$ANDROID_HOME/cmdline-tools/bin:$ANDROID_HOME/platform-tools - yes | $ANDROID_HOME/cmdline-tools/bin/sdkmanager --licenses # Accept Android SDK licenses - $ANDROID_HOME/cmdline-tools/bin/sdkmanager "build-tools;30.0.3" "platforms;android-30" # Install required Android packages - npm install # Install project dependencies - npx react-native run-android --variant=release # Build and package the APK - cp android/app/build/outputs/apk/release/app-release.apk $BITBUCKET_PIPELINES_ARTIFACTS/apk # Copy the APK to artifacts
额外优化建议
- 可以把Android SDK相关的依赖缓存起来,避免每次Pipeline都重新下载,加快构建速度。在
caches里添加自定义缓存:caches: - node - android-sdk: $ANDROID_HOME - 确认
$BITBUCKET_PIPELINES_ARTIFACTS目录存在,如果不存在需要先创建:- mkdir -p $BITBUCKET_PIPELINES_ARTIFACTS/apk
内容的提问来源于stack exchange,提问作者Ayodele Kayode
相关产品推荐
相关产品推荐

