4.1 android emulator not detecting sd card

2019-05-06 22:17发布

问题:

I used to use a 4.1 kitkat x86 android emulator with an sd card for testing. After upgrading Android Studio to 2.3, i'm no longer able to access the supplied sdcard in android making testing impossible for me. Google hasn't had answers for this and i also fail to see any clues in the emulator or adb logs. The avd has been recreated new, (i deleted the old avd folder to prevent goop from fouling things up). It simply doesn't work anymore.

Here's the output when starting the emulator on Kubuntu 14.04 amd64

    $ LD_LIBRARY_PATH=/data1/usr/local/android-sdk/emulator/lib64/qt/lib:/data1/usr/local/android-sdk/emulator/lib64/libstdc++:/data1/usr/local/android-sdk/emulator/lib64:/data1/usr/local/android-studio/bin: /data1/usr/local/android-sdk/emulator/qemu/linux-x86_64/qemu-system-i386 -netdelay none -netspeed full -verbose -avd and4.1
emulator: Android virtual device file at: /data1/home2/mario/.android/avd/and4.1.ini
emulator: virtual device content at /data1/home2/mario/.android/avd/and4.1.avd
emulator: virtual device config file: /data1/home2/mario/.android/avd/and4.1.avd/config.ini
emulator: using core hw config path: /data1/home2/mario/.android/avd/and4.1.avd/hardware-qemu.ini
emulator: Found AVD target API level: 16
emulator: Read property file at /usr/local/android-sdk/system-images/android-16/google_apis/x86//build.prop
emulator: No boot.prop property file found.
emulator: Warning: config.ini contains invalid skin.path entry: _no_skin
emulator: autoconfig: -skin 480x800
emulator: autoconfig: -skindir (null)
emulator: autoconfig: -kernel /usr/local/android-sdk/system-images/android-16/google_apis/x86//kernel-ranchu
emulator: Target arch = 'x86'
emulator: Auto-config: -qemu -cpu qemu32
emulator: Auto-detect: Kernel image requires new device naming scheme.
emulator: Auto-detect: Kernel does support YAFFS2 partitions.
emulator: autoconfig: -ramdisk /usr/local/android-sdk/system-images/android-16/google_apis/x86//ramdisk.img
emulator: Using initial system image: /usr/local/android-sdk/system-images/android-16/google_apis/x86//system.img
emulator: autoconfig: -data /data1/home2/mario/.android/avd/and4.1.avd/userdata-qemu.img
emulator: autoconfig: -initdata /data1/home2/mario/.android/avd/and4.1.avd/userdata.img
emulator: autoconfig: -cache /data1/home2/mario/.android/avd/and4.1.avd/cache.img
emulator: autoconfig: -sdcard /data1/home2/mario/.android/avd/and4.1.avd/sdcard.img
emulator: Physical RAM size: 1024MB

emulator: System image is read only
emulator: GPU emulation enabled using 'mesa' mode
emulator: Found 1 DNS servers: 127.0.0.1
emulator: found magic skin width=480 height=800 bpp=16

