2012-12-21 58 views
19

在命令行中运行它导致分段错误:Android模拟器分段故障

$ emulator -avd nexus_s 
Segmentation fault (core dumped) 

然而,直接运行模拟器臂如下,做工精细。

$ emulator-arm -avd nexus_s 

我怀疑它试图运行模拟器的mips或x86版本。 有没有办法配置模拟器启动哪个可执行文件?

这一切都更新到Android SDK中17

添加-verbose标志后开始给出了下面的输出(我不认为任何补充信息):

$ emulator -verbose -avd nexus_s 
emulator: found SDK root at /opt/sdk 
emulator: Android virtual device file at: /home/grebulon/.android/avd/nexus_s.ini 
emulator: virtual device content at /home/grebulon/.android/avd/nexus_s.avd 
emulator: virtual device config file: /home/grebulon/.android/avd/nexus_s.avd/config.ini 
emulator: using core hw config path: /home/grebulon/.android/avd/nexus_s.avd/hardware-qemu.ini 
emulator: Found AVD target API level: 17 
emulator: 'magic' skin format detected: 480x800 
emulator: autoconfig: -skin 480x800 
emulator: autoconfig: -skindir (null) 
emulator: keyset loaded from: /home/grebulon/.android/default.keyset 
emulator: found magic skin width=480 height=800 bpp=16 

emulator: autoconfig: -kernel /opt/sdk/system-images/android-17/armeabi-v7a//kernel-qemu 
emulator: autoconfig: -ramdisk /opt/sdk/add-ons/addon-google_apis-google-17/images/armeabi-v7a//ramdisk.img 
emulator: Using initial system image: /opt/sdk/add-ons/addon-google_apis-google-17/images/armeabi-v7a//system.img 
emulator: autoconfig: -data /home/grebulon/.android/avd/nexus_s.avd/userdata-qemu.img 
emulator: autoconfig: -initdata /home/grebulon/.android/avd/nexus_s.avd/userdata.img 
emulator: autoconfig: -cache /home/grebulon/.android/avd/nexus_s.avd/cache.img 
emulator: Physical RAM size: 343MB 

Content of hardware configuration file: 
    hw.cpu.arch = arm 
    hw.cpu.model = cortex-a8 
    hw.ramSize = 343 
    hw.screen = touch 
    hw.mainKeys = yes 
    hw.trackBall = no 
    hw.keyboard = no 
    hw.keyboard.lid = no 
    hw.keyboard.charmap = qwerty2 
    hw.dPad = no 
    hw.gsmModem = yes 
    hw.gps = yes 
    hw.battery = no 
    hw.accelerometer = yes 
    hw.audioInput = yes 
    hw.audioOutput = yes 
    hw.sdCard = yes 
    disk.cachePartition = yes 
    disk.cachePartition.path = /home/grebulon/.android/avd/nexus_s.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 = yes 
    hw.gpu.enabled = yes 
    hw.camera.back = none 
    hw.camera.front = none 
    vm.heapSize = 32 
    hw.sensors.proximity = yes 
    hw.sensors.magnetic_field = yes 
    hw.sensors.orientation = yes 
    hw.sensors.temperature = yes 
    kernel.path = /opt/sdk/system-images/android-17/armeabi-v7a//kernel-qemu 
    kernel.parameters = android.checkjni=1 
    disk.ramdisk.path = /opt/sdk/add-ons/addon-google_apis-google-17/images/armeabi-v7a//ramdisk.img 
    disk.systemPartition.initPath = /opt/sdk/add-ons/addon-google_apis-google-17/images/armeabi-v7a//system.img 
    disk.systemPartition.size = 200m 
    disk.dataPartition.path = /home/grebulon/.android/avd/nexus_s.avd/userdata-qemu.img 
    disk.dataPartition.size = 209m 
    avd.name = nexus_s 
. 
QEMU options list: 
emulator: argv[00] = "/opt/sdk/tools/emulator64-arm" 
emulator: argv[01] = "-android-hw" 
emulator: argv[02] = "/home/grebulon/.android/avd/nexus_s.avd/hardware-qemu.ini" 
Concatenated QEMU options: 
/opt/sdk/tools/emulator64-arm -android-hw /home/grebulon/.android/avd/nexus_s.avd /hardware-qemu.ini 
emulator: registered 'boot-properties' qemud service 
emulator: nand_add_dev: system,size=0xc800000,initfile=/opt/sdk/add-ons/addon-google_apis-google-17/images/armeabi-v7a//system.img 
emulator: mapping 'system' NAND image to /tmp/android-grebulon/emulator-RSuUtb 
emulator: rounding devsize up to a full eraseunit, now c810000 

