如何为 Jellybean (API 17) 创建一个可用的 AVD?

How to create a working AVD for Jellybean (API 17)?

我尝试使用以下过程在 Kubuntu 17.04 中为 Jellybean (API 17) 创建一个 AVD:

  1. 从 Android Studio

  2. 启动 AVD 管理器
  3. 点击"Create Virtual Device"按钮:

  4. Select Nexus 4 硬件配置文件:

  5. 点击"Next"

  6. 单击 "x86 Images" 选项卡和 select "Jelly Bean / 17 / x86 / Android 4.2 (with Google APIs)" 图片:

  7. 点击"Next"

  8. 保留默认设置:

  9. 点击"Finish"

现在,由于 Ubuntu 17.04(及其衍生版本)的一个不幸问题,无法通过单击其条目旁边的播放按钮直接启动模拟器。 (点击它什么都不做。)相反,我必须从终端启动模拟器:

$ cd ~/Android/Sdk/tools
$ LD_PRELOAD='/usr/$LIB/libstdc++.so.6' ./emulator -avd Nexus_4_API_17

模拟器启动并出现主屏幕:

但是,与它进行交互后立即发现存在问题。相机显示错误:

在“设置”应用中单击 "Storage" 会导致“设置”应用崩溃。

我做错了什么,我该如何解决?


编辑:我点击了"Show Advanced Settings"确认确实要创建SD卡:

我也确认文件 ~/.android/avd/Nexus_4_API_17.avd/sdcard.img.qcow2 存在。


编辑: 我按照相同的步骤创建了一个 Kit Kat AVD(使用 Nexus 5 硬件配置文件),问题是不是 出现在那里。 SD 卡正常工作。


编辑: 我尝试使用 mksdcard 手动创建 SD 卡映像:

mksdcard -l TEST 100M sdcard.img

...然后直接传给模拟器:

emulator -sdcard sdcard.img -avd [...]

...但这没有任何区别。

然而,在设备上打开根终端(使用 adb shell)和 运行 mountdf 命令后,我发现了一些有趣的东西:

# mount
rootfs / rootfs ro,relatime 0 0
tmpfs /dev tmpfs rw,nosuid,relatime,mode=755 0 0
devpts /dev/pts devpts rw,relatime,mode=600 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,relatime 0 0
tmpfs /mnt/secure tmpfs rw,relatime,mode=700 0 0
tmpfs /mnt/asec tmpfs rw,relatime,mode=755,gid=1000 0 0
tmpfs /mnt/obb tmpfs rw,relatime,mode=755,gid=1000 0 0
/dev/block/vda /system ext4 ro,relatime,data=ordered 0 0
/dev/block/vdb /cache ext4 rw,nosuid,nodev,noatime,errors=panic,data=ordered 0 0
/dev/block/vdc /data ext4 rw,nosuid,nodev,noatime,errors=panic,data=ordered 0 0

# df
Filesystem             Size   Used   Free   Blksize
/dev                   757M    68K   757M   4096
/mnt/secure            757M     0K   757M   4096
/mnt/asec              757M     0K   757M   4096
/mnt/obb               757M     0K   757M   4096
/system                532M   349M   183M   4096
/cache                  60M    40K    60M   4096
/data                    1G    75M     1G   4096

似乎没有安装 SD 卡,因为上面的输出中缺少 /dev/block/vdd,并且 none 个分区的容量为 100M。

创建 AVD 时,可以说明是否模拟 SDCard(以及大小)。看起来您根本没有指定 SDCard 存在。编辑您的 AVD 设置并确保您已明确请求 SDCard 支持。我认为您在第 7 步的“高级设置”中有此选项。

For settings issue

编辑硬件配置文件并将尺寸更改为 4.2 英寸(不确定为什么?但我认为最多 17 个可用的最大分辨率为 4.2 英寸)。

Reboot the device

您的设置将开始生效。

For camera

问题是处于只读模式的文件系统。您需要更改文件系统。检查这个 link.

更改文件系统后推送几张图片并重新启动。

我发现另一个问题是不存在 DCIM 文件夹。 尝试创建 /mnt/sdcard/DCIM 并添加一些图片。

再次重启。一切都会开始工作。

您可以使用 genymotion: https://www.genymotion.com/

Genymotion is an emulator using x86 architecture virtualization, making it much more efficient!

Taking advantage of OpenGL hardware acceleration, it allows you to test your applications with amazing 3D performance

http://hackpundit.com/android-emulator-genymotion-installation/

尝试使用 Genymotion。它快得多。 Genymotion 操作依赖于在后台使用 Oracle VM VirtualBox。这可以实现 Android 操作系统的虚拟化。如果您尚未安装 Oracle VM VirtualBox,系统会要求您在安装 Genymotion 之前安装。

经过一番研究,我得出了一个答案:JellyBean 太旧,无法在最新的模拟器上使用。

如果您想继续使用此系统并且还想使用 SD 卡,这对您来说是一个不错的解决方法。

手动启动模拟器为:

cd ~/Android/Sdk/emulator
LD_PRELOAD='/usr/$LIB/libstdc++.so.6' ./emulator @Nexus_4_API_17 -verbose -engine classic

请注意 -engine classic 它将使用内核 kerne-qemu 加载 old/classic qemu 而不是带有内核 kernel-ranchu 的新 qemu2(可用选项是:auto , 经典, qemu2)