-
Notifications
You must be signed in to change notification settings - Fork 899
/
tryLaunchAppOnDevice.ts
49 lines (44 loc) · 1.26 KB
/
tryLaunchAppOnDevice.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
*/
import execa from 'execa';
import {Flags} from '.';
import {logger, CLIError} from '@react-native-community/cli-tools';
function tryLaunchAppOnDevice(
device: string | void,
packageName: string,
adbPath: string,
args: Flags,
) {
const {appId, appIdSuffix} = args;
const packageNameWithSuffix = [appId || packageName, appIdSuffix]
.filter(Boolean)
.join('.');
const activityToLaunch = args.mainActivity.includes('.')
? args.mainActivity
: [packageName, args.mainActivity].filter(Boolean).join('.');
try {
const adbArgs = [
'shell',
'am',
'start',
'-n',
`${packageNameWithSuffix}/${activityToLaunch}`,
];
if (device) {
adbArgs.unshift('-s', device);
logger.info(`Starting the app on "${device}"...`);
} else {
logger.info('Starting the app...');
}
logger.debug(`Running command "${adbPath} ${adbArgs.join(' ')}"`);
execa.sync(adbPath, adbArgs, {stdio: 'inherit'});
} catch (error) {
throw new CLIError('Failed to start the app.', error);
}
}
export default tryLaunchAppOnDevice;