web-dev-qa-db-ja.com

Androidエミュレータセグメンテーションエラー

コマンドラインから実行すると、セグメンテーションエラーが発生しました。

$ emulator -avd nexus_s
Segmentation fault (core dumped)

ただし、次のように直接emulator-armを実行すると、正常に機能します。

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

CommonsWareのヒントに従って、ようやく解決策を見つけました。 libOpenglRender.soの名前を変更すると、問題は解消されました。

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

Ubuntu 12.04システムでは、AVD構成で[Use Host GPU]がオンになっていないことを確認することで、この問題を解決しました。

3
lilbyrdie

コマンドを入力

$ emulator-arm @nexus_s

お役に立てれば :-)

1
Arif Ahsan

ここで答えが見つからない場合は、購読する必要があります。

  1. 問題34233:エミュレータの開始により、r20へのアップグレード後にセグメンテーションエラーが発生します
  2. 問題55325:segfaultでエミュレータがクラッシュする
  3. 問題20952:起動時のエミュレータのsegfault(オーディオとは無関係)

そこで、この問題に関する更新を受け取り、いくつかの回避策(lib *。*ファイルの名前を変更するなど)を見つけます。

0
warmth

Android studioを介してデータとコールドブートデバイスをワイプすると、ubuntu 16.04でこの問題が解決されました

0
Mukundhan

Debian Wheezyでも同じ問題が発生しました。 grebulonの答えは私にはある程度うまくいきましたが、エミュレーターが遅いので、私はそれを修正することにしましたThe Right Way(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)。誰かのお役に立てば幸いです。

更新:それでも機能しません。私のドライバーはOpenGLの16ビットカラーをサポートしていないようです...さらに調査します。

0
johndodo