2019/04/03

コマンドラインから Android emulator を起動しようとしたら "Missing emulator engine ..." が出てしまった場合の対処方法

emulator 28.0.25.0 (build_id 5395263) on Ubuntu 18.04


久しぶりにコマンドラインから Emulator を起動してみると以下のようなエラーが。(Android Studio から起動した場合は問題なく起動しています)

```console
`gutter: false;
$ emulator -avd Pixel_2_API_28
PANIC: Missing emulator engine program for 'x86' CPU.
```

調べてみると、2017年3月の v25.3.0 以降、emulator コマンドのパスが変わったらしい2年もコマンドラインから Emulator 起動してなかったのか
2018/02/14

Android の emulator で物理キーボード入力が出来るようにする

以前はデフォルトで使えたと思うのだけど、いつの間にかデフォルトオフになっていたのでメモ。

2018/02/07

Android Emulator で公式に Google Play が使えるようになっていた

いつの間にか2017年4月なので、もう1年近くも前だ…、公式に Google Play がインストールされた Emulator が出ていたようです。

> 参考
>
> [Android Studio Release Updates: Google Play System Images: Android Studio 2.3.2 and Emulator 26.0.2 are now available in the Beta Channel](https://androidstudio.googleblog.com/2017/04/google-play-system-images-android.html)

2018/01/25

Android Emulator が黒画面でフリーズ

久しぶりに Android の Emulator を起動したら起動はするものの、黒い画面のままフリーズし、そのうち落ちてしまうようになってしまいました。

2016/10/30

Android エミュレーターの rootfs に永続的な編集を加える方法

[Android エミュレーターで Read-only file system に書き込めるようにする](http://kokufu.blogspot.jp/2016/10/android-read-only-file-system.html) で rootfs は揮発性だと書きました。
つまり、再起動すると加えた変更が元に戻ってしまうのです。

これは、rootfs が [Initramfs](https://ja.wikipedia.org/w/index.php?title=Initramfs&redirect=no) という RAM 上に展開されるファイルシステムのためです。
RAM 上に展開されたファイルシステムに変更を加えても、その実体には変更が反映されないので
再起動後には消えてしまうというわけです。

この Initramfs、実体は [cpio](https://ja.wikipedia.org/wiki/Cpio) アーカイブを [gzip](https://ja.wikipedia.org/wiki/Gzip) 圧縮したものなので、以下のようにして永続的に変更を反映させることができます。

> 参考
>
> [第384回 Initramfsのしくみ:Ubuntu Weekly Recipe|gihyo.jp … 技術評論社](http://gihyo.jp/admin/serial/01/ubuntu-recipe/0384)


### ramdisk.img の場所を確認
`~/.android/avd/AVD_NAME/hardware-qemu.ini` の `disk.ramdisk.path` が rootfs の実体となるファイルを示しているので確認します。

```
disk.ramdisk.path = ANDROID-SDK_DIR/system-images/android-21/default/x86_64//ramdisk.img
```


### ramdisk.img の展開
空のディレクトリ名前は何でも良いですを作り、先ほど確認した `ramdisk.img` を展開します。

```console
`gutter: false;
$ mkdir ramdisk
$ cd ramdisk
$ gunzip -c ANDROID-SDK_DIR/system-images/android-21/default/x86_64/ramdisk.img | cpio -i
```

`ramdisk` dir 以下に ramdisk.img の中身が展開されているはずです。


### 編集
ファイルの追加や編集を行います。

起動に使用する設定ファイルやスクリプトを書き換えると、正常に起動しなくなる可能性があるので注意しましょう。


### 再アーカイブ
`ramdisk` ディレクトリにいることを確認し、以下のように圧縮します。

```console
`gutter: false;
$ pwd
~/ramdisk
$ find . | cpio -R 0:0 -o -H newc | gzip > ../my_ramdisk.img
```

### エミュレーターに登録
以下のようにして、`ramdisk.img` を入れ替えれば、エミュレーターからマウントされるようになります。

```console
`gutter: false;
$ cd ANDROID-SDK_DIR/system-images/android-21/default/x86_64
$ mv ramdisk.img ramdisk.img.bak
$ cp ~/my_ramdisk.img ramdisk.img
```

本来ならば、元の `ramdisk.img` を書き換えるのは避けたいところです。
しかし、`~/.android/avd/AVD_NAME/hardware-qemu.ini` を編集してもエミュレーターの起動時にデフォルト設定に書きなおされてしまいますGUI の AVD Manager が原因かと疑ったのですが、コマンドラインから起動しても同じでした。
そのため、今回は `ramdisk.img` を直接変更する方法をとりました。

2016/10/29

