Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 20 additions & 20 deletions lib/services/android-project-service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import * as projectServiceBaseLib from "./platform-project-service-base";
import { DeviceAndroidDebugBridge } from "../common/mobile/android/device-android-debug-bridge";
import { EOL } from "os";
import { Configurations } from "../common/constants";
import { SpawnOptions } from "child_process";

export class AndroidProjectService extends projectServiceBaseLib.PlatformProjectServiceBase implements IPlatformProjectService {
private static VALUES_DIRNAME = "values";
Expand Down Expand Up @@ -253,18 +254,15 @@ export class AndroidProjectService extends projectServiceBaseLib.PlatformProject
buildOptions.unshift("--stacktrace");
buildOptions.unshift("--debug");
}

buildOptions.unshift("buildapk");
let gradleBin = path.join(projectRoot, "gradlew");
if (this.$hostInfo.isWindows) {
gradleBin += ".bat"; // cmd command line parsing rules are weird. Avoid issues with quotes. See https://github.com/apache/cordova-android/blob/master/bin/templates/cordova/lib/builders/GradleBuilder.js for another approach
}

this.$childProcess.on(constants.BUILD_OUTPUT_EVENT_NAME, (data: any) => {
this.emit(constants.BUILD_OUTPUT_EVENT_NAME, data);
});
await this.spawn(gradleBin,
buildOptions,
{ stdio: buildConfig.buildOutputStdio || "inherit", cwd: this.getPlatformData(projectData).projectRoot },

await this.executeGradleCommand(this.getPlatformData(projectData).projectRoot, buildOptions,
{ stdio: buildConfig.buildOutputStdio || "inherit" },
{ emitOptions: { eventName: constants.BUILD_OUTPUT_EVENT_NAME }, throwError: true });
} else {
this.$errors.failWithoutHelp("Cannot complete build because this project is ANT-based." + EOL +
Expand Down Expand Up @@ -417,24 +415,13 @@ export class AndroidProjectService extends projectServiceBaseLib.PlatformProject
}

public stopServices(projectRoot: string): Promise<ISpawnResult> {
let gradleBin = path.join(projectRoot, "gradlew");
if (this.$hostInfo.isWindows) {
gradleBin += ".bat";
}

return this.$childProcess.spawnFromEvent(gradleBin, ["--stop", "--quiet"], "close", { stdio: "inherit", cwd: projectRoot });
return this.executeGradleCommand(projectRoot, ["--stop", "--quiet"]);
}

public async cleanProject(projectRoot: string, projectData: IProjectData): Promise<void> {
const buildOptions = this.getBuildOptions({ release: false }, projectData);
buildOptions.unshift("clean");

let gradleBin = path.join(projectRoot, "gradlew");
if (this.$hostInfo.isWindows) {
gradleBin += ".bat";
}

await this.spawn(gradleBin, buildOptions, { stdio: "inherit", cwd: this.getPlatformData(projectData).projectRoot });
await this.executeGradleCommand(projectRoot, buildOptions);
}

public async cleanDeviceTempFolder(deviceIdentifier: string, projectData: IProjectData): Promise<void> {
Expand Down Expand Up @@ -504,6 +491,19 @@ export class AndroidProjectService extends projectServiceBaseLib.PlatformProject

return versionInManifest;
}

private async executeGradleCommand(projectRoot: string, gradleArgs: string[], childProcessOpts?: SpawnOptions, spawnFromEventOptions?: ISpawnFromEventOptions): Promise<ISpawnResult> {
const gradlew = this.$hostInfo.isWindows ? "gradlew.bat" : "./gradlew";

childProcessOpts = childProcessOpts || {};
childProcessOpts.cwd = childProcessOpts.cwd || projectRoot;
childProcessOpts.stdio = childProcessOpts.stdio || "inherit";

return await this.spawn(gradlew,
gradleArgs,
childProcessOpts,
spawnFromEventOptions);
}
}

$injector.register("androidProjectService", AndroidProjectService);