如何为 Jellybean (API 17) 创建一个有效的 AVD?

Posted

技术标签:

【中文标题】如何为 Jellybean (API 17) 创建一个有效的 AVD?【英文标题】:How to create a working AVD for Jellybean (API 17)? 【发布时间】:2017-10-10 22:52:51 【问题描述】:

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

    android Studio 启动 AVD 管理器

    点击“创建虚拟设备”按钮:

    选择 Nexus 4 硬件配置文件:

    点击“下一步”

    点击“x86 Images”标签并选择“Jelly Bean / 17 / x86 / Android 4.2 (with Google APIs)”图片:

    点击“下一步”

    保留默认设置:

    点击“完成”

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

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

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

但是,与之交互会立即表明存在问题。相机显示错误:

点击设置应用中的“存储”会导致设置应用崩溃。

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


编辑:我点击“显示高级设置”并确认确实要创建 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 命令后,我发现了一些有趣的事情:

# 挂载
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
使用的文件系统大小 Free Blksize
/开发 757M 68K 757M 4096
/mnt/安全 757M 0K 757M 4096
/mnt/asec 757M 0K 757M 4096
/mnt/obb 757M 0K 757M 4096
/系统 532M 349M 183M 4096
/缓存 60M 40K 60M 4096
/数据 1G 75M 1G 4096

看起来好像没有安装 SD 卡,因为上面的输出中缺少 /dev/block/vdd,并且没有一个分区的容量为 100M。

【问题讨论】:

嘿!外部文件中的结果是什么?还是不工作? @Kaushal28 抱歉,我只是在吃午饭。我尝试为外部文件指定.qcow2 图像的路径,但没有任何区别。 您是否尝试过手动重新创建 sdcard 映像文件? developer.android.com/studio/command-line/mksdcard.html 您也可以尝试通过命令行使用-sdcard 参数启动模拟器。 @MatteoGaggiano 我试了一下,但还是不行。请查看我的更新。 @NathanOsman 来自 android 文档 If the file isn't found, the emulator still launches, but without an SD card; the command returns a No SD Card Image warning.。警告出现了吗? 【参考方案1】:

经过一番研究,我最终得到了一个答案: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 而不是新的 qemu2qemu /em> 带有内核 kernel-ranchu(可用选项有:autoclassicqemu2

【讨论】:

哇,相机现在可以工作了。但是,设置中的“存储”仍然崩溃,现在logcat 不起作用。 如果可以,请降级您的 android-17 (JellyBean 4.2) 系统映像。【参考方案2】:

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

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

关于设置问题

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

Reboot the device

您的设置将开始工作。

相机用

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

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

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

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

【讨论】:

我将硬件配置文件调整为 4.2" 但这并没有什么不同,即使在重新启动虚拟设备后也是如此。我还尝试将 //system 重新安装为 rw 但这并没有没什么区别。【参考方案5】:

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

Genymotion 是一个使用 x86 架构虚拟化的模拟器, 让它更有效率!

利用 OpenGL 硬件加速,它允许您 以惊人的 3D 性能测试您的应用程序

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

【讨论】:

以上是关于如何为 Jellybean (API 17) 创建一个有效的 AVD?的主要内容,如果未能解决你的问题,请参考以下文章

K6 负载测试 - 如何为整个测试运行创建顺序 ID

如何为以下 API 数据创建可编码结构

如何为 Autodesk Forge API 问题创建照片附件?

如何为 Forge API 提供签名的 url 以创建 revit 文件

如何为旧版 Android API 实现 TextView 行间距方法?

使用 Stripe,如何为多个客户附加从 Setup Intent API 创建的单一支付方式