Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

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.

like image 947
Nathan Osman Avatar asked May 11 '17 19:05

Nathan Osman


People also ask

How do I make an AVD emulator?

In the Android SDK Manager, select Tools | Manage AVDs. In the Android Virtual Device Manager, click the New button to create a new virtual device. In the Create new Android Virtual Device (AVD) dialog box, select an Android device to emulate, and enter the details describing the Android device you want to emulate.

How do I run an app on AVD?

In Android Studio, create an Android Virtual Device (AVD) that the emulator can use to install and run your app. In the toolbar, select your app from the run/debug configurations drop-down menu. From the target device drop-down menu, select the AVD that you want to run your app on. Click Run .


2 Answers

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)

like image 175
Matteo Gaggiano Avatar answered Oct 31 '22 13:10

Matteo Gaggiano


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.

like image 20
Etornam Avatar answered Oct 31 '22 11:10

Etornam