You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android模拟器存储空间不足致adb安装APK卡顿问题排查与解决

Android模拟器存储空间不足&adb安装卡住的成因与解决方案

我在日常Android开发和模拟器测试过程中,也频繁遇到这个头疼的问题——模拟器弹“存储空间不足”通知,同时adb装APK时毫无报错但一直卡着。结合踩过的坑和排查经验,给你拆解下背后的原因,以及比重启/清数据更顺畅的解决办法:

一、问题成因

  • 虚拟存储的动态扩展限制:大多数模拟器默认用动态分配的磁盘镜像(比如userdata.img),理论上会自动扩容,但实际运行中因为系统权限、镜像格式限制,经常无法及时扩展,导致明明分配了足够的最大空间,实际可用却被卡着。
  • 缓存与临时文件堆积:模拟器运行时会生成大量冗余文件:比如adb的日志缓存、应用安装残留的临时文件、系统日志(logcat)、甚至是模拟器自带的浏览器/应用商店缓存,这些文件会悄悄占满/cache/data分区,尤其是长期运行多个测试应用后,堆积速度远超预期。
  • APK安装的临时分区瓶颈:adb安装APK时,会先把安装包传到模拟器的/data/local/tmp目录,如果这个临时分区本身分配的空间很小,大体积APK直接就把它占满了,导致安装进程卡住,还没机会报错就停住了。

注:你提到和Lollipop升级后的存储问题无关,这点我也验证过,这个问题在多个Android版本的模拟器上都存在,和特定系统版本升级关联不大。

二、解决方案

临时缓解(比重启/清数据更轻量)

  • 直接清理临时分区和缓存:不用清整个模拟器数据,通过adb命令针对性清理:
    1. 先连接模拟器:adb devices确认连接正常
    2. 清理临时安装目录:adb shell rm -rf /data/local/tmp/*
    3. 清理系统缓存:adb shell pm clear com.android.providers.downloads(清理下载缓存),或者adb shell rm -rf /cache/*(需root权限,部分模拟器默认已root)
      这种方式比重启更快,也不会丢失测试数据,我开发时碰到卡安装就先跑这几条命令,基本能解决*80%*的临时问题。
  • 强制终止adb进程重试:有时候是adb本身的进程卡住,不是模拟器存储的问题,执行adb kill-serveradb start-server,重新尝试安装APK。

根治方案(彻底避免复发)

  • 调整模拟器的存储分配
    1. 打开Android Studio的AVD Manager,找到对应的模拟器,点击「Edit」
    2. 进入「Show Advanced Settings」,找到「Internal Storage」和「Cache Partition Size」,把数值调大(比如Internal Storage设为10GB,Cache设为1GB,根据你的需求调整)
    3. 重启模拟器,这次是一次性调整,后续动态扩展的空间足够,就不会轻易满了。
  • 修改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

火山引擎 最新活动