emulator: nand_add_dev: userdata,size=0xd100000,file=/home/grebulon/.android/avd/nexus_s.avd/userdata-qemu.img 
emulator: rounding devsize up to a full eraseunit, now d116000 

emulator: registered 'boot-properties' qemud service 
emulator: Adding boot property: 'dalvik.vm.heapsize' = '32m' 
emulator: Adding boot property: 'qemu.sf.lcd_density' = '240' 
emulator: Adding boot property: 'qemu.hw.mainkeys' = '1' 
emulator: Adding boot property: 'qemu.sf.fake_camera' = 'none' 
emulator: nand_add_dev: cache,size=0x4200000,file=/home/grebulon/.android/avd/nexus_s.avd/cache.img 
emulator: Initializing hardware OpenGLES emulation support 
Segmentation fault (core dumped) 
+1

OS X? Linux呢?一些奇怪的并行宇宙版本的Windows,他们也采用'$'命令提示符? – CommonsWare

+0

Linux,Ubuntu 12.04具体。 – grebulon

+3

尝试在'emulator'命令行中添加'-v'并查看它的转储位置。我有'对R21的Android工具试图加载在Ubuntu 11.10 OpenGL的驱动程序时崩溃emulator'一个问题 - 有关于它的b.android.com一个问题,那里的解决方法是重命名OpenGL驱动程序因此Android能找不到它。 – CommonsWare

回答

24

我终于找到了解决方案遵循CommonsWare的提示。 重命名libOpenglRender.so使问题消失。

mv tools/lib/libOpenglRender.so tools/lib/libOpenglRender.so.xxx 
+4

这确实使模拟器显示出来。但它输出以下错误消息:仿真器:错误:无法加载OpenGLES仿真库:lib64OpenglRender.so:无法打开共享对象文件:没有这样的文件或目录 模拟器:警告:无法初始化OpenglES仿真,使用软件渲染器。 –

+0

非常感谢!经过一个多星期的尝试,在这里和那里将所有lib *。*文件重命名为/tools/lib /到lib *。*。xxx使模拟器启动。我是正确的,所有的仿真器崩溃的问题涉及到OpenGLES:https://code.google.com/p/android/issues/detail?id=33336&https://code.google.com/p/android/问题/细节?ID = 28601 – warmth

+0

对于64位重命名lib64OpenglRender.so到lib64OpenglRender.so.xxx文件。 –

1

在我的Ubuntu 12.04系统,我通过确保“使用主机GPU”的AVD配置并没有打开解决了这个问题。

1

类型命令

$仿真臂@nexus_s

希望这有助于:-)

0

我对Debian的喘息了同样的问题。该grebulon的答案样-的工作对我来说,但是模拟器是sloooooow所以我开始着手解决这个问题的正确方法(TM)。

在这种情况下Segmentation fault可能指示OpenGL的问题。 (注意日志的最后一行是“模拟器:初始化硬件OpenGLES仿真支持”)

在我的情况下,通过/var/log/Xorg.0.log搜索“GL”表现出一定的NVidia GLX驱动程序(哪去了数字天堂的老显卡)。鉴于我的AMD Radeon我在它卸载每个包“NVIDIA”(列表:apt-get search nvidia | grep ^i),并安装:

# apt-get install libgl1-fglrx-glx 

后重启仿真器抱怨缺少libOpenglRender.solibGL.so,这是我解决这样的:

# echo "/opt/adt/sdk/tools/lib" > /etc/ld.so.conf.d/android_stuff.conf 
# ldconfig 
# cd /opt/adt/sdk/tools/lib 
# ln -s /usr/lib/x86_64-linux-gnu/libGL.so.1 libGL.so 

请注意,我的情况大概是唯一的(我来自Nvidia去AMD的问题开始),但问题的根源可能是相似(OpenGL的)。我希望它能帮助别人。

UPDATE:仍然不能正常工作,它看起来像我的驱动程序不支持在OpenGL 16位颜色...将进一步调查。