emulator: WARNING: encryption is off
emulator: CPU Acceleration: working
emulator: CPU Acceleration status: KVM (version 12) is installed and usable.
emulator: Using default value for kernel Contiguous Memory Allocation.
sh: 1: glxinfo: not found
emulator: Found 1 DNS servers: 127.0.0.1
Content of hardware configuration file:
hw.cpu.arch = x86
hw.cpu.model = qemu32
hw.cpu.ncore = 1
hw.ramSize = 1024
hw.screen = multi-touch
hw.mainKeys = true
hw.trackBall = true
hw.keyboard = true
hw.keyboard.lid = false
hw.keyboard.charmap = qwerty2
hw.dPad = false
hw.gsmModem = true
hw.gps = true
hw.battery = true
hw.accelerometer = true
hw.audioInput = true
hw.audioOutput = true
hw.sdCard = true
hw.sdCard.path = /data1/home2/mario/.android/avd/and4.1.avd/sdcard.img
disk.cachePartition = true
disk.cachePartition.path = /data1/home2/mario/.android/avd/and4.1.avd/cache.img
disk.cachePartition.size = 66m
hw.lcd.width = 480
hw.lcd.height = 800
hw.lcd.depth = 16
hw.lcd.density = 240
hw.lcd.backlight = true
hw.gpu.enabled = true
hw.gpu.mode = mesa
hw.gpu.blacklisted = no
hw.initialOrientation = Portrait
hw.camera.back = none
hw.camera.front = emulated
vm.heapSize = 256
hw.sensors.light = true
hw.sensors.pressure = true
hw.sensors.humidity = true
hw.sensors.proximity = true
hw.sensors.magnetic_field = true
hw.sensors.orientation = false
hw.sensors.temperature = true
hw.useext4 = true
kernel.path = /usr/local/android-sdk/system-images/android-16/google_apis/x86//kernel-ranchu
kernel.newDeviceNaming = yes
kernel.supportsYaffs2 = yes
disk.ramdisk.path = /usr/local/android-sdk/system-images/android-16/google_apis/x86//ramdisk.img
disk.systemPartition.initPath = /usr/local/android-sdk/system-images/android-16/google_apis/x86//system.img
disk.systemPartition.size = 550m
disk.dataPartition.path = /data1/home2/mario/.android/avd/and4.1.avd/userdata-qemu.img
disk.dataPartition.size = 2g
avd.name = and4.1
.
QEMU options list:
emulator: argv[00] = "/data1/usr/local/android-sdk/emulator/qemu/linux-x86_64/qemu-system-i386"
emulator: argv[01] = "-dns-server"
emulator: argv[02] = "127.0.0.1"
emulator: argv[03] = "-serial"
emulator: argv[04] = "null"
emulator: argv[05] = "-cpu"
emulator: argv[06] = "android32"
emulator: argv[07] = "-enable-kvm"
emulator: argv[08] = "-m"
emulator: argv[09] = "1024"
emulator: argv[10] = "-lcd-density"
emulator: argv[11] = "240"
emulator: argv[12] = "-kernel"
emulator: argv[13] = "/usr/local/android-sdk/system-images/android-16/google_apis/x86//kernel-ranchu"
emulator: argv[14] = "-initrd"
emulator: argv[15] = "/usr/local/android-sdk/system-images/android-16/google_apis/x86//ramdisk.img"
emulator: argv[16] = "-object"
emulator: argv[17] = "iothread,id=disk-iothread"
emulator: argv[18] = "-drive"
emulator: argv[19] = "if=none,overlap-check=none,cache=unsafe,index=0,id=system,file=/data1/home2/mario/.android/avd/and4.1.avd/system.img.qcow2,read-only"
emulator: argv[20] = "-device"
emulator: argv[21] = "virtio-blk-pci,drive=system,iothread=disk-iothread,modern-pio-notify"
emulator: argv[22] = "-drive"
emulator: argv[23] = "if=none,overlap-check=none,cache=unsafe,index=1,id=cache,file=/data1/home2/mario/.android/avd/and4.1.avd/cache.img.qcow2,l2-cache-size=1048576"
emulator: argv[24] = "-device"
emulator: argv[25] = "virtio-blk-pci,drive=cache,iothread=disk-iothread,modern-pio-notify"
emulator: argv[26] = "-drive"
emulator: argv[27] = "if=none,overlap-check=none,cache=unsafe,index=2,id=userdata,file=/data1/home2/mario/.android/avd/and4.1.avd/userdata-qemu.img.qcow2,l2-cache-size=1048576"
emulator: argv[28] = "-device"
emulator: argv[29] = "virtio-blk-pci,drive=userdata,iothread=disk-iothread,modern-pio-notify"
emulator: argv[30] = "-drive"
emulator: argv[31] = "if=none,overlap-check=none,cache=unsafe,index=3,id=sdcard,file=/data1/home2/mario/.android/avd/and4.1.avd/sdcard.img.qcow2,l2-cache-size=1048576"
emulator: argv[32] = "-device"
emulator: argv[33] = "virtio-blk-pci,drive=sdcard,iothread=disk-iothread,modern-pio-notify"
emulator: argv[34] = "-netdev"
emulator: argv[35] = "user,id=mynet"
emulator: argv[36] = "-device"
emulator: argv[37] = "virtio-net-pci,netdev=mynet"
emulator: argv[38] = "-netdev"
emulator: argv[39] = "user,id=mynet2,net=10.0.3.0/24"
emulator: argv[40] = "-device"
emulator: argv[41] = "virtio-net-pci,netdev=mynet2"
emulator: argv[42] = "-show-cursor"
emulator: argv[43] = "-L"
emulator: argv[44] = "/data1/usr/local/android-sdk/emulator/lib/pc-bios"
emulator: argv[45] = "-soundhw"
emulator: argv[46] = "hda"
emulator: argv[47] = "-vga"
emulator: argv[48] = "none"
emulator: argv[49] = "-append"
emulator: argv[50] = "qemu=1 androidboot.hardware=ranchu clocksource=pit android.qemud=1 console=0 console=0 android.checkjni=1 qemu.gles=1"
emulator: argv[51] = "-android-hw"
emulator: argv[52] = "/data1/home2/mario/.android/avd/and4.1.avd/hardware-qemu.ini"
Concatenated QEMU options:
/data1/usr/local/android-sdk/emulator/qemu/linux-x86_64/qemu-system-i386 -dns-server 127.0.0.1 -serial null -cpu android32 -enable-kvm -m 1024 -lcd-density 240 -kernel /usr/local/android-sdk/system-images/android-16/google_apis/x86//kernel-ranchu -initrd /usr/local/android-sdk/system-images/android-16/google_apis/x86//ramdisk.img -object iothread,id=disk-iothread -drive if=none,overlap-check=none,cache=unsafe,index=0,id=system,file=/data1/home2/mario/.android/avd/and4.1.avd/system.img.qcow2,read-only -device virtio-blk-pci,drive=system,iothread=disk-iothread,modern-pio-notify -drive if=none,overlap-check=none,cache=unsafe,index=1,id=cache,file=/data1/home2/mario/.android/avd/and4.1.avd/cache.img.qcow2,l2-cache-size=1048576 -device virtio-blk-pci,drive=cache,iothread=disk-iothread,modern-pio-notify -drive if=none,overlap-check=none,cache=unsafe,index=2,id=userdata,file=/data1/home2/mario/.android/avd/and4.1.avd/userdata-qemu.img.qcow2,l2-cache-size=1048576 -device virtio-blk-pci,drive=userdata,iothread=disk-iothread,modern-pio-notify -drive if=none,overlap-check=none,cache=unsafe,index=3,id=sdcard,file=/data1/home2/mario/.android/avd/and4.1.avd/sdcard.img.qcow2,l2-cache-size=1048576 -device virtio-blk-pci,drive=sdcard,iothread=disk-iothread,modern-pio-notify -netdev user,id=mynet -device virtio-net-pci,netdev=mynet -netdev user,id=mynet2,net=10.0.3.0/24 -device virtio-net-pci,netdev=mynet2 -show-cursor -L /data1/usr/local/android-sdk/emulator/lib/pc-bios -soundhw hda -vga none -append 'qemu=1 androidboot.hardware=ranchu clocksource=pit android.qemud=1 console=0 console=0 android.checkjni=1 qemu.gles=1' -android-hw /data1/home2/mario/.android/avd/and4.1.avd/hardware-qemu.ini
emulator: Starting QEMU main loop
emulator: registered 'boot-properties' qemud service
emulator: Adding boot property: 'qemu.sf.fake_camera' = 'front'
emulator: Initializing hardware OpenGLES emulation support
emulator: Adding boot property: 'ro.opengles.version' = '131072'
emulator: Adding boot property: 'dalvik.vm.heapsize' = '256m'
emulator: Adding boot property: 'qemu.hw.mainkeys' = '1'
emulator: Adding boot property: 'qemu.sf.lcd_density' = '240'
emulator: goldfish_events.have-dpad: false
emulator: goldfish_events.have-trackball: true
emulator: goldfish_events.have-camera: true
emulator: goldfish_events.have-keyboard: true
emulator: goldfish_events.have-lidswitch: false
emulator: goldfish_events.have-touch: false
emulator: goldfish_events.have-multitouch: true
emulator: control console listening on port 5554, ADB on port 5555
Not using any http proxy
emulator: android_hw_fingerprint_init: fingerprint qemud listen service initialized

