Android模拟器存储空间不足致adb安装APK卡顿问题排查与解决
Android模拟器存储空间不足&adb安装卡住的成因与解决方案
我在日常Android开发和模拟器测试过程中,也频繁遇到这个头疼的问题——模拟器弹“存储空间不足”通知,同时adb装APK时毫无报错但一直卡着。结合踩过的坑和排查经验,给你拆解下背后的原因,以及比重启/清数据更顺畅的解决办法:
一、问题成因
- 虚拟存储的动态扩展限制:大多数模拟器默认用动态分配的磁盘镜像(比如
userdata.img),理论上会自动扩容,但实际运行中因为系统权限、镜像格式限制,经常无法及时扩展,导致明明分配了足够的最大空间,实际可用却被卡着。 - 缓存与临时文件堆积:模拟器运行时会生成大量冗余文件:比如adb的日志缓存、应用安装残留的临时文件、系统日志(
logcat)、甚至是模拟器自带的浏览器/应用商店缓存,这些文件会悄悄占满/cache或/data分区,尤其是长期运行多个测试应用后,堆积速度远超预期。 - APK安装的临时分区瓶颈:adb安装APK时,会先把安装包传到模拟器的
/data/local/tmp目录,如果这个临时分区本身分配的空间很小,大体积APK直接就把它占满了,导致安装进程卡住,还没机会报错就停住了。
注:你提到和Lollipop升级后的存储问题无关,这点我也验证过,这个问题在多个Android版本的模拟器上都存在,和特定系统版本升级关联不大。
二、解决方案
临时缓解(比重启/清数据更轻量)
- 直接清理临时分区和缓存:不用清整个模拟器数据,通过adb命令针对性清理:
- 先连接模拟器:
adb devices确认连接正常 - 清理临时安装目录:
adb shell rm -rf /data/local/tmp/* - 清理系统缓存:
adb shell pm clear com.android.providers.downloads(清理下载缓存),或者adb shell rm -rf /cache/*(需root权限,部分模拟器默认已root)
这种方式比重启更快,也不会丢失测试数据,我开发时碰到卡安装就先跑这几条命令,基本能解决*80%*的临时问题。
- 先连接模拟器:
- 强制终止adb进程重试:有时候是adb本身的进程卡住,不是模拟器存储的问题,执行
adb kill-server再adb start-server,重新尝试安装APK。
根治方案(彻底避免复发)
- 调整模拟器的存储分配:
- 打开Android Studio的AVD Manager,找到对应的模拟器,点击「Edit」
- 进入「Show Advanced Settings」,找到「Internal Storage」和「Cache Partition Size」,把数值调大(比如Internal Storage设为10GB,Cache设为1GB,根据你的需求调整)
- 重启模拟器,这次是一次性调整,后续动态扩展的空间足够,就不会轻易满了。
- 修改adb安装参数,跳过临时分区:针对大体积APK,直接指定安装路径到空间更大的分区,命令如下:
adb install -s /sdcard/your_apk_path.apk
这个参数会把APK先传到SD卡分区,再进行安装,避开/data/local/tmp的空间限制。 - 定期自动清理脚本:写个简单的shell脚本,每次启动模拟器或开发前自动清理冗余文件,比如:
把这个脚本设为开机自动运行,或者开发前手动执行一次,从根源减少文件堆积。#!/bin/bash adb devices | grep emulator | awk '{print $1}' | while read device; do adb -s $device shell rm -rf /data/local/tmp/* adb -s $device shell rm -rf /cache/* done
内容的提问来源于stack exchange,提问作者ris8_allo_zen0




