avdmanager创建的AVDs无法启动,缺失disk.dataPartition.size配置
解决avdmanager自动添加data分区大小参数的问题
我之前也碰到过这个一模一样的坑——用avdmanager创建Android 26/27的Google APIs x86镜像AVD时,因为默认缺失disk.dataPartition.size=800M配置,导致启动时陷入ADB连接断开的死循环。下面是几个能让avdmanager自动完成这个配置的实用方法:
方法1:创建后自动追加配置参数
你可以在avdmanager创建AVD的命令后,直接追加一行修改配置文件的命令,自动补上缺失的参数。
比如针对你给出的AVD名称TEST_1234,可以这样写:
# 先创建AVD avdmanager create avd -n TEST_1234 -k 'system-images;android-27;google_apis;x86' -d 'Nexus One' -f # 找到AVD配置文件并添加data分区参数 echo "disk.dataPartition.size=800M" >> ~/.android/avd/TEST_1234.avd/config.ini
注意:如果你的AVD存储路径不是默认的
~/.android/avd/,可以通过avdmanager list avd命令查看每个AVD的实际存储路径,替换掉上面的路径即可。
方法2:使用自定义配置模板
你可以先准备一个包含disk.dataPartition.size=800M的模板配置文件,创建AVD时直接指定使用这个模板,一次性搞定所有自定义配置。
- 复制一个Android Studio里保存正常的AVD的
config.ini作为模板,确保里面已经包含disk.dataPartition.size=800M参数,保存为avd_custom_template.ini; - 创建AVD时用
--config参数指定这个模板:
avdmanager create avd -n TEST_1234 -k 'system-images;android-27;google_apis;x86' -d 'Nexus One' -f --config ./avd_custom_template.ini
这个方法的好处是,你还可以在模板里加入其他常用配置(比如屏幕分辨率、内存大小等),不用每次创建都重复设置。
方法3:封装成脚本批量创建
如果需要频繁创建这类AVD,建议把创建和配置的逻辑封装成脚本,用起来更高效。比如写一个bash脚本:
#!/bin/bash # 脚本参数:第一个是AVD名称,第二个是API版本(比如27) AVD_NAME=$1 API_LEVEL=$2 # 执行AVD创建命令 avdmanager create avd -n $AVD_NAME -k "system-images;android-$API_LEVEL;google_apis;x86" -d 'Nexus One' -f # 自动添加data分区参数 echo "disk.dataPartition.size=800M" >> ~/.android/avd/$AVD_NAME.avd/config.ini echo "AVD $AVD_NAME 创建成功,已自动设置data分区大小为800M"
使用的时候只需要运行:
./create_custom_avd.sh TEST_1234 27
补充说明一下:这个问题本质是Android 26及以上的Google APIs镜像对data分区的最小容量有要求,而avdmanager默认没有设置足够的大小,手动添加800M刚好能满足启动需求。
内容的提问来源于stack exchange,提问作者user1243584
相关产品推荐
相关产品推荐

