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

Docker容器内安装cmdline-tools遇KeyError错误求助

解决Docker容器中安装cmdline-tools的KeyError问题

问题重现

执行RUN sdkmanager --install "cmdline-tools;latest"时触发以下错误:

=> ERROR [dev_container_auto_added_stage_label 12/16] RUN sdkmanager --i  3.7s
------
 > [dev_container_auto_added_stage_label 12/16] RUN sdkmanager --install "cmdline-tools;latest":
#0 3.680 Traceback (most recent call last):
#0 3.680   File "/usr/bin/sdkmanager", line 33, in <module>
#0 3.680 Downloading https://fdroid.gitlab.io/android-sdk-transparency-log/checksums.json.asc into /root/.cache/sdkmanager/checksums.json.asc
#0 3.680     sys.exit(load_entry_point('sdkmanager==0.5.1', 'console_scripts', 'sdkmanager')())
#0 3.680   File "/usr/lib/python3/dist-packages/sdkmanager.py", line 1077, in main
#0 3.680     method(args.packages)
#0 3.680   File "/usr/lib/python3/dist-packages/sdkmanager.py", line 891, in install
#0 3.681     url = packages[key]
#0 3.681 KeyError: ('cmdline-tools','latest')
------

问题原因

你通过apt install sdkmanager -y安装的是第三方工具(来自fdroid),它和Google官方Android SDK自带的sdkmanager不是同一工具,不支持cmdline-tools;latest这种官方包名格式,因此抛出KeyError。

解决方案

1. 移除第三方sdkmanager

删除Dockerfile中的RUN apt install sdkmanager -y行,避免和官方工具冲突。

2. 使用官方SDK的sdkmanager安装组件

在已下载的官方Android SDK工具目录下,调用自带的sdkmanager安装cmdline-tools;latest。

3. 统一环境变量路径

修正ANDROID_HOME路径大小写不一致的问题(原Dockerfile中同时出现/Android/sdk和/Android/Sdk),确保路径统一。

修改后的完整Dockerfile

FROM ubuntu:22.04

# Clear the cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

# Prerequisites
RUN apt update && apt install -y curl git unzip xz-utils zip libglu1-mesa openjdk-8-jdk wget

# Prepare Android directories and system variables
RUN mkdir -p /Android/sdk
ENV ANDROID_SDK_ROOT /Android/sdk
ENV ANDROID_HOME /Android/sdk
RUN mkdir -p ~/.android && touch ~/.android/repositories.cfg

# Set up Android SDK
RUN wget -O sdk-tools.zip https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip
RUN unzip sdk-tools.zip && rm sdk-tools.zip
RUN mv tools /Android/sdk/tools

# Accept all licenses
RUN cd /Android/sdk/tools/bin && yes | ./sdkmanager --licenses

# Install SDK components including cmdline-tools
RUN cd /Android/sdk/tools/bin && ./sdkmanager \
    "build-tools;29.0.2" \
    "patcher;v4" \
    "platform-tools" \
    "platforms;android-29" \
    "sources;android-29" \
    "cmdline-tools;latest"

# Add SDK tools to PATH
ENV PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools

# Set up new user
RUN useradd -ms /bin/bash developer
USER developer

# Download Flutter SDK
RUN git clone https://github.com/flutter/flutter.git /home/developer/flutter

# Set Flutter environment path
ENV PATH="/home/developer/flutter/bin:/home/developer/flutter/bin/cache/dart-sdk/bin:${PATH}"

# Verify setup with Flutter doctor
RUN flutter doctor

WORKDIR /home/developer

关键调整说明

  • 统一ANDROID_HOME与ANDROID_SDK_ROOT路径,避免大小写导致的路径错误
  • 直接调用官方SDK自带的sdkmanager安装cmdline-tools;latest
  • 提前将platform-tools加入PATH,确保切换用户后可正常使用adb等工具
  • 移除第三方sdkmanager安装命令,彻底消除工具冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 06:47:47