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
This commit is contained in:
John Knox
2018-11-13 11:15:34 -08:00
committed by Facebook Github Bot
parent 57235131fc
commit d9a9439dfa
3 changed files with 13 additions and 9 deletions

View File

@@ -21,14 +21,12 @@ type Props = {
class DevicesButton extends Component<Props> { class DevicesButton extends Component<Props> {
launchEmulator = (name: string) => { launchEmulator = (name: string) => {
const child = spawn( const child = spawn('emulator', [`@${name}`], {
`${process.env.ANDROID_HOME || ''}/tools/emulator`, detached: true,
[`@${name}`], });
{ child.stderr.on('data', data => {
detached: true, console.error(`Android emulator error: ${data}`);
stdio: 'ignore', });
},
);
child.on('error', console.error); child.on('error', console.error);
this.props.preferDevice(name); this.props.preferDevice(name);
}; };

View File

@@ -59,7 +59,7 @@ export default (store: Store, logger: Logger) => {
const watchAndroidDevices = () => { const watchAndroidDevices = () => {
// get emulators // get emulators
child_process.exec( child_process.exec(
'$ANDROID_HOME/tools/emulator -list-avds', 'emulator -list-avds',
(error: ?Error, data: ?string) => { (error: ?Error, data: ?string) => {
if (error != null || data == null) { if (error != null || data == null) {
console.error(error || 'Failed to list AVDs'); console.error(error || 'Failed to list AVDs');

View File

@@ -23,6 +23,12 @@ if (!process.env.ANDROID_HOME) {
process.env.ANDROID_HOME = '/opt/android_sdk'; 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 (process.platform === 'darwin') {
// If we are running on macOS and the app is called Flipper, we add a comment // 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. // with the old name, to make it findable via Spotlight using its old name.