web-dev-qa-db-fra.com

Erreur de segmentation de l'émulateur Android

L'exécuter à partir de la ligne de commande a entraîné une erreur de segmentation:

$ emulator -avd nexus_s
Segmentation fault (core dumped)

Cependant, exécuter emulator-arm directement comme suit fonctionne correctement.

$ emulator-arm -avd nexus_s

Je soupçonne qu’il essaie d’exécuter la version mips ou x86 de l’émulateur. Y at-il un moyen de configurer l’émulateur avec lequel l’exécutable doit démarrer?

Tout cela a commencé après la mise à jour vers Android sdk 17.

L'ajout de l'indicateur -verbose donne la sortie suivante (qui, à mon avis, n'ajoute aucune information):

$ 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)
20
grebulon

J'ai finalement trouvé une solution après avoir suivi le conseil de CommonsWare. Le fait de renommer libOpenglRender a ainsi fait disparaître le problème.

mv tools/lib/libOpenglRender.so tools/lib/libOpenglRender.so.xxx
24
grebulon

Sur mon système Ubuntu 12.04, j'ai résolu ce problème en m'assurant que "Utiliser l'hôte GPU" n'était pas activé dans la configuration AVD. 

2
lilbyrdie

Commande de type

$ emulator-arm @nexus_s

J'espère que cela t'aides :-)

1
Arif Ahsan

Si vous ne trouvez pas la réponse ici, vous devez vous abonner à:

  1. Issue 34233: Le démarrage de l'émulateur provoque une erreur de segmentation après la mise à niveau vers r20
  2. Numéro 55325: Un émulateur plante avec une erreur de segmentation
  3. Issue 20952: Erreur de segmentation d'émulateur au démarrage (non liée à l'audio)

Là, vous recevrez des mises à jour sur ce problème et trouverez des solutions (comme renommer des fichiers lib *. *).

0
warmth

effacer les données et le périphérique de démarrage à froid via le studio Android a résolu ce problème dans Ubuntu 16.04

0
Mukundhan

J'ai eu le même problème sur Debian Wheezy. La réponse de grebulon a en quelque sorte fonctionné pour moi, mais l’émulateur étant très lent, j’ai donc décidé de le réparer, The Right Way (tm).

Dans ce cas, Segmentation fault indique probablement des problèmes avec OpenGL. (notez que la dernière ligne du journal est "émulateur: initialisation du support d'émulation OpenGLES matériel")

Dans mon cas, la recherche de "GL" à travers /var/log/Xorg.0.log a montré un pilote NVidia GLX (issu d'une ancienne carte vidéo passée au paradis numérique). Étant donné que je dispose d’AMD Radeon, j’ai désinstallé tous les paquets contenant «nvidia» (liste: apt-get search nvidia | grep ^i) et les ai installés:

# apt-get install libgl1-fglrx-glx

Après le redémarrage, l’émulateur s’est plaint de manquer de libOpenglRender.so et libGL.so, ce que j’ai résolu comme ceci:

# 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

Notez que ma situation est probablement unique (les problèmes ont commencé lorsque je suis passée de NVidia à AMD), mais la racine du problème est probablement similaire (OpenGL). J'espère que ça aide quelqu'un.

UPDATE: ne fonctionne toujours pas, il semble que mes pilotes ne prennent pas en charge les couleurs 16 bits dans OpenGL.

0
johndodo