UniApp打包报错与C盘空间不足解决方案
UniApp打包报错与C盘空间不足完整解决方案
问题背景
在UniApp开发过程中,打包APK时频繁遇到以下问题:
- zipalign工具处理大文件失败
- C盘空间不足导致打包中断
- 临时文件占用大量系统盘空间
详细错误分析
错误类型一:文件处理失败
[Error] W/zip: copy of 'assets/apps/__UNI__F0F5F89/www/static/uploads/wyy/rock/bob_seger_ride_out.mp3' failed
[Error] Apk zipalign failed
原因分析:
- 文件路径过长或包含特殊字符
- 文件大小超出处理限制
- 磁盘I/O错误
错误类型二:磁盘空间不足
Exception in thread "main" brut.androlib.exceptions.AndrolibException:
java.io.IOException: 磁盘空间不足
原因分析:
- C盘可用空间不足
- 临时文件累积过多
- 打包过程需要大量临时空间
完整解决方案
1. 移动HBuilderX打包缓存到D盘(详细步骤)
步骤1:准备工作
# 检查当前缓存占用空间
dir "C:\Users\15765\AppData\Local\HBuilder X\AndroidPackWork" /s
# 创建D盘目标目录
mkdir "D:\HBuilderX"
mkdir "D:\HBuilderX\AndroidPackWork"
mkdir "D:\HBuilderX\Temp"
步骤2:关闭HBuilderX进程
# 结束所有HBuilderX相关进程
taskkill /f /im "HBuilderX.exe"
taskkill /f /im "node.exe" /fi "WINDOWTITLE eq HBuilderX*"
步骤3:移动AndroidPackWork目录
# 方法1:使用robocopy(推荐)
robocopy "C:\Users\15765\AppData\Local\HBuilder X\AndroidPackWork" "D:\HBuilderX\AndroidPackWork" /E /MOVE /MT:8
# 方法2:使用xcopy
xcopy "C:\Users\15765\AppData\Local\HBuilder X\AndroidPackWork" "D:\HBuilderX\AndroidPackWork" /E /H /Y
rmdir "C:\Users\15765\AppData\Local\HBuilder X\AndroidPackWork" /S /Q
步骤4:创建符号链接
# 管理员权限cmd执行
mklink /D "C:\Users\15765\AppData\Local\HBuilder X\AndroidPackWork" "D:\HBuilderX\AndroidPackWork"
# 验证链接是否创建成功
dir "C:\Users\15765\AppData\Local\HBuilder X\"
步骤5:设置临时文件目录
# 设置用户环境变量
setx TEMP "D:\HBuilderX\Temp"
setx TMP "D:\HBuilderX\Temp"
# 设置系统环境变量(管理员权限)
setx TEMP "D:\HBuilderX\Temp" /M
setx TMP "D:\HBuilderX\Temp" /M
2. HBuilderX配置文件修改
修改config.json
// 文件位置:HBuilderX安装目录\plugins\launcher\base\config.json
{
"android": {
"packWork": "D:\\HBuilderX\\AndroidPackWork",
"tempDir": "D:\\HBuilderX\\Temp",
"sdk": "D:\\Android\\sdk"
},
"cacheDir": "D:\\HBuilderX\\Cache",
"workspace": "D:\\HBuilderX\\Workspace"
}
修改用户设置
# HBuilderX -> 工具 -> 设置 -> 运行配置
Android设置:
- Android SDK目录:D:\Android\sdk
- Android打包缓存目录:D:\HBuilderX\AndroidPackWork
- gradle目录:D:\HBuilderX\.gradle
3. 项目manifest.json配置
{
"app-plus": {
"distribute": {
"android": {
"outputPath": "D:\\output\\android",
"buildPath": "D:\\HBuilderX\\build",
"tempPath": "D:\\HBuilderX\\temp"
}
}
}
}
4. 系统级优化配置
修改虚拟内存设置
控制面板 -> 系统 -> 高级系统设置 -> 性能设置 -> 高级 -> 虚拟内存
设置为:D盘,系统管理大小
移动用户文件夹
# 移动下载文件夹
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v "{374DE290-123F-4565-9164-39C4925E467B}" /t REG_EXPAND_SZ /d "D:\Downloads" /f
# 移动桌面文件夹
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v "Desktop" /t REG_EXPAND_SZ /d "D:\Desktop" /f
5. 批处理脚本自动化
创建cleanup.bat
@echo off
echo 清理HBuilderX缓存...
rd /s /q "D:\HBuilderX\AndroidPackWork\cache" 2>nul
rd /s /q "D:\HBuilderX\Temp" 2>nul
mkdir "D:\HBuilderX\Temp"
echo 清理系统临时文件...
del /f /s /q "%temp%\*.*" 2>nul
rd /s /q "%temp%" 2>nul
mkdir "%temp%"
echo 清理完成!
pause
创建move_hbuilderx.bat
@echo off
echo 正在移动HBuilderX缓存到D盘...
REM 关闭HBuilderX
taskkill /f /im "HBuilderX.exe" 2>nul
REM 创建目标目录
mkdir "D:\HBuilderX\AndroidPackWork" 2>nul
REM 移动文件
if exist "C:\Users\%USERNAME%\AppData\Local\HBuilder X\AndroidPackWork" (
robocopy "C:\Users\%USERNAME%\AppData\Local\HBuilder X\AndroidPackWork" "D:\HBuilderX\AndroidPackWork" /E /MOVE /MT:8
REM 创建符号链接
mklink /D "C:\Users\%USERNAME%\AppData\Local\HBuilder X\AndroidPackWork" "D:\HBuilderX\AndroidPackWork"
)
echo 移动完成!
pause
6. 验证配置是否生效
检查符号链接
# 查看链接状态
dir "C:\Users\15765\AppData\Local\HBuilder X\" | find "AndroidPackWork"
# 测试链接可用性
echo test > "C:\Users\15765\AppData\Local\HBuilder X\AndroidPackWork\test.txt"
dir "D:\HBuilderX\AndroidPackWork\test.txt"
监控磁盘使用
# 查看D盘空间
fsutil volume diskfree D:
# 实时监控打包过程中的空间变化
wmic logicaldisk get size,freespace,caption
问题预防措施
1. 定期维护脚本
# weekly_cleanup.bat
@echo off
REM 每周清理脚本
REM 清理HBuilderX缓存
rd /s /q "D:\HBuilderX\AndroidPackWork\cache\*" 2>nul
REM 清理node_modules缓存
for /d %%i in (D:\Projects\*) do (
if exist "%%i\node_modules" rd /s /q "%%i\node_modules\.cache" 2>nul
)
REM 清理npm缓存
npm cache clean --force
echo 清理完成: %date% %time% >> D:\HBuilderX\cleanup.log
2. 项目资源优化
// 压缩音频文件
const audioFiles = [
'static/uploads/wyy/rock/bob_seger_ride_out.mp3'
];
// 重命名为简单文件名
audioFiles.forEach(file => {
const newName = file.replace(/[^a-zA-Z0-9.]/g, '_');
console.log(`重命名: ${file} -> ${newName}`);
});
3. 监控配置
// package.json 添加磁盘空间检查
{
"scripts": {
"pre-build": "node scripts/check-disk-space.js",
"build": "uni build"
}
}
// scripts/check-disk-space.js
const fs = require('fs');
const path = require('path');
function checkDiskSpace() {
const stats = fs.statSync('D:');
const freeSpace = stats.free;
const required = 5 * 1024 * 1024 * 1024; // 5GB
if (freeSpace < required) {
console.error('磁盘空间不足,至少需要5GB可用空间');
process.exit(1);
}
console.log(`可用空间: ${(freeSpace / 1024 / 1024 / 1024).toFixed(2)}GB`);
}
checkDiskSpace();
故障排除
符号链接创建失败
# 检查权限
whoami /priv | find "SeCreateSymbolicLinkPrivilege"
# 启用开发者模式(Win10/11)
# 设置 -> 更新和安全 -> 开发者选项 -> 开发人员模式
打包仍然失败
# 使用云打包
HBuilderX -> 发行 -> 原生App-云打包
# 或者手动清理后重试
rd /s /q "D:\HBuilderX\AndroidPackWork\cache"
总结
通过以上详细配置,可以彻底解决UniApp打包时的C盘空间问题。关键要点:
- 彻底迁移:不仅移动AndroidPackWork,还要移动所有相关缓存
- 正确设置:使用符号链接保持兼容性
- 系统优化:调整临时文件和虚拟内存位置
- 定期维护:建立清理和监控机制
此方案可释放C盘空间5-20GB,显著提升打包成功率。
本作品采用《CC 协议》,转载必须注明作者和本文链接