Skip to content

Commit 05e5fee

Browse files
Fatme HavaluovaFatme Havaluova
Fatme Havaluova
authored and
Fatme Havaluova
committed
Speed up livesync on android device
Related: #921
1 parent f8d7831 commit 05e5fee

File tree

6 files changed

+25
-6
lines changed

6 files changed

+25
-6
lines changed

lib/definitions/platform.d.ts

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ interface IPlatformService {
88
runPlatform(platform: string, buildConfig?: IBuildConfig): IFuture<void>;
99
preparePlatform(platform: string): IFuture<boolean>;
1010
buildPlatform(platform: string, buildConfig?: IBuildConfig): IFuture<void>;
11+
buildForDeploy(platform: string, buildConfig?: IBuildConfig): IFuture<void>;
1112
installOnDevice(platform: string, buildConfig?: IBuildConfig): IFuture<void>;
1213
deployOnDevice(platform: string, buildConfig?: IBuildConfig): IFuture<void>;
1314
deployOnEmulator(platform: string, buildConfig?: IBuildConfig): IFuture<void>;

lib/providers/livesync-provider.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ export class LiveSyncProvider implements ILiveSyncProvider {
2525

2626
public buildForDevice(device: Mobile.IDevice): IFuture<string> {
2727
return (() => {
28-
this.$platformService.buildPlatform(device.deviceInfo.platform, {buildForDevice: !device.isEmulator}).wait();
28+
this.$platformService.buildForDeploy(device.deviceInfo.platform, {buildForDevice: !device.isEmulator}).wait();
2929
let platformData = this.$platformsData.getPlatformData(device.deviceInfo.platform);
3030
if (device.isEmulator) {
3131
return this.$platformService.getLatestApplicationPackageForEmulator(platformData).wait().packageName;

lib/services/android-project-service.ts

+9-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import * as constants from "../constants";
77
import * as semver from "semver";
88
import * as projectServiceBaseLib from "./platform-project-service-base";
99
import * as androidDebugBridgePath from "../common/mobile/android/android-debug-bridge";
10+
import {AndroidDeviceHashService} from "../common/mobile/android/android-device-hash-service";
1011

1112
export class AndroidProjectService extends projectServiceBaseLib.PlatformProjectServiceBase implements IPlatformProjectService {
1213
private static VALUES_DIRNAME = "values";
@@ -29,7 +30,8 @@ export class AndroidProjectService extends projectServiceBaseLib.PlatformProject
2930
private $sysInfo: ISysInfo,
3031
private $mobileHelper: Mobile.IMobileHelper,
3132
private $injector: IInjector,
32-
private $pluginVariablesService: IPluginVariablesService) {
33+
private $pluginVariablesService: IPluginVariablesService,
34+
private $deviceAppDataFactory: Mobile.IDeviceAppDataFactory) {
3335
super($fs, $projectData, $projectDataService);
3436
this._androidProjectPropertiesManagers = Object.create(null);
3537
}
@@ -330,6 +332,12 @@ export class AndroidProjectService extends projectServiceBaseLib.PlatformProject
330332
adb.executeShellCommand(["rm", "-rf", this.$mobileHelper.buildDevicePath(deviceRootPath, "fullsync"),
331333
this.$mobileHelper.buildDevicePath(deviceRootPath, "sync"),
332334
this.$mobileHelper.buildDevicePath(deviceRootPath, "removedsync")]).wait();
335+
336+
let projectFilesManager = this.$injector.resolve("projectFilesManager"); // We need to resolve projectFilesManager here due to cyclic dependency
337+
let deviceAppData = this.$deviceAppDataFactory.create(this.$projectData.projectId, this.platformData.normalizedPlatformName, null);
338+
let localToDevicePaths = projectFilesManager.createLocalToDevicePaths(deviceAppData, path.join(this.platformData.appDestinationDirectoryPath, constants.APP_FOLDER_NAME));
339+
let deviceHashService = this.$injector.resolve(AndroidDeviceHashService, { adb: adb, appIdentifier: this.$projectData.projectId });
340+
deviceHashService.uploadHashFileToDevice(localToDevicePaths).wait();
333341
}).future<void>()();
334342
}
335343

lib/services/livesync/android-livesync-service.ts

+11-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
///<reference path="../../.d.ts"/>
22
"use strict";
33

4+
import {AndroidDebugBridge} from "../../common/mobile/android/android-debug-bridge";
5+
import {AndroidDeviceHashService} from "../../common/mobile/android/android-device-hash-service";
46
import Future = require("fibers/future");
57
import * as helpers from "../../common/helpers";
68
import liveSyncServiceBaseLib = require("./livesync-service-base");
@@ -13,7 +15,9 @@ class AndroidLiveSyncService extends liveSyncServiceBaseLib.LiveSyncServiceBase<
1315
constructor(_device: Mobile.IDevice,
1416
private $fs: IFileSystem,
1517
private $mobileHelper: Mobile.IMobileHelper,
16-
private $options: IOptions) {
18+
private $options: IOptions,
19+
private $injector: IInjector,
20+
private $projectData: IProjectData) {
1721
super(_device);
1822
}
1923

@@ -56,6 +60,12 @@ class AndroidLiveSyncService extends liveSyncServiceBaseLib.LiveSyncServiceBase<
5660
}).future<void>()();
5761
}
5862

63+
public afterInstallApplicationAction(deviceAppData: Mobile.IDeviceAppData, localToDevicePaths: Mobile.ILocalToDevicePathData[]): IFuture<void> {
64+
let adb = this.$injector.resolve(AndroidDebugBridge, { identifier: deviceAppData.device.deviceInfo.identifier });
65+
let deviceHashService = this.$injector.resolve(AndroidDeviceHashService, { adb: adb, appIdentifier: this.$projectData.projectId });
66+
return deviceHashService.uploadHashFileToDevice(localToDevicePaths);
67+
}
68+
5969
private getDeviceRootPath(appIdentifier: string): string {
6070
return `/data/local/tmp/${appIdentifier}`;
6171
}

lib/services/platform-service.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,7 @@ export class PlatformService implements IPlatformService {
311311
}).future<void>()();
312312
}
313313

314-
public buildForDeploy(platform: string, buildConfig?: IBuildConfig): IFuture<string> {
314+
public buildForDeploy(platform: string, buildConfig?: IBuildConfig): IFuture<void> {
315315
return (() => {
316316
platform = platform.toLowerCase();
317317
if (!this.preparePlatform(platform).wait()) {
@@ -321,7 +321,7 @@ export class PlatformService implements IPlatformService {
321321
let platformData = this.$platformsData.getPlatformData(platform);
322322
platformData.platformProjectService.buildForDeploy(platformData.projectRoot, buildConfig).wait();
323323
this.$logger.out("Project successfully built");
324-
}).future<string>()();
324+
}).future<void>()();
325325
}
326326

327327
public copyLastOutput(platform: string, targetPath: string, settings: {isForDevice: boolean}): IFuture<void> {

0 commit comments

Comments
 (0)