UNPKG

@react-native-community/cli-platform-android

Version:

This package is part of the [React Native CLI](../../README.md). It contains commands for managing the Android part of React Native app.

146 lines (144 loc) 5.48 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.build = build; exports.options = exports.default = void 0; exports.runPackager = runPackager; function _cliTools() { const data = require("@react-native-community/cli-tools"); _cliTools = function () { return data; }; return data; } function _execa() { const data = _interopRequireDefault(require("execa")); _execa = function () { return data; }; return data; } var _getAndroidProject = require("../../config/getAndroidProject"); var _adb = _interopRequireDefault(require("../runAndroid/adb")); var _getAdbPath = _interopRequireDefault(require("../runAndroid/getAdbPath")); var _startServerInNewWindow = require("./startServerInNewWindow"); var _getTaskNames = require("../runAndroid/getTaskNames"); var _listAndroidTasks = require("../runAndroid/listAndroidTasks"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } async function runPackager(args, config) { if (!args.packager) { return; } const result = await (0, _cliTools().isPackagerRunning)(args.port); if (result === 'running') { _cliTools().logger.info('JS server already running.'); } else if (result === 'unrecognized') { _cliTools().logger.warn('JS server not recognized, continuing with build...'); } else { // result == 'not_running' _cliTools().logger.info('Starting JS server...'); try { (0, _startServerInNewWindow.startServerInNewWindow)(args.port, args.terminal, config.root, config.reactNativePath); } catch (error) { if (error instanceof Error) { _cliTools().logger.warn(`Failed to automatically start the packager server. Please run "react-native start" manually. Error details: ${error.message}`); } } } } async function buildAndroid(_argv, config, args) { const androidProject = (0, _getAndroidProject.getAndroidProject)(config); if (args.variant) { _cliTools().logger.warn('"variant" flag is deprecated and will be removed in future release. Please switch to "mode" flag.'); } if (args.tasks && args.mode) { _cliTools().logger.warn('Both "tasks" and "mode" parameters were passed to "build" command. Using "tasks" for building the app.'); } let { tasks } = args; if (args.interactive) { const selectedTask = await (0, _listAndroidTasks.promptForTaskSelection)('build', androidProject.sourceDir); if (selectedTask) { tasks = [selectedTask]; } } let gradleArgs = (0, _getTaskNames.getTaskNames)(androidProject.appName, args.mode || args.variant, tasks, 'bundle', androidProject.sourceDir); if (args.extraParams) { gradleArgs.push(...args.extraParams); } if (args.activeArchOnly) { const adbPath = (0, _getAdbPath.default)(); const devices = _adb.default.getDevices(adbPath); const architectures = devices.map(device => { return _adb.default.getCPU(adbPath, device); }).filter((arch, index, array) => arch != null && array.indexOf(arch) === index); if (architectures.length > 0) { _cliTools().logger.info(`Detected architectures ${architectures.join(', ')}`); // `reactNativeDebugArchitectures` was renamed to `reactNativeArchitectures` in 0.68. // Can be removed when 0.67 no longer needs to be supported. gradleArgs.push('-PreactNativeDebugArchitectures=' + architectures.join(',')); gradleArgs.push('-PreactNativeArchitectures=' + architectures.join(',')); } } await runPackager(args, config); return build(gradleArgs, androidProject.sourceDir); } function build(gradleArgs, sourceDir) { process.chdir(sourceDir); const cmd = process.platform.startsWith('win') ? 'gradlew.bat' : './gradlew'; _cliTools().logger.info('Building the app...'); _cliTools().logger.debug(`Running command "${cmd} ${gradleArgs.join(' ')}"`); try { _execa().default.sync(cmd, gradleArgs, { stdio: 'inherit', cwd: sourceDir }); } catch (error) { (0, _cliTools().printRunDoctorTip)(); throw new (_cliTools().CLIError)('Failed to build the app.', error); } } const options = [{ name: '--mode <string>', description: "Specify your app's build variant" }, { name: '--variant <string>', description: "Specify your app's build variant. Deprecated! Use 'mode' instead" }, { name: '--no-packager', description: 'Do not launch packager while building' }, { name: '--port <number>', default: process.env.RCT_METRO_PORT || 8081, parse: Number }, { name: '--terminal <string>', description: 'Launches the Metro Bundler in a new window using the specified terminal path.', default: (0, _cliTools().getDefaultUserTerminal)() }, { name: '--tasks <list>', description: 'Run custom Gradle tasks. By default it\'s "assembleDebug". Will override passed mode and variant arguments.', parse: val => val.split(',') }, { name: '--active-arch-only', description: 'Build native libraries only for the current device architecture for debug builds.', default: false }, { name: '--extra-params <string>', description: 'Custom params passed to gradle build command', parse: val => val.split(' ') }, { name: '--interactive', description: 'Explicitly select build type and flavour to use before running a build' }]; exports.options = options; var _default = { name: 'build-android', description: 'builds your app', func: buildAndroid, options }; exports.default = _default; //# sourceMappingURL=index.ts.map