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

Nat*_*man 23 android sd-card android-virtual-device android-emulator

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

  1. 从Android Studio启动AVD Manager

  2. 单击"创建虚拟设备"按钮:

    在此输入图像描述

  3. 选择Nexus 4硬件配置文件:

    在此输入图像描述

  4. 点击下一步"

  5. 单击"x86 Images"选项卡,然后选择"Jelly Bean/17/x86/Android 4.2(使用Google API)"图像:

    在此输入图像描述

  6. 点击下一步"

  7. 将设置保留为默认值:

    在此输入图像描述

  8. 点击"完成"

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

$ cd ~/Android/Sdk/tools
$ LD_PRELOAD='/usr/$LIB/libstdc++.so.6' ./emulator -avd Nexus_4_API_17
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

然而,与它的交互立即显示存在问题.相机显示错误:

在此输入图像描述

单击"设置"应用中的"存储"会导致"设置"应用崩溃.

我做错了什么,如何解决这个问题?


编辑:我点击"显示高级设置"并确认确实要创建一张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
Run Code Online (Sandbox Code Playgroud)

...然后将其直接传递给模拟器:

emulator -sdcard sdcard.img -avd [...]
Run Code Online (Sandbox Code Playgroud)

......但这并没有什么区别.

但是,在设备上打开根终端(使用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上面的输出中缺少SD卡,并且没有一个分区的容量为100M.

Mat*_*ano 5

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

如果您想继续使用该系统而又想同时使用sd卡,那么这对您来说是个不错的选择。

手动启动仿真器,如下所示:

cd ~/Android/Sdk/emulator
LD_PRELOAD='/usr/$LIB/libstdc++.so.6' ./emulator @Nexus_4_API_17 -verbose -engine classic
Run Code Online (Sandbox Code Playgroud)

请注意-发动机的经典,将加载旧/经典QEMU内核的kerne-QEMU,而不是新的qemu2内核内核兰寿(可选项有:自动经典qemu2