Android エミュレーターで Read-only file system に書き込めるようにする

エミュレーター、もしくは root をとったデバイスでも、Read-only file system としてマウントされているディレクトリは、書き込み・編集をすることが出来ません。

しかし、以下のように書き込み権限をつけてリマウントすれば、編集可能になります。

### マウント状態の確認
`adb shell` でエミュレーターにログインし、以下のようにマウント状態を確認。
`ro` がついているのが Read-only file system です。

```console
`highlight: [3, 14]; gutter: false;
$ adb shell
# mount
rootfs / rootfs ro,relatime 0 0
tmpfs /dev tmpfs rw,nosuid,relatime,mode=755 0 0
devpts /dev/pts devpts rw,relatime,mode=600 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,relatime 0 0
debugfs /sys/kernel/debug debugfs rw,relatime 0 0
none /acct cgroup rw,relatime,cpuacct 0 0
none /sys/fs/cgroup tmpfs rw,relatime,mode=750,gid=1000 0 0
tmpfs /mnt/asec tmpfs rw,relatime,mode=755,gid=1000 0 0
tmpfs /mnt/obb tmpfs rw,relatime,mode=755,gid=1000 0 0
none /dev/cpuctl cgroup rw,relatime,cpu 0 0
/dev/block/vda /system ext4 ro,relatime,data=ordered 0 0
/dev/block/vdb /cache ext4 rw,nosuid,nodev,noatime,errors=panic,data=ordered 0 0
/dev/block/vdc /data ext4 rw,nosuid,nodev,noatime,errors=panic,data=ordered 0 0
/dev/block/vold/253:48 /mnt/media_rw/sdcard vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1023,gid=1023,fmask=0007,dmask=0007,allow_utime=0020,codepage=437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
/dev/block/vold/253:48 /mnt/secure/asec vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1023,gid=1023,fmask=0007,dmask=0007,allow_utime=0020,codepage=437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
/dev/fuse /storage/sdcard fuse rw,nosuid,nodev,relatime,user_id=1023,group_id=1023,default_permissions,allow_other 0 0
```

2015/09/20

AVD を立ち上げようとしたら libstdc++.so.6 が無いと言われた on Ubuntu 14.04

諸事情で Ubuntu 14.04 LTS (64bit) をクリーンインストールしました。

その後、Android Studio を立ち上げ、普通に使っていたのですが、AVD を起動しようとすると、以下のようなエラーが。

Cannot launch AVD in emulator.
error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory


確認してみるも、libstdc++6はちゃんとインストールされている様子。
これ、以前もハマったやつだ!
というわけで、32bit 系のライブラリを用意してやることで解決しました。
$ sudo apt-get install lib32stdc++6

ちょっと古い記事だと「ia32-libs をインストールせよ。」と書いてあるものもあるのですが、Ubuntu 13.10 からはライブラリが分割されたみたいです。
2012/12/29

Emulator を起動しようとしたら X Error of failed request

Android アプリを開発していて、いつものように Emulator を起動しようと思ったら、以下のようなエラーが出てしまいました。
Starting emulator for AVD 'Nexus7'
X Error of failed request: BadRequest (invalid request code or no such operation)
Major opcode of failed request: 139 (ATIFGLEXTENSION)
Minor opcode of failed request: 66()
Serial number of failed request: 13
Current serial number in output stream: 13
ちなみに、環境は以下のような感じ
  • Ubuntu 12.04 LTS
  • グラフィックボード GV-R455D3-512I
  • Android SDK 21
  • Eclipse 4.2 (Juno) SR1
  • ADT 21
で、探してみると以下にヒントがありました。
android - Error on starting emulator for avd after adt 20 install - Stack Overflow

どうも ADT の問題というより、グラフィックボードのドライバの問題の可能性が。
という訳で、ドライバを再インストールしてみました。

参考
穀風: Ubuntu 12.04 LTS に RADEON HD 4550 ドライバを入れたらデュアルディスプレイが出なくなった

すると、問題なく Emulator が起動するようになりました。

2012/03/04

タブレット用 AVD が起動しない

@ Windows 7 Professional

Android タブレットを持っていない私、タブレットの動作確認はエミュレータでやるしかないのです。
で、WXGA800 の仮想デバイスを作成しました。

スペックは以下のような感じ。
2012/01/17

emulator-arm.exe が起動しない

Android SDK を r16 にしました。で、Emulator を起動しようとすると、
問題が発生したため、emulator-arm.exe を終了します。ご不便をおかけして申し訳ありません。
とのメッセージが。


ネットを調べてみると、メモリが足りないとの情報が。
しかし、2GB近く物理メモリは空いている…