uni.clearStorageSync()仅清除uni.setStorage保存的数据,无法清除localStorage、下载文件、WebView缓存及运行日志;“一键清空”需依次执行clearStorageSync、clearImageCache、plus.cache.clear及plus.io遍历删除日志文件。

uni.clearStorageSync() 能清掉什么,不能清掉什么
调 uni.clearStorageSync() 确实能立刻清空所有通过 uni.setStorage 存的数据(比如 token、用户信息、配置项),但它不碰以下几类内容:
- 手动写入的
localStorage.setItem('ab_test_group', 'B')—— H5 里它完全没感知 -
uni.downloadFile或uni.saveFile保存的文件,哪怕路径在uni.env.USER_DATA_PATH下,也得靠uni.removeSavedFile单独删 - WebView 加载过的图片、JS、CSS 等资源缓存,这部分归
plus.cache管,uni.clearStorageSync不负责 - App 启动后产生的运行日志(如 console.log 输出、自定义埋点日志文件),这些通常存在
plus.io.getCacheDir()或私有目录里,uni API 无访问权限
App 端真正“一键清空”的组合操作必须包含哪些步骤
所谓“一键”,是前端可控范围内尽可能覆盖。实际需按顺序执行四件事,缺一不可:
- 调
uni.clearStorageSync()清 storage 数据(同步,无回调) - 用
#ifdef APP-PLUS包裹,调uni.clearImageCache()清图片缓存(仅 App 有效,静默失败不报错) - 用
plus.cache.clear(() => { ... })清 WebView 缓存(iOS/Android 行为一致,但不清理 OkHttp/CFNetwork 层磁盘缓存) - 主动遍历并清理日志文件:先
plus.io.readdir({ path: plus.io.getCacheDir(), ... })列出所有.log或自定义命名的文件,再逐个plus.io.remove()
注意:最后一步必须用 plus.io,uni.getFileSystemManager() 对 getCacheDir() 下的文件无读写权限。
为什么清理日志必须自己实现,且容易漏掉
uni-app 没有内置日志管理模块,所有日志落地都依赖开发者手动写文件。常见疏漏点:
- 日志路径写死在
uni.env.USER_DATA_PATH,但部分 Android 厂商 ROM 会把日志重定向到/data/data/[package]/files/logs/,plus.io.getCacheDir()反而更稳定 - 只删
*.log,却忽略带时间戳的滚动日志(如app-20260617.log),或未关闭写入流就删文件导致残留锁文件 - 并发删日志时没控制数量,iOS 上触发
EMFILE: too many open files错误,建议每次最多处理 3–5 个文件,用Promise.allSettled()包裹 - 忘记在 manifest.json 的 “模块权限配置” 里勾选 “文件系统(plus.io)”,否则
plus.io相关 API 全部静默失效
上线前必须验证的三个残留点
清完不是终点,要确认是否真干净。重点检查:
- 调
plus.cache.calculate()查看缓存大小是否归零(注意:该值不含 OkHttp 层缓存,仅反映 WebView 层) - 进系统设置 → 应用管理 → 你的 App → 存储空间,看“缓存大小”是否明显下降(若没变,大概率
plus.cache.clear()没生效或被拦截) - 用 Android Studio 的 Device File Explorer 或 iOS 的 Xcode Organizer 查看
Documents/和Library/Caches/目录下是否还有残留日志或临时文件
最常被跳过的其实是日志文件的文件名匹配逻辑——别只匹配 .log,加个正则 /^app.*\.(log|txt)$/i 更稳妥。


