emulator: OpenGL Vendor=[Google (Intel Open Source Technology Center)]
emulator: OpenGL Renderer=[Android Emulator OpenGL ES Translator (Mesa DRI Mobile Intel® GM45 Express Chipset )]
emulator: OpenGL Version=[OpenGL ES 2.0 (2.1 Mesa 10.1.3)]
emulator: onGuestSendCommand: [0x7f72fc224f20] Adb connected, start proxing data

Any clues would be much appreciated as this has become a real show stopper.

回答1:

I guess chief bleeding forehead can answer his own question now.

Downgrading the emulator does fix the problem. Not sure if it's the answer, but it'll have to do until someone supplies an alternative.

I found no older versions of the emulator because it was moved out of the sdk-tools package. Since i already downgraded sdk-tools to 25.2.5, i simply needed to delete the emulator package. Since the Android-Studio update i've been manually starting the emulator like this:

LD_LIBRARY_PATH=/usr/local/android-sdk/tools/lib64/qt/lib:/usr/local/android-sdk/tools/lib64/libstdc++:/usr/local/android-sdk/tools/lib64:/usr/local/android-studio/bin: /usr/local/android-sdk/tools/qemu/linux-x86_64/qemu-system-i386 -netdelay none -netspeed full -avd and4.1

Where and4.1 was my kitkat image.

The LD_LIBRARY_PATH prevents the following error

/usr/local/android-sdk/tools/qemu/linux-x86_64/qemu-system-i386: error while loading shared libraries: libQt5Widgets.so.5: cannot open shared object file: No such file or directory

Adding this in case some other poor soul wastes time on this.

BTW. Before the downgrade, the path was:

/usr/local/android-sdk/emulator/qemu/linux-x86_64/qemu-system-i386

instead of:

/usr/local/android-sdk/tools/qemu/linux-x86_64/qemu-system-i386