Gradle执行assembleRelease时重复下载已有Android SDK资源
问题根因
重复下载的核心原因是AGP(Android Gradle插件)识别到的SDK路径与本地实际SDK存放路径不一致,加上原有SDK目录结构、权限不符合AGP校验规则,导致每次构建都判定组件缺失触发自动下载;又因为原路径被无效旧文件占用,新下载的组件只能放到带数字后缀的新目录,下次构建依旧识别不到,陷入无限重复下载的循环。
解决步骤
1. 清理无效重复目录
先删除之前自动生成的带数字后缀的无效组件目录,消除路径冲突:
# 从日志看你之前的SDK临时目录在/home/phoxett/cmdline-tools,先进入该目录 cd /home/phoxett/cmdline-tools # 删除所有带-数字后缀的重复组件目录 rm -rf patcher/v4-* rm -rf tools-* rm -rf build-tools/*-* rm -rf platforms/android-*-*
2. 配置全局SDK环境变量
AGP默认优先读取系统ANDROID_SDK_ROOT环境变量定位SDK,未配置时会自动在当前用户目录下创建临时SDK目录,和手动安装的SDK路径冲突。
- 先规划独立的SDK根目录,不要把SDK根目录设在cmdline-tools子目录下,标准SDK根目录下应直接包含
build-tools、platforms、platform-tools、emulator、licenses、cmdline-tools等子文件夹,比如统一设为/home/phoxett/Android/Sdk - 把之前散落在cmdline-tools目录下的所有SDK组件,全部移动到你规划好的SDK根目录对应位置,其中cmdline-tools统一放到
$ANDROID_SDK_ROOT/cmdline-tools/latest/路径下 - 编辑当前用户的环境变量配置文件:
nano ~/.bashrc
在文件末尾追加以下配置(路径替换为你实际的SDK根目录):
export ANDROID_SDK_ROOT=/home/phoxett/Android/Sdk export PATH=$PATH:$ANDROID_SDK_ROOT/cmdline-tools/latest/bin:$ANDROID_SDK_ROOT/platform-tools
- 保存退出后执行命令让配置立即生效:
source ~/.bashrc
3. 固定项目级SDK路径
在项目根目录下找到local.properties文件(不存在则手动新建),写入固定的SDK路径,避免AGP自动查找路径出错:
sdk.dir=/home/phoxett/Android/Sdk
4. 对齐版本依赖,提前安装缺失组件
你当前的版本配置存在不匹配问题,也是触发自动下载的常见原因:
- 版本对齐要求:AGP 7.0.2 对应匹配的Gradle版本为7.0.2,JDK版本为11。你本地安装的Gradle 7.4.2和wrapper配置的7.0.2不一致,构建时统一使用
./gradlew调用wrapper指定的版本即可,不要直接调用本地全局安装的gradle命令;构建时确保环境变量指向JDK 11,不要切换到JDK 8。 - 提前安装项目所需SDK组件:你的项目配置
compileSdk 31,对应需要build-tools 31.x、platforms;android-31组件,你本地仅安装了build-tools;29.0.0,缺失的组件会触发AGP自动下载,可提前通过sdkmanager手动安装:
sdkmanager "platforms;android-31" "build-tools;31.0.0" "platform-tools" "emulator" "patcher;v4"
执行命令时提前确认所有SDK license已接受。
5. (可选)关闭AGP自动下载开关
确认所有依赖组件都安装完成后,可以在项目根目录的gradle.properties文件中添加配置,直接禁止构建过程自动下载SDK组件:
android.builder.sdkDownload=false
验证配置
配置完成后先清理构建缓存,再执行打包命令验证:
./gradlew clean ./gradlew assembleRelease
构建日志中不再出现SDK组件下载、安装相关的输出,即代表配置生效。
内容的提问来源于stack exchange,提问作者Phoxett
相关产品推荐
相关产品推荐

