如何为 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
)并运行mount
和df
命令后,我发现了一些有趣的事情:
# 挂载 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(可用选项有:auto、classic、qemu2)
【讨论】:
哇,相机现在可以工作了。但是,设置中的“存储”仍然崩溃,现在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?的主要内容,如果未能解决你的问题,请参考以下文章
如何为 Autodesk Forge API 问题创建照片附件?
如何为 Forge API 提供签名的 url 以创建 revit 文件