Gitlab CI/CD流水线失败:无法下载源列表以构建APK
GitLab CI/CD中sdkmanager提示“Failed to download any source lists”的解决方法
常见原因
- GitLab Runner环境无法访问Google官方SDK源
- 环境变量
ANDROID_HOME设置时机滞后,导致sdkmanager无法识别SDK根目录 - 命令行工具目录结构配置错误
- 缺少HTTPS证书验证所需依赖,导致无法建立安全连接
修复方案
方案1:使用预配置Android SDK的Docker镜像(推荐)
直接使用已包含Android SDK的镜像,省去手动安装步骤,避免环境配置错误:
image: bitnami/android-sdk:28 variables: ANDROID_COMPILE_SDK: "28" ANDROID_BUILD_TOOLS: "28.0.2" release: "android" release_notes: "orange-apk-release" notify: false before_script: - chmod +x ./gradlew # 处理许可证验证 - set +o pipefail - yes | sdkmanager --licenses - set -o pipefail stages: - build - upload assembleDebug: stage: build script: - ./gradlew assembleDebug artifacts: paths: - app/build/outputs/ upload-job: stage: upload before_script: - export INSTALL_DIR=$CI_PROJECT_DIR - curl -Ls https://github.com/testappio/cli/releases/latest/download/install | bash script: - $CI_PROJECT_DIR/ta-cli publish --api_token=$TESTAPPIO_API_TOKEN --app_id=$TESTAPPIO_APP_ID --release=$release --apk=$CI_PROJECT_DIR/app/build/outputs/apk/debug/app-debug.apk --release_notes=$release_notes --notify=$notify --source="Gitlab"
方案2:手动修复SDK安装流程
如果必须手动安装SDK,调整before_script的执行顺序并添加必要配置:
image: openjdk:8-jdk variables: ANDROID_COMPILE_SDK: "28" ANDROID_BUILD_TOOLS: "28.0.2" release: "android" release_notes: "orange-apk-release" notify: false before_script: # 安装依赖,包括证书验证工具 - apt-get --quiet update --yes - apt-get --quiet install --yes wget tar unzip lib32stdc++6 lib32z1 ca-certificates # 提前设置环境变量,确保sdkmanager能识别SDK路径 - export ANDROID_HOME=$PWD/android-sdk-linux - export PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools/ # 下载并解压命令行工具 - wget --quiet --output-document=android-sdk.zip https://dl.google.com/android/repository/commandlinetools-linux-8092744_latest.zip - unzip -d $ANDROID_HOME android-sdk.zip # 修复目录结构,适配sdkmanager要求 - mkdir -p $ANDROID_HOME/cmdline-tools - mv $ANDROID_HOME/cmdline-tools $ANDROID_HOME/cmdline-tools/latest || true # 配置国内镜像(解决网络访问问题) - mkdir -p $ANDROID_HOME/.android - echo '### User Sources for Android SDK Manager' > $ANDROID_HOME/.android/repositories.cfg - echo 'https://mirrors.aliyun.com/android/repository/' >> $ANDROID_HOME/.android/repositories.cfg # 先更新sdkmanager本身 - echo y | sdkmanager --update # 安装所需SDK组件 - echo y | sdkmanager "platforms;android-${ANDROID_COMPILE_SDK}" - echo y | sdkmanager "platform-tools" - echo y | sdkmanager "build-tools;${ANDROID_BUILD_TOOLS}" # 处理Gradle脚本权限和许可证 - chmod +x ./gradlew - set +o pipefail - yes | sdkmanager --licenses - set -o pipefail stages: - build - upload assembleDebug: stage: build script: - ./gradlew assembleDebug artifacts: paths: - app/build/outputs/ upload-job: stage: upload before_script: - export INSTALL_DIR=$CI_PROJECT_DIR - curl -Ls https://github.com/testappio/cli/releases/latest/download/install | bash script: - $CI_PROJECT_DIR/ta-cli publish --api_token=$TESTAPPIO_API_TOKEN --app_id=$TESTAPPIO_APP_ID --release=$release --apk=$CI_PROJECT_DIR/app/build/outputs/apk/debug/app-debug.apk --release_notes=$release_notes --notify=$notify --source="Gitlab"
关键修改说明
- 提前设置
ANDROID_HOME和PATH,确保sdkmanager能正确识别SDK根目录 - 添加
ca-certificates依赖,解决HTTPS证书验证失败问题 - 配置国内镜像源,绕过Google源的网络访问限制
- 先执行
sdkmanager --update,确保工具本身版本兼容
内容的提问来源于stack exchange,提问作者RedThor
相关产品推荐
相关产品推荐

