android – How to create a working AVD for Jellybean (API 17)?-ThrowExceptions

Exception or error:

I attempted to create an AVD for Jellybean (API 17) in Kubuntu 17.04 using the following procedure:

  1. Launch the AVD Manager from Android Studio

  2. Click the “Create Virtual Device” button:

    enter image description here

  3. Select the Nexus 4 hardware profile:

    enter image description here

  4. Click “Next”

  5. Click the “x86 Images” tab and select “Jelly Bean / 17 / x86 / Android 4.2 (with Google APIs)” image:

    enter image description here

  6. Click “Next”

  7. Leave the settings at their defaults:

    enter image description here

  8. Click “Finish”

Now, due to an unfortunate issue with Ubuntu 17.04 (and its derivatives), it is not possible to launch the emulator directly by clicking the play button next to its entry. (Clicking it does nothing.) Instead, I must launch the emulator from the terminal with:

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

The emulator starts and the home screen appears:

enter image description here

However, interacting with it immediately reveals that there is a problem. The camera displays an error:

enter image description here

Clicking on “Storage” in the Settings app causes the Settings app to crash.

What did I do wrong and how can I fix this?


Edit: I clicked “Show Advanced Settings” and confirmed that an SD card was indeed to be created:

enter image description here

I also confirmed that the file ~/.android/avd/Nexus_4_API_17.avd/sdcard.img.qcow2 exists.


Edit: I followed the same procedure to create a Kit Kat AVD (using the Nexus 5 hardware profile) and the issue is not present there. The SD card works as expected.


Edit: I tried using mksdcard to manually create an SD card image:

mksdcard -l TEST 100M sdcard.img

…and then passing it directly to the emulator:

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

…but this made no difference.

However, I discovered something interesting after opening a root terminal on the device (using adb shell) and running the mount and df commands:

# 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

It appears as if the SD card isn’t being mounted, since /dev/block/vdd is missing in the output above and none of the partitions have a capacity of 100M.

How to solve:

After some research I’m ended up to an answer: JellyBean is too old to be used on recent emulator.

If you want to continue to use this system and wanto to use also the sd card, this can be a nice workaound for you.

Launch manually the emulator as:

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

Note the -engine classic that will load the old/classic qemu with kernel kerne-qemu instead of new qemu2 with kernel kernel-ranchu (available options are: auto, classic, qemu2)

###

try using Genymotion. it much faster.
Genymotion operation relies on the use of Oracle VM VirtualBox in the background. This enables virtualizing Android operating systems. If you do not already have Oracle VM VirtualBox installed, you will be asked to do so prior to installing Genymotion.

###

When you create an AVD it’s possible to say whether to emulate SDCard or not (and of what size). Looks like you simply did not specify the SDCard presence. Edit your AVD settings and make sure you have explicitly requested for SDCard support. I think this options in Advanced settings in your step 7.

###

For settings issue

Edit the hardware profile and change the dimensions to 4.2 inches(Not sure Why? But i think upto 17 max resolution available was 4.2 inches).

Reboot the device

Your settings will start working.

For camera

The issue is the file system which is in read only mode. You need to change the file system. Check this link.

After changing the file system push few images and restart.

Another issue i found that there is no DCIM folder present.
Try creating the /mnt/sdcard/DCIM and add few images too.

Reboot again. Everything will start working.

###

You can use 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/

Leave a Reply

Your email address will not be published. Required fields are marked *