Skip to content

Commit ff4ab70

Browse files
authored
Merge pull request #4677 from NativeScript/fatme/fix-release-run
fix: fix release run for android
2 parents 1ca0cf2 + dcd50ae commit ff4ab70

File tree

13 files changed

+64
-104
lines changed

13 files changed

+64
-104
lines changed

lib/controllers/build-controller.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ export class BuildController extends EventEmitter implements IBuildController {
4747
});
4848

4949
if (buildData.clean) {
50-
await platformData.platformProjectService.cleanProject(platformData.projectRoot, projectData);
50+
await platformData.platformProjectService.cleanProject(platformData.projectRoot);
5151
}
5252

5353
const handler = (data: any) => {

lib/controllers/deploy-controller.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,15 @@
11
export class DeployController {
22

33
constructor(
4-
private $buildDataService: IBuildDataService,
54
private $buildController: IBuildController,
65
private $deviceInstallAppService: IDeviceInstallAppService,
76
private $devicesService: Mobile.IDevicesService
87
) { }
98

10-
public async deploy(data: IRunData): Promise<void> {
11-
const { liveSyncInfo, deviceDescriptors } = data;
9+
public async deploy(data: IDeployData): Promise<void> {
10+
const { buildData, deviceDescriptors } = data;
1211

1312
const executeAction = async (device: Mobile.IDevice) => {
14-
const options = { ...liveSyncInfo, buildForDevice: !device.isEmulator };
15-
const buildData = this.$buildDataService.getBuildData(liveSyncInfo.projectDir, device.deviceInfo.platform, options);
1613
await this.$buildController.prepareAndBuild(buildData);
1714
await this.$deviceInstallAppService.installOnDevice(device, buildData);
1815
};

lib/definitions/gradle.d.ts

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,12 @@ interface IGradleCommandOptions {
99
spawnOptions?: ISpawnFromEventOptions;
1010
}
1111

12-
interface IAndroidBuildConfig extends IRelease, IAndroidReleaseOptions, IHasAndroidBundle {
13-
buildOutputStdio?: string;
14-
}
15-
1612
interface IGradleBuildService {
17-
buildProject(projectRoot: string, buildConfig: IAndroidBuildConfig): Promise<void>;
18-
cleanProject(projectRoot: string, buildConfig: IAndroidBuildConfig): Promise<void>;
13+
buildProject(projectRoot: string, buildData: IAndroidBuildData): Promise<void>;
14+
cleanProject(projectRoot: string, buildData: IAndroidBuildData): Promise<void>;
1915
}
2016

2117
interface IGradleBuildArgsService {
22-
getBuildTaskArgs(buildConfig: IAndroidBuildConfig): string[];
23-
getCleanTaskArgs(buildConfig: IAndroidBuildConfig): string[];
18+
getBuildTaskArgs(buildData: IAndroidBuildData): string[];
19+
getCleanTaskArgs(buildData: IAndroidBuildData): string[];
2420
}

lib/definitions/run.d.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@ declare global {
77
deviceDescriptors: ILiveSyncDeviceDescriptor[];
88
}
99

10+
interface IDeployData {
11+
buildData: IBuildData;
12+
deviceDescriptors: ILiveSyncDeviceDescriptor[];
13+
}
14+
1015
interface IStopRunData {
1116
projectDir: string;
1217
deviceIdentifiers?: string[];

lib/helpers/deploy-command-helper.ts

Lines changed: 8 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { BuildController } from "../controllers/build-controller";
33

44
export class DeployCommandHelper {
55
constructor(
6+
private $buildDataService: IBuildDataService,
67
private $buildController: BuildController,
78
private $devicesService: Mobile.IDevicesService,
89
private $deployController: DeployController,
@@ -25,31 +26,18 @@ export class DeployCommandHelper {
2526

2627
const deviceDescriptors: ILiveSyncDeviceDescriptor[] = devices
2728
.map(d => {
28-
const buildConfig: IBuildConfig = {
29-
buildForDevice: !d.isEmulator,
30-
iCloudContainerEnvironment: this.$options.iCloudContainerEnvironment,
31-
projectDir: this.$options.path,
32-
clean: this.$options.clean,
33-
teamId: this.$options.teamId,
34-
device: this.$options.device,
35-
provision: this.$options.provision,
36-
release: this.$options.release,
37-
keyStoreAlias: this.$options.keyStoreAlias,
38-
keyStorePath: this.$options.keyStorePath,
39-
keyStoreAliasPassword: this.$options.keyStoreAliasPassword,
40-
keyStorePassword: this.$options.keyStorePassword
41-
};
42-
43-
const buildAction = additionalOptions && additionalOptions.buildPlatform ?
44-
additionalOptions.buildPlatform.bind(additionalOptions.buildPlatform, d.deviceInfo.platform, buildConfig, this.$projectData) :
45-
this.$buildController.prepareAndBuild.bind(this.$buildController, d.deviceInfo.platform, buildConfig, this.$projectData);
46-
4729
const outputPath = additionalOptions && additionalOptions.getOutputDirectory && additionalOptions.getOutputDirectory({
4830
platform: d.deviceInfo.platform,
4931
emulator: d.isEmulator,
5032
projectDir: this.$projectData.projectDir
5133
});
5234

35+
const buildData = this.$buildDataService.getBuildData(this.$projectData.projectDir, d.deviceInfo.platform, { ...this.$options, outputPath, buildForDevice: !d.isEmulator });
36+
37+
const buildAction = additionalOptions && additionalOptions.buildPlatform ?
38+
additionalOptions.buildPlatform.bind(additionalOptions.buildPlatform, d.deviceInfo.platform, buildData, this.$projectData) :
39+
this.$buildController.prepareAndBuild.bind(this.$buildController, d.deviceInfo.platform, buildData, this.$projectData);
40+
5341
const info: ILiveSyncDeviceDescriptor = {
5442
identifier: d.deviceInfo.identifier,
5543
buildAction,
@@ -62,20 +50,8 @@ export class DeployCommandHelper {
6250
return info;
6351
});
6452

65-
const liveSyncInfo: ILiveSyncInfo = {
66-
projectDir: this.$projectData.projectDir,
67-
skipWatcher: !this.$options.watch,
68-
clean: this.$options.clean,
69-
release: this.$options.release,
70-
env: this.$options.env,
71-
timeout: this.$options.timeout,
72-
useHotModuleReload: this.$options.hmr,
73-
force: this.$options.force,
74-
emulator: this.$options.emulator
75-
};
76-
7753
await this.$deployController.deploy({
78-
liveSyncInfo,
54+
buildData: this.$buildDataService.getBuildData(this.$projectData.projectDir, platform, { ...this.$options, skipWatcher: !this.$options.watch }),
7955
deviceDescriptors
8056
});
8157
}

lib/helpers/livesync-command-helper.ts

Lines changed: 10 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -62,31 +62,16 @@ export class LiveSyncCommandHelper implements ILiveSyncCommandHelper {
6262
// Now let's take data for each device:
6363
const deviceDescriptors: ILiveSyncDeviceDescriptor[] = devices
6464
.map(d => {
65-
const buildConfig: IBuildConfig = {
66-
buildForDevice: !d.isEmulator,
67-
iCloudContainerEnvironment: this.$options.iCloudContainerEnvironment,
68-
projectDir: this.$options.path,
69-
clean: this.$options.clean,
70-
teamId: this.$options.teamId,
71-
device: this.$options.device,
72-
provision: this.$options.provision,
73-
release: this.$options.release,
74-
keyStoreAlias: this.$options.keyStoreAlias,
75-
keyStorePath: this.$options.keyStorePath,
76-
keyStoreAliasPassword: this.$options.keyStoreAliasPassword,
77-
keyStorePassword: this.$options.keyStorePassword
78-
};
79-
8065
const outputPath = additionalOptions && additionalOptions.getOutputDirectory && additionalOptions.getOutputDirectory({
8166
platform: d.deviceInfo.platform,
8267
emulator: d.isEmulator,
8368
projectDir: this.$projectData.projectDir
8469
});
8570

86-
const buildData = this.$buildDataService.getBuildData(this.$projectData.projectDir, d.deviceInfo.platform, { ...buildConfig, outputPath });
71+
const buildData = this.$buildDataService.getBuildData(this.$projectData.projectDir, d.deviceInfo.platform, { ...this.$options, outputPath, buildForDevice: !d.isEmulator });
8772

8873
const buildAction = additionalOptions && additionalOptions.buildPlatform ?
89-
additionalOptions.buildPlatform.bind(additionalOptions.buildPlatform, d.deviceInfo.platform, buildConfig, this.$projectData) :
74+
additionalOptions.buildPlatform.bind(additionalOptions.buildPlatform, d.deviceInfo.platform, buildData, this.$projectData) :
9075
this.$buildController.build.bind(this.$buildController, buildData);
9176

9277
const info: ILiveSyncDeviceDescriptor = {
@@ -117,6 +102,11 @@ export class LiveSyncCommandHelper implements ILiveSyncCommandHelper {
117102
public async executeLiveSyncOperation(devices: Mobile.IDevice[], platform: string, additionalOptions?: ILiveSyncCommandHelperAdditionalOptions): Promise<void> {
118103
const { liveSyncInfo, deviceDescriptors } = await this.executeLiveSyncOperationCore(devices, platform, additionalOptions);
119104

105+
if (this.$options.release) {
106+
await this.runInRelease(platform, deviceDescriptors, liveSyncInfo);
107+
return;
108+
}
109+
120110
await this.$runController.run({
121111
liveSyncInfo,
122112
deviceDescriptors
@@ -173,11 +163,6 @@ export class LiveSyncCommandHelper implements ILiveSyncCommandHelper {
173163
const deviceDescriptors = await this.createDeviceDescriptors(devices, platform, additionalOptions);
174164
const liveSyncInfo = this.getLiveSyncData(this.$projectData.projectDir);
175165

176-
if (this.$options.release) {
177-
await this.runInRelease(platform, deviceDescriptors, liveSyncInfo);
178-
return;
179-
}
180-
181166
return { liveSyncInfo, deviceDescriptors };
182167
}
183168

@@ -190,8 +175,10 @@ export class LiveSyncCommandHelper implements ILiveSyncCommandHelper {
190175
sdk: this.$options.sdk
191176
});
192177

178+
const buildData = this.$buildDataService.getBuildData(liveSyncInfo.projectDir, platform, { ...this.$options, clean: true, skipWatcher: true });
179+
193180
await this.$deployController.deploy({
194-
liveSyncInfo: { ...liveSyncInfo, clean: true, skipWatcher: true },
181+
buildData,
195182
deviceDescriptors
196183
});
197184

lib/services/android-project-service.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -233,16 +233,16 @@ export class AndroidProjectService extends projectServiceBaseLib.PlatformProject
233233
}
234234

235235
@performanceLog()
236-
public async buildProject(projectRoot: string, projectData: IProjectData, buildConfig: IBuildConfig): Promise<void> {
236+
public async buildProject(projectRoot: string, projectData: IProjectData, buildData: IAndroidBuildData): Promise<void> {
237237
const platformData = this.getPlatformData(projectData);
238-
await this.$gradleBuildService.buildProject(platformData.projectRoot, buildConfig);
238+
await this.$gradleBuildService.buildProject(platformData.projectRoot, buildData);
239239

240-
const outputPath = platformData.getBuildOutputPath(buildConfig);
240+
const outputPath = platformData.getBuildOutputPath(buildData);
241241
await this.$filesHashService.saveHashesForProject(this._platformData, outputPath);
242242
}
243243

244-
public async buildForDeploy(projectRoot: string, projectData: IProjectData, buildConfig?: IBuildConfig): Promise<void> {
245-
return this.buildProject(projectRoot, projectData, buildConfig);
244+
public async buildForDeploy(projectRoot: string, projectData: IProjectData, buildData?: IAndroidBuildData): Promise<void> {
245+
return this.buildProject(projectRoot, projectData, buildData);
246246
}
247247

248248
public isPlatformPrepared(projectRoot: string, projectData: IProjectData): boolean {
@@ -376,8 +376,8 @@ export class AndroidProjectService extends projectServiceBaseLib.PlatformProject
376376
return result;
377377
}
378378

379-
public async cleanProject(projectRoot: string, projectData: IProjectData): Promise<void> {
380-
await this.$gradleBuildService.cleanProject(projectRoot, { release: false });
379+
public async cleanProject(projectRoot: string): Promise<void> {
380+
await this.$gradleBuildService.cleanProject(projectRoot, <any>{ release: false });
381381
}
382382

383383
public async cleanDeviceTempFolder(deviceIdentifier: string, projectData: IProjectData): Promise<void> {

lib/services/android/gradle-build-args-service.ts

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,21 @@ export class GradleBuildArgsService implements IGradleBuildArgsService {
55
constructor(private $androidToolsInfo: IAndroidToolsInfo,
66
private $logger: ILogger) { }
77

8-
public getBuildTaskArgs(buildConfig: IAndroidBuildConfig): string[] {
9-
const args = this.getBaseTaskArgs(buildConfig);
10-
args.unshift(this.getBuildTaskName(buildConfig));
8+
public getBuildTaskArgs(buildData: IAndroidBuildData): string[] {
9+
const args = this.getBaseTaskArgs(buildData);
10+
args.unshift(this.getBuildTaskName(buildData));
1111

1212
return args;
1313
}
1414

15-
public getCleanTaskArgs(buildConfig: IAndroidBuildConfig): string[] {
16-
const args = this.getBaseTaskArgs(buildConfig);
15+
public getCleanTaskArgs(buildData: IAndroidBuildData): string[] {
16+
const args = this.getBaseTaskArgs(buildData);
1717
args.unshift("clean");
1818

1919
return args;
2020
}
2121

22-
private getBaseTaskArgs(buildConfig: IAndroidBuildConfig): string[] {
22+
private getBaseTaskArgs(buildData: IAndroidBuildData): string[] {
2323
const args = this.getBuildLoggingArgs();
2424

2525
const toolsInfo = this.$androidToolsInfo.getToolsInfo();
@@ -30,13 +30,13 @@ export class GradleBuildArgsService implements IGradleBuildArgsService {
3030
`-PgenerateTypings=${toolsInfo.generateTypings}`
3131
);
3232

33-
if (buildConfig.release) {
33+
if (buildData.release) {
3434
args.push(
3535
"-Prelease",
36-
`-PksPath=${path.resolve(buildConfig.keyStorePath)}`,
37-
`-Palias=${buildConfig.keyStoreAlias}`,
38-
`-Ppassword=${buildConfig.keyStoreAliasPassword}`,
39-
`-PksPassword=${buildConfig.keyStorePassword}`
36+
`-PksPath=${path.resolve(buildData.keyStorePath)}`,
37+
`-Palias=${buildData.keyStoreAlias}`,
38+
`-Ppassword=${buildData.keyStoreAliasPassword}`,
39+
`-PksPassword=${buildData.keyStorePassword}`
4040
);
4141
}
4242

@@ -56,9 +56,9 @@ export class GradleBuildArgsService implements IGradleBuildArgsService {
5656
return args;
5757
}
5858

59-
private getBuildTaskName(buildConfig: IAndroidBuildConfig): string {
60-
const baseTaskName = buildConfig.androidBundle ? "bundle" : "assemble";
61-
const buildTaskName = buildConfig.release ? `${baseTaskName}${Configurations.Release}` : `${baseTaskName}${Configurations.Debug}`;
59+
private getBuildTaskName(buildData: IAndroidBuildData): string {
60+
const baseTaskName = buildData.androidBundle ? "bundle" : "assemble";
61+
const buildTaskName = buildData.release ? `${baseTaskName}${Configurations.Release}` : `${baseTaskName}${Configurations.Debug}`;
6262

6363
return buildTaskName;
6464
}

lib/services/android/gradle-build-service.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ export class GradleBuildService extends EventEmitter implements IGradleBuildServ
99
private $gradleCommandService: IGradleCommandService,
1010
) { super(); }
1111

12-
public async buildProject(projectRoot: string, buildConfig: IAndroidBuildConfig): Promise<void> {
13-
const buildTaskArgs = this.$gradleBuildArgsService.getBuildTaskArgs(buildConfig);
12+
public async buildProject(projectRoot: string, buildData: IAndroidBuildData): Promise<void> {
13+
const buildTaskArgs = this.$gradleBuildArgsService.getBuildTaskArgs(buildData);
1414
const spawnOptions = { emitOptions: { eventName: constants.BUILD_OUTPUT_EVENT_NAME }, throwError: true };
15-
const gradleCommandOptions = { cwd: projectRoot, message: "Gradle build...", stdio: buildConfig.buildOutputStdio, spawnOptions };
15+
const gradleCommandOptions = { cwd: projectRoot, message: "Gradle build...", stdio: buildData.buildOutputStdio, spawnOptions };
1616

1717
await attachAwaitDetach(constants.BUILD_OUTPUT_EVENT_NAME,
1818
this.$childProcess,
@@ -21,8 +21,8 @@ export class GradleBuildService extends EventEmitter implements IGradleBuildServ
2121
);
2222
}
2323

24-
public async cleanProject(projectRoot: string, buildConfig: IAndroidBuildConfig): Promise<void> {
25-
const cleanTaskArgs = this.$gradleBuildArgsService.getCleanTaskArgs(buildConfig);
24+
public async cleanProject(projectRoot: string, buildData: IAndroidBuildData): Promise<void> {
25+
const cleanTaskArgs = this.$gradleBuildArgsService.getCleanTaskArgs(buildData);
2626
const gradleCommandOptions = { cwd: projectRoot, message: "Gradle clean..." };
2727
await this.$gradleCommandService.executeCommand(cleanTaskArgs, gradleCommandOptions);
2828
}

lib/services/platform/prepare-native-platform-service.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ export class PrepareNativePlatformService implements IPrepareNativePlatformServi
2828
const hasChanges = hasModulesChange || hasConfigChange || hasChangesRequirePrepare;
2929

3030
if (changesInfo.hasChanges) {
31-
await this.cleanProject(platformData, projectData, { release });
31+
await this.cleanProject(platformData, { release });
3232
}
3333

3434
platformData.platformProjectService.prepareAppResources(projectData);
@@ -52,7 +52,7 @@ export class PrepareNativePlatformService implements IPrepareNativePlatformServi
5252
return hasChanges;
5353
}
5454

55-
private async cleanProject(platformData: IPlatformData, projectData: IProjectData, options: { release: boolean }): Promise<void> {
55+
private async cleanProject(platformData: IPlatformData, options: { release: boolean }): Promise<void> {
5656
// android build artifacts need to be cleaned up
5757
// when switching between debug, release and webpack builds
5858
if (platformData.platformNameLowerCase !== "android") {
@@ -67,7 +67,7 @@ export class PrepareNativePlatformService implements IPrepareNativePlatformServi
6767
const { release: previousWasRelease } = previousPrepareInfo;
6868
const { release: currentIsRelease } = options;
6969
if (previousWasRelease !== currentIsRelease) {
70-
await platformData.platformProjectService.cleanProject(platformData.projectRoot, projectData);
70+
await platformData.platformProjectService.cleanProject(platformData.projectRoot);
7171
}
7272
}
7373
}

0 commit comments

Comments
 (0)