由于缺少设置,使用 avdmanager 创建的 AVD 不再启动

AVDs created with avdmanager no longer launch due to missing setting

在 运行ning sdkmanager --update 之后,我无法再成功启动使用 avdmanager 创建的带有以下图像的 AVD:

不过,我可以使用 system-images;android-25;google_apis;x86 图片。或者,如果使用 Android Studio 创建,则使用上述图像创建的模拟器每次都可以工作。

使用avdmanager创建时,我运行宁:avdmanager create avd -n TEST_1234 -k 'system-images;android-27;google_apis;x86' -d 'Nexus One' -f

我已经尝试 运行 它而不指定设备,并且还使用 -c 选项来指定初始 sdcard 大小,但是没有任何组合可以解决这个问题。

当尝试使用模拟器启动这些 AVD 之一时,它似乎陷入循环,重复输出以下内容:

emulator: onGuestSendCommand: [0x7f0b315d2730] Adb connected, start proxing data
emulator: onGuestClose: [0x7f0b315d2730] Adb closed by guest
emulator: onGuestClose: [0x7f0b317a33e0] Adb closed by guest
emulator: onGuestSendCommand: [0x7f0b29741ac0] Adb connected, start proxing data
emulator: onGuestClose: [0x7f0b29741ac0] Adb closed by guest
emulator: onGuestClose: [0x7f0b2b8a3780] Adb closed by guest
emulator: onGuestSendCommand: [0x7f0b301518a0] Adb connected, start proxing data
emulator: onGuestClose: [0x7f0b301518a0] Adb closed by guest
emulator: onGuestClose: [0x7f0b3121f540] Adb closed by guest
emulator: onGuestSendCommand: [0x7f0b30d3a700] Adb connected, start proxing data
emulator: onGuestClose: [0x7f0b30d3a700] Adb closed by guest
emulator: onGuestClose: [0x7f0b3052cbc0] Adb closed by guest

同样,如果我在使用终端 avdmanager 创建 AVD 后在 Android Studio 中启动 AVD 管理器,它将不允许我启动它们(没有错误消息,只是不响应当按下播放按钮时)。

我是否应该选择在 Android Studio 中打开 "Edit Device" window,不对其进行任何更改,然后单击保存按钮将允许我启动它。

这样做会更改 AVD 的配置文件,我认为它负责启动工作。

使用 avdmanager 创建时,config.ini 文件如下所示:

PlayStore.enabled=false
abi.type=x86
avd.ini.encoding=UTF-8
hw.accelerometer=yes
hw.audioInput=yes
hw.battery=yes
hw.cpu.arch=x86
hw.dPad=no
hw.device.hash2=MD5:0250c2773d1dd25bb2b12d9502c789f7
hw.device.manufacturer=Google
hw.device.name=Nexus One
hw.gps=yes
hw.lcd.density=240
hw.lcd.height=800
hw.lcd.width=480
hw.mainKeys=yes
hw.sdCard=yes
hw.sensors.orientation=no
hw.sensors.proximity=yes
hw.trackBall=yes
image.sysdir.1=system-images/android-27/google_apis/x86/
tag.display=Google APIs
tag.id=google_apis

在 Android Studio 中编辑后,或通过 Android Studio 创建时,它将如下所示:

AvdId=TEST_1234
PlayStore.enabled=false
abi.type=x86
avd.ini.displayname=TEST 1234
avd.ini.encoding=UTF-8
disk.dataPartition.size=800M
fastboot.forceColdBoot=no
hw.accelerometer=yes
hw.arc=false
hw.audioInput=yes
hw.battery=yes
hw.camera.back=none
hw.camera.front=none
hw.cpu.arch=x86
hw.dPad=no
hw.device.hash2=MD5:0250c2773d1dd25bb2b12d9502c789f7
hw.device.manufacturer=Google
hw.device.name=Nexus One
hw.gps=yes
hw.gpu.enabled=yes
hw.gpu.mode=guest
hw.initialOrientation=Portrait
hw.keyboard=no
hw.lcd.density=240
hw.lcd.height=800
hw.lcd.width=480
hw.mainKeys=yes
hw.ramSize=512
hw.sdCard=yes
hw.sensors.orientation=no
hw.sensors.proximity=yes
hw.trackBall=yes
image.sysdir.1=system-images/android-27/google_apis/x86/
runtime.network.latency=none
runtime.network.speed=full
sdcard.size=100M
showDeviceFrame=no
skin.dynamic=yes
skin.name=480x800
skin.path=_no_skin
skin.path.backup=_no_skin
tag.display=Google APIs
tag.id=google_apis
vm.heapSize=16

在研究了这些设置的差异之后,我发现如果我使用 avdmanager 创建一个新的 AVD,然后将以下行添加到新创建的配置文件中,它将成功启动:

disk.dataPartition.size=800M

所以,这似乎是 Android Studio 添加的核心设置,它使得 AVD 可以从 Android Studio 使用,但不能 avdmanager

有谁知道如何强制 avdmanager 进行设置?我看不到它的选项,但如果不设置它,就不可能单独使用 avdmanager 创建 AVD。

问题已解决 - 发现麻烦的设置后,我设法找到了一个可以在启动时使用的参数 emulator,它允许指定:-partition-size

使用 emulator -avd TEST_1234 -partition-size 800 -verbose 启动模拟器将解决该问题,并将成功启动使用较新图像创建的模拟器。