From d9a9439dfa6abaeb916b68d9e8eee0463ced0f63 Mon Sep 17 00:00:00 2001 From: John Knox Date: Tue, 13 Nov 2018 11:15:34 -0800 Subject: [PATCH] Fix emulator launching bug Summary: I was getting the following error when trying to launch an emulator: `PANIC: Missing emulator engine program for 'x86' CPU.` It seems like emulator/emulator is more reliable than tools/emulator: https://stackoverflow.com/questions/26483370/android-emulator-error-message-panic-missing-emulator-engine-program-for-x86 So put them both on the path in that order. Reviewed By: passy Differential Revision: D13040325 fbshipit-source-id: 11e8b24b2a99e02955128d5fb7c17764b98388fa --- src/chrome/DevicesButton.js | 14 ++++++-------- src/dispatcher/androidDevice.js | 2 +- static/index.js | 6 ++++++ 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/chrome/DevicesButton.js b/src/chrome/DevicesButton.js index 8ee411035b8..79e3c9bfbeb 100644 --- a/src/chrome/DevicesButton.js +++ b/src/chrome/DevicesButton.js @@ -21,14 +21,12 @@ type Props = { class DevicesButton extends Component { launchEmulator = (name: string) => { - const child = spawn( - `${process.env.ANDROID_HOME || ''}/tools/emulator`, - [`@${name}`], - { - detached: true, - stdio: 'ignore', - }, - ); + const child = spawn('emulator', [`@${name}`], { + detached: true, + }); + child.stderr.on('data', data => { + console.error(`Android emulator error: ${data}`); + }); child.on('error', console.error); this.props.preferDevice(name); }; diff --git a/src/dispatcher/androidDevice.js b/src/dispatcher/androidDevice.js index 199bd5af0f1..96cd22d06fa 100644 --- a/src/dispatcher/androidDevice.js +++ b/src/dispatcher/androidDevice.js @@ -59,7 +59,7 @@ export default (store: Store, logger: Logger) => { const watchAndroidDevices = () => { // get emulators child_process.exec( - '$ANDROID_HOME/tools/emulator -list-avds', + 'emulator -list-avds', (error: ?Error, data: ?string) => { if (error != null || data == null) { console.error(error || 'Failed to list AVDs'); diff --git a/static/index.js b/static/index.js index 24bac57781f..fbf69943133 100644 --- a/static/index.js +++ b/static/index.js @@ -23,6 +23,12 @@ if (!process.env.ANDROID_HOME) { process.env.ANDROID_HOME = '/opt/android_sdk'; } +// emulator/emulator is more reliable than tools/emulator, so prefer it if +// it exists +process.env.PATH = `${process.env.ANDROID_HOME}/emulator:${ + process.env.ANDROID_HOME +}/tools:${process.env.PATH}`; + if (process.platform === 'darwin') { // If we are running on macOS and the app is called Flipper, we add a comment // with the old name, to make it findable via Spotlight using its old name.