はじめに

Cordova で Android アプリエミュレータ起動時に PANIC: Missing emulator engine program for 'x86' CPU. となる場合の対処方法。

1
2
3
4
$ cordova emulate android
...
Waiting for emulator to start...
PANIC: Missing emulator engine program for 'x86' CPU.

TL;DR

  • cordova-android が未サポートの API level を指定したエミュレータを起動しようとしていることが原因
  • Android Studio で cordova-android がサポートしている API level のエミュレータを作成
    • 2020/06/04 時点では API level 27(Android 8.1) がサポート範囲内での最新
  • デバイス指定でエミュレータ起動: cordova emulate android --target="TARGET DEVICE"

目次

  1. はじめに
  2. TL;DR
  3. 環境・条件
  4. 詳細
    1. 原因
    2. 対処方法
  5. まとめ
  6. その他・メモ
  7. 参考文献

環境・条件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.15.5
BuildVersion: 19F101

$ node -v
v12.7.0

$ npm -v
6.14.5

$ cordova -v
9.0.0 (cordova-lib@9.0.1)

$ cordova platforms
Installed platforms:
android 8.1.0

詳細

原因

macでcordova環境を作ろうとしてつまづいたところ - アヤポコの雑記*2人目育児中 にも書かれているが、cordova-android が未サポートの API level を指定していることが原因。

結局古いAPIのエミュレータを入れたら正しく起動できた。cordovaが最新のバージョンのAPIには対応していなかったらしい。
macでcordova環境を作ろうとしてつまづいたところ - アヤポコの雑記*2人目育児中 より

下記を見る限り、現時点(2020/06/04)では API level 29 (Android 10) には非対応(?)っぽい?
(ちゃんと読んでないけど、Issue の Open が 2019/09/22 で、cordova-android の最新リリースが 2019/09/11 の v8.1.0 なので)

Support API level 29 (Android 10) · Issue #830 · apache/cordova-android

対処方法

ということで、cordova-android がサポートしている API level のデバイスを Android Studio で追加するとエラーは解決する。

なお、自分の環境では API level 27(Android 8.1)が起動できる最新バージョンだった。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ cordova run android --list
Available android virtual devices:
Pixel_3a_API_27
Pixel_3a_API_28
Pixel_3a_API_29

$ cordova emulate android --target="Pixel_3a_API_27"
...
INSTALL SUCCESS
LAUNCH SUCCESS

# Android 9(API level 28) は NG
$ cordova emulate android --target="Pixel_3a_API_28"
...
PANIC: Missing emulator engine program for 'x86' CPU.

# Android 10(API level 29) は NG
$ cordova emulate android --target="Pixel_3a_API_29"
...
PANIC: Missing emulator engine program for 'x86' CPU.

しかし、やりたかったのは Android 10 でのダークテーマ検証だったので、そういうことじゃないんだよな感。。。

まとめ

  • cordova-android が未サポートの API level を指定したエミュレータを起動しようとしていることが原因
  • Android Studio で cordova-android がサポートしている API level のエミュレータを作成
    • 2020/06/04 時点では API level 27(Android 8.1) がサポート範囲内での最新
  • デバイス指定でエミュレータ起動: cordova emulate android --target="TARGET DEVICE"

その他・メモ

人によっては環境変数の問題かもなので、以下が参考になるかも。

参考文献

関連記事