从命令行运行它会导致分段错误:
$ 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)
答案 0 :(得分:24)
我在遵循CommonsWare的提示之后终于找到了解决方案。 重命名libOpenglRender.so使问题消失。
mv tools/lib/libOpenglRender.so tools/lib/libOpenglRender.so.xxx
答案 1 :(得分:3)
在我的Ubuntu 12.04系统上,我通过确保AVD配置中没有打开“使用主机GPU”来解决了这个问题。
答案 2 :(得分:2)
粘贴到〜/ .android / avd / .avd / config.ini
hw.gpu.mode = swiftshader_indirect
我以这种方式解决了这个问题。
答案 3 :(得分:1)
输入命令
$ emulator-arm @nexus_s
希望这会有所帮助: - )
答案 4 :(得分:0)
我在Debian Wheezy遇到了同样的问题。 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.so
和libGL.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)。我希望它有所帮助。
更新:仍然无效,看起来我的驱动程序不支持OpenGL中的16位颜色...将进一步调查。
答案 5 :(得分:0)
如果您在这里找不到答案,请订阅:
在那里,您将收到有关此问题的更新,并找到一些解决方法(例如重命名lib *。*文件)。
答案 6 :(得分:0)
通过android studio擦除数据和冷启动设备在ubuntu 16.04中解决了此问题
答案 7 :(得分:0)
我在 Ubuntu 20.04 上遇到了同样的问题。重命名 libOpenglRender.so 对我有用,但模拟器需要永远初始化。此外,我不得不重新安装 Ubuntu(出于不同的原因),然后在打开模拟器时开始出现 emulator: ERROR: Could not load OpenGLES emulation library
错误。
在搜索了更多关于这些问题的信息后,我发现问题出在视频驱动程序上。我使用的是 Nouveau 的,在更改为 Nvidia 驱动程序后,我不再需要重命名 libOpenglRender.so,现在模拟器初始化非常快,没有显示任何错误消息。