Move adb client creation into it's own file
Summary: Allows the created client to be reused. Reviewed By: passy Differential Revision: D14241449 fbshipit-source-id: 6bbb64eeb708dce9c24e4581e8480d19af998e47
This commit is contained in:
committed by
Facebook Github Bot
parent
edbe2555fc
commit
99bb43fe32
@@ -7,15 +7,11 @@
|
||||
|
||||
import AndroidDevice from '../devices/AndroidDevice';
|
||||
import child_process from 'child_process';
|
||||
import promiseRetry from 'promise-retry';
|
||||
import {promisify} from 'util';
|
||||
import type {Store} from '../reducers/index.js';
|
||||
import type BaseDevice from '../devices/BaseDevice';
|
||||
import type {Logger} from '../fb-interfaces/Logger.js';
|
||||
import {registerDeviceCallbackOnPlugins} from '../utils/onRegisterDevice.js';
|
||||
import {reportPlatformFailures} from '../utils/metrics';
|
||||
import adbConfig from '../utils/adbConfig';
|
||||
const adb = require('adbkit-fb');
|
||||
import {getAdbClient} from '../utils/adbClient';
|
||||
|
||||
function createDevice(
|
||||
adbClient: any,
|
||||
@@ -64,57 +60,6 @@ function getRunningEmulatorName(id: string): Promise<?string> {
|
||||
}
|
||||
|
||||
export default (store: Store, logger: Logger) => {
|
||||
/* Adbkit will attempt to start the adb server if it's not already running,
|
||||
however, it sometimes fails with ENOENT errors. So instead, we start it
|
||||
manually before requesting a client. */
|
||||
function createClient() {
|
||||
const adbPath = process.env.ANDROID_HOME
|
||||
? `${process.env.ANDROID_HOME}/platform-tools/adb`
|
||||
: 'adb';
|
||||
return reportPlatformFailures(
|
||||
promisify(child_process.exec)(`${adbPath} start-server`)
|
||||
.then(result => {
|
||||
if (result.error) {
|
||||
throw new Error(
|
||||
`Failed to start adb server: ${result.stderr.toString()}`,
|
||||
);
|
||||
}
|
||||
})
|
||||
.then(() => adb.createClient(adbConfig())),
|
||||
'createADBClient.shell',
|
||||
).catch(err => {
|
||||
console.error(
|
||||
'Failed to create adb client using shell adb command. Trying with adbkit',
|
||||
);
|
||||
|
||||
/* In the event that starting adb with the above method fails, fallback
|
||||
to using adbkit, though its known to be unreliable. */
|
||||
const unsafeClient = adb.createClient(adbConfig());
|
||||
return reportPlatformFailures(
|
||||
promiseRetry(
|
||||
(retry, number) => {
|
||||
return unsafeClient
|
||||
.listDevices()
|
||||
.then(() => {
|
||||
return unsafeClient;
|
||||
})
|
||||
.catch(e => {
|
||||
console.warn(
|
||||
`Failed to start adb client. Retrying. ${e.message}`,
|
||||
);
|
||||
retry(e);
|
||||
});
|
||||
},
|
||||
{
|
||||
minTimeout: 200,
|
||||
retries: 5,
|
||||
},
|
||||
),
|
||||
'createADBClient.adbkit',
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
const watchAndroidDevices = () => {
|
||||
// get emulators
|
||||
child_process.exec(
|
||||
@@ -132,7 +77,7 @@ export default (store: Store, logger: Logger) => {
|
||||
},
|
||||
);
|
||||
|
||||
reportPlatformFailures(createClient(), 'createADBClient')
|
||||
getAdbClient()
|
||||
.then(client => {
|
||||
client
|
||||
.trackDevices()
|
||||
|
||||
Reference in New Issue
Block a user