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 协议》,转载必须注明作者和本文链接
关于 LearnKu