Files
Obsidian/工具相关/Android Studio C盘空间清理.md
2026-11-05 14:35:04 +08:00

506 lines
15 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Android Studio C 盘空间清理
> 适用系统:Windows 10/11,PowerShell。
> 本文结合 2026-06-30 本机实测结果整理,重点服务 Android Studio、Gradle、Android SDK 占用排查和安全清理。
---
## 一、问题背景
Android Studio 开发环境会在 C 盘积累大量文件,常见来源包括:
| 现象 | 常见原因 | 影响 |
|---|---|---|
| C 盘空间不足 | Android SDK、Gradle 缓存、Android Studio 缓存持续增长 | 无法安装新软件或更新系统 |
| 构建速度变慢 | 缓存损坏、旧版本依赖堆积 | 编译失败或反复下载依赖 |
| IDE 启动变慢 | 索引、插件、日志、缓存过多 | Android Studio / VS Code 响应变慢 |
| 模拟器占用大 | system-images、AVD 镜像、快照文件堆积 | C 盘快速膨胀 |
本机实测:
| 时间 | C 盘剩余空间 | 说明 |
|---|---:|---|
| 清理前 | `10.63 GB` | C 盘接近紧张 |
| 第一批安全缓存清理后 | `15.40 GB` | 释放 `4.77 GB` |
| 第二批 Gradle 缓存清理后 | `22.05 GB` | 追加释放 `6.65 GB` |
---
## 二、清理原则
### 2.1 先扫描,后清理
清理前必须先确认:
1. 当前 C 盘剩余空间。
2. 哪些目录占用最高。
3. 目标目录是否是缓存、临时文件或可重新下载的数据。
4. 是否需要备份。
5. 是否会影响当前 Android / Gradle 项目构建。
### 2.2 删除前确认备份
本地删除操作执行前必须明确询问:
```text
是否先备份?
```
如果用户明确回复“不备份”,再执行清理。
如果目录可能包含账号数据、聊天记录、工程源码、SDK 必需组件,不应直接删除。
### 2.3 清理风险分级
| 等级 | 类型 | 示例 | 建议 |
|---|---|---|---|
| 低风险 | 临时文件、下载缓存、可再生安装包缓存 | `Temp`、`npm-cache`、VS Code 扩展安装包缓存 | 可直接清理 |
| 中低风险 | 构建缓存 | `.gradle\caches`、`.gradle\daemon`、`.gradle\wrapper` | 可清理,但下次构建会重新下载 |
| 中风险 | SDK 可选组件 | NDK、system-images、旧版 build-tools | 需要确认开发需求 |
| 高风险 | 配置、账号、聊天、项目数据 | Tencent、kingsoft、Android Studio 配置、工程目录 | 不建议手动删除 |
---
## 三、常见占用目录
### 3.1 Android 开发相关目录
| 目录 | 变量表示 | 说明 | 本机实测 |
|---|---|---|---:|
| Android SDK | `%LOCALAPPDATA%\Android\Sdk` | SDK、平台、构建工具、模拟器镜像 | `7.72 GB` |
| Android Studio 缓存 | `%LOCALAPPDATA%\Google\AndroidStudio2025.2.2` | IDE 索引、插件、缓存 | `4.92 GB` |
| Gradle 缓存 | `%USERPROFILE%\.gradle` | Gradle 依赖、Wrapper、Daemon | 清理前约 `6.5 GB` |
| Android Studio 程序 | `%ProgramFiles%\Android` | IDE 安装目录 | `3.09 GB` |
| Android 配置 | `%USERPROFILE%\.android` | AVD 配置、adb key 等 | 本机较小 |
### 3.2 本机当前高占用目录
清理两批缓存后,C 盘主要占用如下:
| 路径 | 占用 | 判断 |
|---|---:|---|
| `C:\Users` | `52.19 GB` | 用户数据最大头 |
| `C:\Program Files` | `22.38 GB` | 程序安装目录 |
| `C:\Windows` | `22.06 GB` | 系统目录,不建议手动动 |
| `C:\Program Files (x86)` | `5.22 GB` | 32 位程序 |
| `C:\ProgramData` | `4.28 GB` | 程序公共数据 |
`Administrator\AppData` 仍是重点:
| 路径 | 占用 | 说明 |
| ------------------------------ | --------: | ----------------------- |
| `AppData\Local\Android` | `7.72 GB` | Android SDK |
| `AppData\Local\Google` | `7.43 GB` | Chrome + Android Studio |
| `AppData\Roaming\Tencent` | `3.05 GB` | 微信/企微/腾讯相关数据 |
| `AppData\Local\Packages` | `2.28 GB` | Windows 应用数据 |
| `AppData\Local\Microsoft` | `2.28 GB` | Edge、WinGet、系统应用缓存等 |
| `AppData\Roaming\kingsoft` | `2.06 GB` | WPS 相关数据 |
| `AppData\Roaming\TDAppDesktop` | `1.74 GB` | 腾讯文档 |
---
## 四、PowerShell 扫描命令
### 4.1 查看 C 盘总空间
```powershell
Get-PSDrive -Name C |
Select-Object `
@{Name='UsedGB';Expression={[math]::Round($_.Used/1GB,2)}}, `
@{Name='FreeGB';Expression={[math]::Round($_.Free/1GB,2)}}, `
@{Name='TotalGB';Expression={[math]::Round(($_.Used+$_.Free)/1GB,2)}} |
Format-List
```
### 4.2 扫描 C 盘根目录占用
```powershell
$rows = @()
Get-ChildItem -LiteralPath 'C:\' -Force -ErrorAction SilentlyContinue |
Where-Object { -not ($_.Attributes -band [IO.FileAttributes]::ReparsePoint) } |
ForEach-Object {
$sum = 0
if ($_.PSIsContainer) {
$sum = (Get-ChildItem -LiteralPath $_.FullName -Force -Recurse -File -ErrorAction SilentlyContinue |
Measure-Object -Property Length -Sum).Sum
} else {
$sum = $_.Length
}
if ($null -eq $sum) { $sum = 0 }
$rows += [PSCustomObject]@{
Path = $_.FullName
SizeGB = [math]::Round(($sum / 1GB), 2)
}
}
$rows | Sort-Object SizeGB -Descending | Select-Object -First 25 | Format-Table -AutoSize
```
### 4.3 扫描 Android / Gradle 相关目录
```powershell
$paths = @(
"$env:LOCALAPPDATA\Android\Sdk",
"$env:LOCALAPPDATA\Google\AndroidStudio2025.2.2",
"$env:USERPROFILE\.gradle",
"$env:USERPROFILE\.android",
"$env:ProgramFiles\Android"
)
$rows = @()
foreach ($p in $paths) {
if (Test-Path -LiteralPath $p) {
$sum = (Get-ChildItem -LiteralPath $p -Force -Recurse -File -ErrorAction SilentlyContinue |
Measure-Object -Property Length -Sum).Sum
if ($null -eq $sum) { $sum = 0 }
$rows += [PSCustomObject]@{
Path = $p
SizeGB = [math]::Round(($sum / 1GB), 2)
}
}
}
$rows | Sort-Object SizeGB -Descending | Format-Table -AutoSize
```
### 4.4 扫描 SDK 子目录
```powershell
$sdk = "$env:LOCALAPPDATA\Android\Sdk"
Get-ChildItem -LiteralPath $sdk -Force -ErrorAction SilentlyContinue |
Where-Object { $_.PSIsContainer } |
ForEach-Object {
$sum = (Get-ChildItem -LiteralPath $_.FullName -Force -Recurse -File -ErrorAction SilentlyContinue |
Measure-Object -Property Length -Sum).Sum
if ($null -eq $sum) { $sum = 0 }
[PSCustomObject]@{
Path = $_.FullName
SizeGB = [math]::Round(($sum / 1GB), 2)
}
} |
Sort-Object SizeGB -Descending |
Format-Table -AutoSize
```
### 4.5 扫描 Gradle 子目录
```powershell
$gradle = "$env:USERPROFILE\.gradle"
Get-ChildItem -LiteralPath $gradle -Force -ErrorAction SilentlyContinue |
ForEach-Object {
$sum = 0
if ($_.PSIsContainer) {
$sum = (Get-ChildItem -LiteralPath $_.FullName -Force -Recurse -File -ErrorAction SilentlyContinue |
Measure-Object -Property Length -Sum).Sum
} else {
$sum = $_.Length
}
if ($null -eq $sum) { $sum = 0 }
[PSCustomObject]@{
Path = $_.FullName
SizeGB = [math]::Round(($sum / 1GB), 2)
}
} |
Sort-Object SizeGB -Descending |
Format-Table -AutoSize
```
---
## 五、安全清理清单
### 5.1 第一批:低风险缓存
本机已执行,实际释放 `4.77 GB`。
| 路径 | 清理前 | 清理后 | 风险 |
|---|---:|---:|---|
| `%LOCALAPPDATA%\Temp` | `1.40 GB` | `0.05 GB` | 低 |
| `%APPDATA%\npm-cache` | `1.09 GB` | `0 GB` | 低 |
| `%APPDATA%\Code\CachedExtensionVSIXs` | `1.12 GB` | `0 GB` | 低 |
| `%LOCALAPPDATA%\tdappdesktop-updater` | `0.43 GB` | `0 GB` | 低 |
| `%LOCALAPPDATA%\timetrack-ui-updater` | `0.29 GB` | `0 GB` | 低 |
| `%LOCALAPPDATA%\obsidian-updater` | `0.28 GB` | `0 GB` | 低 |
| `%LOCALAPPDATA%\@getpaseodesktop-updater` | `0.21 GB` | `0 GB` | 低 |
### 5.2 第二批:Gradle 缓存
本机已执行,实际释放 `6.65 GB`。
| 路径 | 清理前 | 清理后 | 风险 |
|---|---:|---:|---|
| `%USERPROFILE%\.gradle\caches` | `4.81 GB` | `0 GB` | 中低 |
| `%USERPROFILE%\.gradle\daemon` | `0.30 GB` | `0 GB` | 低 |
| `%USERPROFILE%\.gradle\wrapper` | `1.39 GB` | `0 GB` | 中低 |
影响:
- 下次 Android / Gradle 项目构建会重新下载 Gradle 发行包和依赖。
- 第一次构建会明显变慢。
- 依赖重新下载完成后恢复正常。
---
## 六、安全清理脚本
### 6.1 第一批低风险缓存
执行前请先确认:已决定不备份,且目标路径与清单一致。
```powershell
$targets = @(
"$env:LOCALAPPDATA\Temp",
"$env:APPDATA\npm-cache",
"$env:APPDATA\Code\CachedExtensionVSIXs",
"$env:LOCALAPPDATA\tdappdesktop-updater",
"$env:LOCALAPPDATA\timetrack-ui-updater",
"$env:LOCALAPPDATA\obsidian-updater",
"$env:LOCALAPPDATA\@getpaseodesktop-updater"
)
foreach ($target in $targets) {
if (-not (Test-Path -LiteralPath $target)) { continue }
$resolved = (Resolve-Path -LiteralPath $target -ErrorAction Stop).ProviderPath.TrimEnd('\')
$expected = $target.TrimEnd('\')
if ($resolved -ne $expected) {
throw "Refusing to clean unexpected path: $resolved"
}
Get-ChildItem -LiteralPath $resolved -Force -ErrorAction SilentlyContinue |
ForEach-Object {
Remove-Item -LiteralPath $_.FullName -Recurse -Force -ErrorAction SilentlyContinue
}
}
```
### 6.2 第二批 Gradle 缓存
```powershell
$targets = @(
"$env:USERPROFILE\.gradle\caches",
"$env:USERPROFILE\.gradle\daemon",
"$env:USERPROFILE\.gradle\wrapper"
)
foreach ($target in $targets) {
if (-not (Test-Path -LiteralPath $target)) { continue }
$resolved = (Resolve-Path -LiteralPath $target -ErrorAction Stop).ProviderPath.TrimEnd('\')
$expected = $target.TrimEnd('\')
if ($resolved -ne $expected) {
throw "Refusing to clean unexpected path: $resolved"
}
Get-ChildItem -LiteralPath $resolved -Force -ErrorAction SilentlyContinue |
ForEach-Object {
Remove-Item -LiteralPath $_.FullName -Recurse -Force -ErrorAction SilentlyContinue
}
}
```
### 6.3 清理后复查
```powershell
Get-PSDrive -Name C |
Select-Object `
@{Name='UsedGB';Expression={[math]::Round($_.Used/1GB,2)}}, `
@{Name='FreeGB';Expression={[math]::Round($_.Free/1GB,2)}}, `
@{Name='TotalGB';Expression={[math]::Round(($_.Used+$_.Free)/1GB,2)}} |
Format-List
```
---
## 七、Android SDK 按需清理
Android SDK 不建议直接整目录删除,应优先通过 Android Studio 的 SDK Manager 管理。
菜单路径:
```text
Tools -> SDK Manager
```
### 7.1 可按需删除的 SDK 组件
| 组件 | 路径 | 是否可删 | 判断标准 |
|---|---|---|---|
| NDK | `%LOCALAPPDATA%\Android\Sdk\ndk` | 按需 | 不做 JNI/C/C++/Rust/Flutter Native 时可删 |
| system-images | `%LOCALAPPDATA%\Android\Sdk\system-images` | 按需 | 只用真机调试时可删 |
| 旧版 platforms | `%LOCALAPPDATA%\Android\Sdk\platforms` | 按需 | 不维护旧 Android 版本时可删 |
| 旧版 build-tools | `%LOCALAPPDATA%\Android\Sdk\build-tools` | 按需 | 项目未指定旧版本时可删 |
| sources | `%LOCALAPPDATA%\Android\Sdk\sources` | 可选 | 不需要查看源码时可删 |
### 7.2 不建议手动删除的 SDK 组件
| 组件 | 原因 |
|---|---|
| `platform-tools` | 包含 `adb`,真机调试必需 |
| 当前项目使用的 `platforms` | 编译目标依赖 |
| 当前项目使用的 `build-tools` | 构建依赖 |
| 当前项目使用的 NDK 版本 | Native 编译依赖 |
### 7.3 SDK Manager 清理步骤
1. 打开 Android Studio。
2. 进入 `Tools -> SDK Manager`。
3. 在 `SDK Platforms` 中取消不需要的旧 Android 版本。
4. 在 `SDK Tools` 中勾选 `Show Package Details`。
5. 取消不需要的旧版 Build Tools、NDK、Command-line Tools。
6. 点击 `Apply`,由 Android Studio 执行卸载。
---
## 八、Android Studio 缓存处理
### 8.1 IDE 缓存目录
本机 Android Studio 缓存目录:
```text
%LOCALAPPDATA%\Google\AndroidStudio2025.2.2
```
实测占用约 `4.92 GB`。
不建议直接删除整个目录,因为它可能包含:
- IDE 索引缓存
- 插件缓存
- 本地历史
- 项目打开记录
- 配置状态
### 8.2 推荐操作
优先使用 Android Studio 内置功能:
```text
File -> Invalidate Caches...
```
适用场景:
- 索引异常。
- IDE 明显卡顿。
- 频繁出现缓存相关构建问题。
影响:
- Android Studio 会重建索引。
- 首次重新打开项目会慢。
- 比手动删除整个目录安全。
---
## 九、不建议直接清理的目录
| 路径 | 原因 |
|---|---|
| `%LOCALAPPDATA%\Android\Sdk` 整目录 | 会破坏 Android 开发环境 |
| `%LOCALAPPDATA%\Google\AndroidStudio*` 整目录 | 可能丢配置和索引状态 |
| `%APPDATA%\Tencent` | 可能包含微信/企微聊天和账号数据 |
| `%APPDATA%\kingsoft` | 可能包含 WPS 文档、账号、模板数据 |
| `%APPDATA%\TDAppDesktop` | 可能包含腾讯文档本地数据 |
| `%ProgramFiles%\WindowsApps` | Windows 应用系统目录 |
| `C:\Windows\WinSxS` | 系统组件存储,本机 DISM 显示不推荐清理 |
| `C:\Program Files\Android` | Android Studio 程序目录,清理应通过卸载器 |
---
## 十、清理决策流程
```text
1. 先扫描 C 盘空间
|
v
2. 找到占用最高目录
|
v
3. 判断目录类型
|-- 临时文件 / 缓存 / 安装残留 -> 可列入低风险清理
|-- Gradle 缓存 -> 可清理,但提醒下次构建会变慢
|-- SDK 可选组件 -> 询问是否需要 Native / 模拟器 / 旧版本
|-- 聊天、账号、配置、工程源码 -> 不直接清理
|
v
4. 删除前确认是否备份
|
v
5. 精确校验目标路径后执行清理
|
v
6. 复查 C 盘剩余空间和目标目录残留
```
---
## 十一、常见问题 FAQ
### Q1:清理 Gradle 后项目无法立即编译?
原因:依赖和 Gradle Wrapper 被清理,需要重新下载。
处理:
```powershell
cd <项目目录>
.\gradlew.bat build
```
如果下载慢,检查代理、Gradle 镜像源和网络。
### Q2:清理后模拟器无法启动?
原因:可能删除了 system-images 或 AVD 镜像。
处理:
```text
Tools -> SDK Manager -> SDK Platforms / SDK Tools
```
重新安装对应系统镜像。
### Q3:Native 项目编译失败?
原因:NDK 被删除或版本不匹配。
处理:
1. 查看项目 `local.properties`、`build.gradle` 或 `gradle.properties` 中指定的 NDK 版本。
2. 通过 SDK Manager 重新安装对应 NDK。
### Q4:能不能直接删除整个 Android SDK?
不建议。除非确定不再做 Android 开发,或者准备完整重装 Android Studio 和 SDK。
### Q5:能不能清理 `WindowsApps` 或 `WinSxS`?
不建议手动清理。
- `WindowsApps` 是 Microsoft Store / Windows 应用目录。
- `WinSxS` 是系统组件存储,应通过系统工具或 DISM 判断。
- 本机 DISM 结果显示:`推荐使用组件存储清理:否`。
---
## 十二、下一步建议
当前本机已清理低风险缓存和 Gradle 缓存,C 盘剩余空间从 `10.63 GB` 提升到 `22.05 GB`。
后续如果还要继续释放空间,建议顺序:
1. 用 SDK Manager 检查 Android SDK 是否存在不用的旧版平台、Build Tools、NDK、system-images。
2. 检查是否仍需要本机所有 Android Studio / Java / WSL / 360 / 腾讯文档程序。
3. 对 Tencent、kingsoft、TDAppDesktop 只做软件内清理,不直接删目录。
4. 对 Android Studio 执行 `Invalidate Caches`,不要手动删除整个配置目录。
---
## 十三、关联记录
- 本次实际清理:低风险缓存释放 `4.77 GB`,Gradle 缓存释放 `6.65 GB`。
- 当前 C 盘:总计 `118.24 GB`,剩余 `22.05 GB`。
- 整理依据:本机 PowerShell 扫描结果、Windows 删除安全确认流程、Android Studio / Gradle 常见缓存机制。