@akylas/nativescript-cli 8.8.2 → 8.8.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/android-tools-info.js +9 -20
- package/lib/base-package-manager.js +47 -64
- package/lib/bun-package-manager.js +65 -88
- package/lib/color.js +2 -2
- package/lib/commands/add-platform.js +14 -30
- package/lib/commands/apple-login.js +18 -29
- package/lib/commands/appstore-list.js +34 -45
- package/lib/commands/appstore-upload.js +55 -68
- package/lib/commands/build.js +57 -86
- package/lib/commands/clean.js +161 -176
- package/lib/commands/command-base.js +14 -27
- package/lib/commands/config.js +51 -70
- package/lib/commands/create-project.js +210 -229
- package/lib/commands/debug.js +66 -88
- package/lib/commands/deploy.js +28 -44
- package/lib/commands/embedding/embed.js +33 -52
- package/lib/commands/extensibility/install-extension.js +5 -16
- package/lib/commands/extensibility/list-extensions.js +13 -24
- package/lib/commands/extensibility/uninstall-extension.js +4 -15
- package/lib/commands/fonts.js +30 -41
- package/lib/commands/generate-assets.js +13 -28
- package/lib/commands/generate-help.js +2 -13
- package/lib/commands/generate.js +17 -26
- package/lib/commands/info.js +2 -13
- package/lib/commands/install.js +34 -49
- package/lib/commands/list-platforms.js +14 -25
- package/lib/commands/migrate.js +15 -26
- package/lib/commands/native-add.js +23 -46
- package/lib/commands/platform-clean.js +19 -32
- package/lib/commands/plugin/add-plugin.js +12 -25
- package/lib/commands/plugin/build-plugin.js +34 -39
- package/lib/commands/plugin/create-plugin.js +110 -133
- package/lib/commands/plugin/list-plugins.js +22 -33
- package/lib/commands/plugin/remove-plugin.js +20 -33
- package/lib/commands/plugin/update-plugin.js +20 -33
- package/lib/commands/post-install.js +20 -33
- package/lib/commands/prepare.js +19 -35
- package/lib/commands/preview.js +49 -62
- package/lib/commands/remove-platform.js +7 -18
- package/lib/commands/resources/resources-update.js +13 -26
- package/lib/commands/run.js +55 -76
- package/lib/commands/start.js +6 -19
- package/lib/commands/test-init.js +123 -134
- package/lib/commands/test.js +66 -89
- package/lib/commands/typings.js +126 -142
- package/lib/commands/update-platform.js +22 -35
- package/lib/commands/update.js +30 -43
- package/lib/common/child-process.js +53 -72
- package/lib/common/codeGeneration/code-entity.js +1 -1
- package/lib/common/codeGeneration/code-printer.js +1 -1
- package/lib/common/command-params.js +7 -18
- package/lib/common/commands/analytics.js +27 -40
- package/lib/common/commands/autocompletion.js +39 -56
- package/lib/common/commands/device/device-log-stream.js +12 -23
- package/lib/common/commands/device/get-file.js +22 -33
- package/lib/common/commands/device/list-applications.js +12 -23
- package/lib/common/commands/device/list-devices.js +72 -87
- package/lib/common/commands/device/list-files.js +23 -34
- package/lib/common/commands/device/put-file.js +22 -33
- package/lib/common/commands/device/run-application.js +12 -25
- package/lib/common/commands/device/stop-application.js +11 -22
- package/lib/common/commands/device/uninstall-application.js +6 -17
- package/lib/common/commands/generate-messages.js +17 -28
- package/lib/common/commands/help.js +20 -33
- package/lib/common/commands/package-manager-get.js +6 -17
- package/lib/common/commands/package-manager-set.js +9 -20
- package/lib/common/commands/post-install.js +2 -13
- package/lib/common/commands/preuninstall.js +23 -38
- package/lib/common/commands/proxy/proxy-base.js +8 -19
- package/lib/common/commands/proxy/proxy-clear.js +4 -15
- package/lib/common/commands/proxy/proxy-get.js +3 -14
- package/lib/common/commands/proxy/proxy-set.js +87 -100
- package/lib/common/constants.js +11 -11
- package/lib/common/decorators.js +10 -22
- package/lib/common/dispatchers.js +79 -96
- package/lib/common/errors.js +89 -104
- package/lib/common/file-system.js +106 -127
- package/lib/common/header.js +1 -2
- package/lib/common/helpers.js +149 -178
- package/lib/common/host-info.js +37 -50
- package/lib/common/http-client.js +93 -108
- package/lib/common/logger/appenders/cli-appender.js +1 -2
- package/lib/common/logger/appenders/emit-appender.js +1 -2
- package/lib/common/logger/layouts/cli-layout.js +1 -2
- package/lib/common/logger/logger.js +1 -1
- package/lib/common/mobile/android/android-application-manager.js +121 -142
- package/lib/common/mobile/android/android-debug-bridge-result-handler.js +1 -1
- package/lib/common/mobile/android/android-debug-bridge.js +87 -112
- package/lib/common/mobile/android/android-device-file-system.js +98 -131
- package/lib/common/mobile/android/android-device-hash-service.js +50 -75
- package/lib/common/mobile/android/android-device.js +74 -91
- package/lib/common/mobile/android/android-emulator-services.js +105 -130
- package/lib/common/mobile/android/android-log-filter.js +1 -1
- package/lib/common/mobile/android/android-virtual-device-service.js +76 -97
- package/lib/common/mobile/android/device-android-debug-bridge.js +13 -29
- package/lib/common/mobile/android/genymotion/genymotion-service.js +91 -118
- package/lib/common/mobile/android/genymotion/virtualbox-service.js +64 -81
- package/lib/common/mobile/android/logcat-helper.js +108 -127
- package/lib/common/mobile/application-manager-base.js +84 -107
- package/lib/common/mobile/device-log-provider-base.js +7 -18
- package/lib/common/mobile/ios/device/ios-application-manager.js +79 -108
- package/lib/common/mobile/ios/device/ios-device-file-system.js +78 -105
- package/lib/common/mobile/ios/device/ios-device-operations.js +105 -142
- package/lib/common/mobile/ios/device/ios-device.js +20 -36
- package/lib/common/mobile/ios/ios-device-base.js +58 -81
- package/lib/common/mobile/ios/simulator/ios-emulator-services.js +63 -92
- package/lib/common/mobile/ios/simulator/ios-sim-resolver.js +1 -1
- package/lib/common/mobile/ios/simulator/ios-simulator-application-manager.js +60 -89
- package/lib/common/mobile/ios/simulator/ios-simulator-device.js +27 -43
- package/lib/common/mobile/ios/simulator/ios-simulator-file-system.js +37 -62
- package/lib/common/mobile/ios/simulator/ios-simulator-log-provider.js +24 -35
- package/lib/common/mobile/mobile-core/android-device-discovery.js +43 -62
- package/lib/common/mobile/mobile-core/android-emulator-discovery.js +21 -32
- package/lib/common/mobile/mobile-core/android-process-service.js +143 -182
- package/lib/common/mobile/mobile-core/device-discovery.js +2 -13
- package/lib/common/mobile/mobile-core/devices-service.js +385 -436
- package/lib/common/mobile/mobile-core/ios-device-discovery.js +24 -35
- package/lib/common/mobile/mobile-core/ios-simulator-discovery.js +47 -62
- package/lib/common/mobile/mobile-helper.js +15 -26
- package/lib/common/mobile/wp8/wp8-emulator-services.js +25 -52
- package/lib/common/opener.js +2 -2
- package/lib/common/plist-parser.js +3 -3
- package/lib/common/prompter.js +90 -105
- package/lib/common/queue.js +9 -20
- package/lib/common/services/auto-completion-service.js +39 -52
- package/lib/common/services/cancellation.js +17 -28
- package/lib/common/services/commands-service.js +146 -169
- package/lib/common/services/help-service.js +132 -157
- package/lib/common/services/hooks-service.js +93 -108
- package/lib/common/services/ios-notification-service.js +21 -34
- package/lib/common/services/json-file-settings-service.js +52 -71
- package/lib/common/services/lock-service.js +35 -52
- package/lib/common/services/message-contract-generator.js +35 -46
- package/lib/common/services/micro-templating-service.js +4 -15
- package/lib/common/services/net-service.js +90 -107
- package/lib/common/services/project-files-manager.js +10 -23
- package/lib/common/services/proxy-service.js +13 -24
- package/lib/common/services/qr.js +13 -24
- package/lib/common/services/settings-service.js +1 -1
- package/lib/common/services/xcode-select-service.js +20 -35
- package/lib/common/utils.js +2 -2
- package/lib/common/validators/project-name-validator.js +1 -1
- package/lib/common/validators/validation-result.js +1 -1
- package/lib/common/verify-node-version.js +2 -3
- package/lib/common/yok.js +23 -36
- package/lib/config.js +7 -58
- package/lib/constants.js +24 -24
- package/lib/controllers/build-controller.js +82 -99
- package/lib/controllers/debug-controller.js +107 -128
- package/lib/controllers/deploy-controller.js +17 -22
- package/lib/controllers/migrate-controller.js +722 -795
- package/lib/controllers/platform-controller.js +72 -87
- package/lib/controllers/prepare-controller.js +266 -299
- package/lib/controllers/run-controller.js +392 -406
- package/lib/controllers/update-controller-base.js +16 -29
- package/lib/controllers/update-controller.js +94 -119
- package/lib/data/prepare-data.js +4 -1
- package/lib/definitions/ios-debugger-port-service.d.ts +1 -1
- package/lib/definitions/livesync.d.ts +1 -1
- package/lib/detached-processes/cleanup-js-subprocess.js +3 -12
- package/lib/detached-processes/cleanup-process.js +16 -25
- package/lib/device-path-provider.js +23 -34
- package/lib/device-sockets/ios/app-debug-socket-proxy-factory.js +149 -164
- package/lib/device-sockets/ios/notification.js +1 -1
- package/lib/device-sockets/ios/socket-request-executor.js +24 -39
- package/lib/helpers/android-bundle-validator-helper.js +1 -1
- package/lib/helpers/deploy-command-helper.js +45 -49
- package/lib/helpers/key-command-helper.js +4 -13
- package/lib/helpers/livesync-command-helper.js +137 -152
- package/lib/helpers/network-connectivity-validator.js +6 -17
- package/lib/helpers/options-track-helper.js +6 -17
- package/lib/helpers/platform-command-helper.js +99 -120
- package/lib/key-commands/index.js +161 -211
- package/lib/nativescript-cli.js +5 -14
- package/lib/node-package-manager.js +81 -104
- package/lib/options.js +3 -12
- package/lib/package-installation-manager.js +130 -165
- package/lib/package-manager.js +63 -86
- package/lib/platform-command-param.js +4 -15
- package/lib/pnpm-package-manager.js +59 -78
- package/lib/project-data.js +1 -1
- package/lib/providers/project-files-provider.js +1 -1
- package/lib/services/analytics/analytics-broker-process.js +13 -22
- package/lib/services/analytics/analytics-broker.js +17 -30
- package/lib/services/analytics/analytics-service.js +161 -198
- package/lib/services/analytics/google-analytics-provider.js +41 -56
- package/lib/services/analytics-settings-service.js +15 -32
- package/lib/services/android/android-bundle-tool-service.js +43 -60
- package/lib/services/android/gradle-build-args-service.js +9 -20
- package/lib/services/android/gradle-build-service.js +34 -47
- package/lib/services/android/gradle-command-service.js +22 -35
- package/lib/services/android-device-debug-service.js +90 -117
- package/lib/services/android-plugin-build-service.js +230 -256
- package/lib/services/android-project-service.js +163 -199
- package/lib/services/android-resources-migration-service.js +51 -64
- package/lib/services/apple-portal/apple-portal-application-service.js +46 -63
- package/lib/services/apple-portal/apple-portal-session-service.js +171 -188
- package/lib/services/assets-generation/assets-generation-service.js +98 -115
- package/lib/services/build-artifacts-service.js +9 -20
- package/lib/services/build-info-file-service.js +20 -35
- package/lib/services/cleanup-service.js +47 -76
- package/lib/services/cocoapods-service.js +115 -136
- package/lib/services/device/device-install-app-service.js +73 -90
- package/lib/services/doctor-service.js +99 -118
- package/lib/services/extensibility-service.js +81 -100
- package/lib/services/files-hash-service.js +26 -43
- package/lib/services/hmr-status-service.js +1 -1
- package/lib/services/initialize-service.js +37 -50
- package/lib/services/ios/export-options-plist-service.js +38 -51
- package/lib/services/ios/ios-signing-service.js +161 -180
- package/lib/services/ios/spm-service.js +40 -53
- package/lib/services/ios/xcodebuild-args-service.js +77 -94
- package/lib/services/ios/xcodebuild-command-service.js +14 -25
- package/lib/services/ios/xcodebuild-service.js +50 -69
- package/lib/services/ios-debugger-port-service.js +23 -36
- package/lib/services/ios-device-debug-service.js +75 -102
- package/lib/services/ios-entitlements-service.js +31 -42
- package/lib/services/ios-extensions-service.js +18 -29
- package/lib/services/ios-project-service.js +405 -460
- package/lib/services/ios-provision-service.js +108 -129
- package/lib/services/ios-watch-app-service.js +21 -32
- package/lib/services/ip-service.js +38 -53
- package/lib/services/itmstransporter-service.js +129 -152
- package/lib/services/livesync/android-device-livesync-service-base.js +31 -48
- package/lib/services/livesync/android-device-livesync-service.js +120 -149
- package/lib/services/livesync/android-device-livesync-sockets-service.js +121 -152
- package/lib/services/livesync/android-livesync-service.js +14 -35
- package/lib/services/livesync/android-livesync-tool.js +89 -112
- package/lib/services/livesync/device-livesync-service-base.js +15 -28
- package/lib/services/livesync/ios-device-livesync-service.js +114 -143
- package/lib/services/livesync/ios-livesync-service.js +42 -58
- package/lib/services/livesync/platform-livesync-service-base.js +94 -119
- package/lib/services/log-parser-service.js +1 -1
- package/lib/services/log-source-map-service.js +30 -41
- package/lib/services/marking-mode-service.js +15 -28
- package/lib/services/npm-config-service.js +1 -1
- package/lib/services/pacote-service.js +49 -64
- package/lib/services/performance-service.js +1 -1
- package/lib/services/platform/add-platform-service.js +50 -71
- package/lib/services/platform/platform-validation-service.js +22 -33
- package/lib/services/platform/prepare-native-platform-service.js +49 -62
- package/lib/services/platform-environment-requirements.js +26 -37
- package/lib/services/plugins-service.js +122 -147
- package/lib/services/project-backup-service.js +1 -1
- package/lib/services/project-changes-service.js +124 -141
- package/lib/services/project-cleanup-service.js +64 -77
- package/lib/services/project-config-service.js +71 -80
- package/lib/services/project-data-service.js +101 -118
- package/lib/services/project-name-service.js +28 -43
- package/lib/services/project-service.js +84 -103
- package/lib/services/project-templates-service.js +52 -67
- package/lib/services/start-service.js +41 -59
- package/lib/services/temp-service.js +8 -21
- package/lib/services/terminal-spinner-service.js +13 -24
- package/lib/services/test-execution-service.js +59 -72
- package/lib/services/test-initialization-service.js +2 -2
- package/lib/services/timeline-profiler-service.js +1 -1
- package/lib/services/versions-service.js +119 -138
- package/lib/services/webpack/webpack-compiler-service.js +211 -231
- package/lib/services/xcconfig-service.js +8 -19
- package/lib/sys-info.js +45 -62
- package/lib/tools/node-modules/node-modules-builder.js +16 -27
- package/lib/yarn-package-manager.js +59 -78
- package/lib/yarn2-package-manager.js +60 -79
- package/package.json +56 -54
- package/vendor/aab-tool/bundletool.jar +0 -0
- package/lib/common/resources/platform-tools/android/darwin/NOTICE.txt +0 -3407
- package/lib/common/resources/platform-tools/android/darwin/adb +0 -0
- package/lib/common/resources/platform-tools/android/linux/NOTICE.txt +0 -4451
- package/lib/common/resources/platform-tools/android/linux/adb +0 -0
- package/lib/common/resources/platform-tools/android/win32/AdbWinApi.dll +0 -0
- package/lib/common/resources/platform-tools/android/win32/AdbWinUsbApi.dll +0 -0
- package/lib/common/resources/platform-tools/android/win32/NOTICE.txt +0 -4451
- package/lib/common/resources/platform-tools/android/win32/adb.exe +0 -0
- package/lib/common/resources/platform-tools/android/win32/fastboot.exe +0 -0
|
@@ -1,13 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
3
|
exports.AndroidDeviceFileSystem = void 0;
|
|
13
4
|
const path = require("path");
|
|
@@ -26,142 +17,118 @@ class AndroidDeviceFileSystem {
|
|
|
26
17
|
this.$injector = $injector;
|
|
27
18
|
this._deviceHashServices = Object.create(null);
|
|
28
19
|
}
|
|
29
|
-
listFiles(devicePath, appIdentifier) {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
return this.adb.executeShellCommand(listCommandArgs);
|
|
36
|
-
});
|
|
20
|
+
async listFiles(devicePath, appIdentifier) {
|
|
21
|
+
let listCommandArgs = ["ls", "-a", devicePath];
|
|
22
|
+
if (appIdentifier) {
|
|
23
|
+
listCommandArgs = ["run-as", appIdentifier].concat(listCommandArgs);
|
|
24
|
+
}
|
|
25
|
+
return this.adb.executeShellCommand(listCommandArgs);
|
|
37
26
|
}
|
|
38
|
-
getFile(deviceFilePath, appIdentifier, outputPath) {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
27
|
+
async getFile(deviceFilePath, appIdentifier, outputPath) {
|
|
28
|
+
const stdout = !outputPath;
|
|
29
|
+
if (stdout) {
|
|
30
|
+
outputPath = await this.$tempService.path({
|
|
31
|
+
prefix: "sync",
|
|
32
|
+
suffix: ".tmp",
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
await this.adb.executeCommand(["pull", deviceFilePath, outputPath]);
|
|
36
|
+
if (stdout) {
|
|
37
|
+
await new Promise((resolve, reject) => {
|
|
38
|
+
const readStream = this.$fs.createReadStream(outputPath);
|
|
39
|
+
readStream.pipe(process.stdout);
|
|
40
|
+
readStream.on("end", () => {
|
|
41
|
+
resolve();
|
|
45
42
|
});
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
if (stdout) {
|
|
49
|
-
yield new Promise((resolve, reject) => {
|
|
50
|
-
const readStream = this.$fs.createReadStream(outputPath);
|
|
51
|
-
readStream.pipe(process.stdout);
|
|
52
|
-
readStream.on("end", () => {
|
|
53
|
-
resolve();
|
|
54
|
-
});
|
|
55
|
-
readStream.on("error", (err) => {
|
|
56
|
-
reject(err);
|
|
57
|
-
});
|
|
43
|
+
readStream.on("error", (err) => {
|
|
44
|
+
reject(err);
|
|
58
45
|
});
|
|
59
|
-
}
|
|
60
|
-
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
61
48
|
}
|
|
62
|
-
getFileContent(deviceFilePath, appIdentifier) {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
return result;
|
|
66
|
-
});
|
|
49
|
+
async getFileContent(deviceFilePath, appIdentifier) {
|
|
50
|
+
const result = await this.adb.executeShellCommand(["cat", deviceFilePath]);
|
|
51
|
+
return result;
|
|
67
52
|
}
|
|
68
|
-
putFile(localFilePath, deviceFilePath, appIdentifier) {
|
|
69
|
-
|
|
70
|
-
yield this.adb.pushFile(localFilePath, deviceFilePath);
|
|
71
|
-
});
|
|
53
|
+
async putFile(localFilePath, deviceFilePath, appIdentifier) {
|
|
54
|
+
await this.adb.pushFile(localFilePath, deviceFilePath);
|
|
72
55
|
}
|
|
73
|
-
transferFiles(deviceAppData, localToDevicePaths) {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
const
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
transferredFiles.push(localToDevicePathData);
|
|
83
|
-
}
|
|
84
|
-
else if (fstat.isDirectory()) {
|
|
85
|
-
const dirToChmod = localToDevicePathData.getDevicePath();
|
|
86
|
-
directoriesToChmod.push(dirToChmod);
|
|
87
|
-
}
|
|
88
|
-
});
|
|
89
|
-
yield (0, helpers_1.executeActionByChunks)(localToDevicePaths, constants_1.DEFAULT_CHUNK_SIZE, action);
|
|
90
|
-
const dirsChmodAction = (directoryToChmod) => this.adb.executeShellCommand(["chmod", "0777", directoryToChmod]);
|
|
91
|
-
yield (0, helpers_1.executeActionByChunks)(_.uniq(directoriesToChmod), constants_1.DEFAULT_CHUNK_SIZE, dirsChmodAction);
|
|
92
|
-
return transferredFiles;
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
transferDirectory(deviceAppData, localToDevicePaths, projectFilesPath) {
|
|
96
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
97
|
-
const minAndroidWithoutAdbPushDir = "9.0.0";
|
|
98
|
-
const isAdbPushDirSupported = semver.lt(semver.coerce(deviceAppData.device.deviceInfo.version), minAndroidWithoutAdbPushDir);
|
|
99
|
-
const deviceProjectDir = yield deviceAppData.getDeviceProjectRootPath();
|
|
100
|
-
let transferredLocalToDevicePaths = [];
|
|
101
|
-
if (isAdbPushDirSupported) {
|
|
102
|
-
yield this.adb.pushFile(projectFilesPath, deviceProjectDir);
|
|
103
|
-
transferredLocalToDevicePaths = localToDevicePaths;
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
transferredLocalToDevicePaths = yield this.pushFiles(localToDevicePaths);
|
|
56
|
+
async transferFiles(deviceAppData, localToDevicePaths) {
|
|
57
|
+
const directoriesToChmod = [];
|
|
58
|
+
const transferredFiles = [];
|
|
59
|
+
const action = async (localToDevicePathData) => {
|
|
60
|
+
const fstat = this.$fs.getFsStats(localToDevicePathData.getLocalPath());
|
|
61
|
+
if (fstat.isFile()) {
|
|
62
|
+
const devicePath = localToDevicePathData.getDevicePath();
|
|
63
|
+
await this.adb.pushFile(localToDevicePathData.getLocalPath(), devicePath);
|
|
64
|
+
transferredFiles.push(localToDevicePathData);
|
|
107
65
|
}
|
|
108
|
-
if (
|
|
109
|
-
const
|
|
110
|
-
|
|
66
|
+
else if (fstat.isDirectory()) {
|
|
67
|
+
const dirToChmod = localToDevicePathData.getDevicePath();
|
|
68
|
+
directoriesToChmod.push(dirToChmod);
|
|
111
69
|
}
|
|
112
|
-
|
|
113
|
-
|
|
70
|
+
};
|
|
71
|
+
await (0, helpers_1.executeActionByChunks)(localToDevicePaths, constants_1.DEFAULT_CHUNK_SIZE, action);
|
|
72
|
+
const dirsChmodAction = (directoryToChmod) => this.adb.executeShellCommand(["chmod", "0777", directoryToChmod]);
|
|
73
|
+
await (0, helpers_1.executeActionByChunks)(_.uniq(directoriesToChmod), constants_1.DEFAULT_CHUNK_SIZE, dirsChmodAction);
|
|
74
|
+
return transferredFiles;
|
|
114
75
|
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
76
|
+
async transferDirectory(deviceAppData, localToDevicePaths, projectFilesPath) {
|
|
77
|
+
const minAndroidWithoutAdbPushDir = "9.0.0";
|
|
78
|
+
const isAdbPushDirSupported = semver.lt(semver.coerce(deviceAppData.device.deviceInfo.version), minAndroidWithoutAdbPushDir);
|
|
79
|
+
const deviceProjectDir = await deviceAppData.getDeviceProjectRootPath();
|
|
80
|
+
let transferredLocalToDevicePaths = [];
|
|
81
|
+
if (isAdbPushDirSupported) {
|
|
82
|
+
await this.adb.pushFile(projectFilesPath, deviceProjectDir);
|
|
83
|
+
transferredLocalToDevicePaths = localToDevicePaths;
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
transferredLocalToDevicePaths = await this.pushFiles(localToDevicePaths);
|
|
87
|
+
}
|
|
88
|
+
if (transferredLocalToDevicePaths.length) {
|
|
89
|
+
const filesToChmodOnDevice = transferredLocalToDevicePaths.map((localToDevicePath) => localToDevicePath.getDevicePath());
|
|
90
|
+
await this.chmodFiles(deviceProjectDir, filesToChmodOnDevice);
|
|
91
|
+
}
|
|
92
|
+
return transferredLocalToDevicePaths;
|
|
121
93
|
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
const transferFileAction = (localToDevicePathData) => __awaiter(this, void 0, void 0, function* () {
|
|
127
|
-
transferredFiles.push(localToDevicePathData);
|
|
128
|
-
yield this.transferFile(localToDevicePathData.getLocalPath(), localToDevicePathData.getDevicePath());
|
|
129
|
-
});
|
|
130
|
-
yield (0, helpers_1.executeActionByChunks)(localToDevicePaths, constants_1.DEFAULT_CHUNK_SIZE, transferFileAction);
|
|
131
|
-
return transferredFiles;
|
|
132
|
-
});
|
|
94
|
+
async chmodFiles(deviceProjectRoot, filesToChmodOnDevice) {
|
|
95
|
+
const commandsDeviceFilePath = this.$mobileHelper.buildDevicePath(deviceProjectRoot, "nativescript.commands.sh");
|
|
96
|
+
await this.createFileOnDevice(commandsDeviceFilePath, `chmod 0777 ${filesToChmodOnDevice.join(" ")}`);
|
|
97
|
+
await this.adb.executeShellCommand([commandsDeviceFilePath]);
|
|
133
98
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
99
|
+
async pushFiles(localToDevicePaths) {
|
|
100
|
+
this.$logger.trace("Changed hashes are:", localToDevicePaths);
|
|
101
|
+
const transferredFiles = [];
|
|
102
|
+
const transferFileAction = async (localToDevicePathData) => {
|
|
103
|
+
transferredFiles.push(localToDevicePathData);
|
|
104
|
+
await this.transferFile(localToDevicePathData.getLocalPath(), localToDevicePathData.getDevicePath());
|
|
105
|
+
};
|
|
106
|
+
await (0, helpers_1.executeActionByChunks)(localToDevicePaths, constants_1.DEFAULT_CHUNK_SIZE, transferFileAction);
|
|
107
|
+
return transferredFiles;
|
|
108
|
+
}
|
|
109
|
+
async transferFile(localPath, devicePath) {
|
|
110
|
+
this.$logger.trace(`Transfering ${localPath} to ${devicePath}`);
|
|
111
|
+
const stats = this.$fs.getFsStats(localPath);
|
|
112
|
+
if (stats.isDirectory()) {
|
|
113
|
+
await this.adb.executeShellCommand(["mkdir", path.dirname(devicePath)]);
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
await this.adb.pushFile(localPath, devicePath);
|
|
117
|
+
}
|
|
145
118
|
}
|
|
146
|
-
createFileOnDevice(deviceFilePath, fileContent) {
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
yield this.adb.executeShellCommand(["chmod", "0777", deviceFilePath]);
|
|
153
|
-
});
|
|
119
|
+
async createFileOnDevice(deviceFilePath, fileContent) {
|
|
120
|
+
const hostTmpDir = await this.$tempService.mkdirSync("application-");
|
|
121
|
+
const commandsFileHostPath = path.join(hostTmpDir, "temp.commands.file");
|
|
122
|
+
this.$fs.writeFile(commandsFileHostPath, fileContent);
|
|
123
|
+
await this.transferFile(commandsFileHostPath, deviceFilePath);
|
|
124
|
+
await this.adb.executeShellCommand(["chmod", "0777", deviceFilePath]);
|
|
154
125
|
}
|
|
155
|
-
deleteFile(deviceFilePath, appIdentifier) {
|
|
156
|
-
|
|
157
|
-
yield this.adb.executeShellCommand(["rm", "-rf", deviceFilePath]);
|
|
158
|
-
});
|
|
126
|
+
async deleteFile(deviceFilePath, appIdentifier) {
|
|
127
|
+
await this.adb.executeShellCommand(["rm", "-rf", deviceFilePath]);
|
|
159
128
|
}
|
|
160
|
-
updateHashesOnDevice(hashes, appIdentifier) {
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
yield deviceHashService.uploadHashFileToDevice(hashes);
|
|
164
|
-
});
|
|
129
|
+
async updateHashesOnDevice(hashes, appIdentifier) {
|
|
130
|
+
const deviceHashService = this.getDeviceHashService(appIdentifier);
|
|
131
|
+
await deviceHashService.uploadHashFileToDevice(hashes);
|
|
165
132
|
}
|
|
166
133
|
getDeviceHashService(appIdentifier) {
|
|
167
134
|
if (!this._deviceHashServices[appIdentifier]) {
|
|
@@ -5,15 +5,6 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
5
5
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
6
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
7
|
};
|
|
8
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
9
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
10
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
11
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
12
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
13
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
14
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
15
|
-
});
|
|
16
|
-
};
|
|
17
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
9
|
exports.AndroidDeviceHashService = void 0;
|
|
19
10
|
const path = require("path");
|
|
@@ -32,49 +23,39 @@ class AndroidDeviceHashService {
|
|
|
32
23
|
get hashFileDevicePath() {
|
|
33
24
|
return this.$mobileHelper.buildDevicePath(constants_1.LiveSyncPaths.ANDROID_TMP_DIR_NAME, this.appIdentifier, AndroidDeviceHashService.HASH_FILE_NAME);
|
|
34
25
|
}
|
|
35
|
-
doesShasumFileExistsOnDevice() {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
return !!(lsResult && lsResult.trim() === this.hashFileDevicePath);
|
|
42
|
-
});
|
|
26
|
+
async doesShasumFileExistsOnDevice() {
|
|
27
|
+
const lsResult = await this.adb.executeShellCommand([
|
|
28
|
+
"ls",
|
|
29
|
+
this.hashFileDevicePath,
|
|
30
|
+
]);
|
|
31
|
+
return !!(lsResult && lsResult.trim() === this.hashFileDevicePath);
|
|
43
32
|
}
|
|
44
|
-
getShasumsFromDevice() {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
return null;
|
|
51
|
-
});
|
|
33
|
+
async getShasumsFromDevice() {
|
|
34
|
+
const hashFileLocalPath = await this.downloadHashFileFromDevice();
|
|
35
|
+
if (this.$fs.exists(hashFileLocalPath)) {
|
|
36
|
+
return this.$fs.readJson(hashFileLocalPath);
|
|
37
|
+
}
|
|
38
|
+
return null;
|
|
52
39
|
}
|
|
53
|
-
uploadHashFileToDevice(data) {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
yield this.adb.pushFile(hashFileLocalPath, this.hashFileDevicePath);
|
|
58
|
-
});
|
|
40
|
+
async uploadHashFileToDevice(data) {
|
|
41
|
+
const hashFileLocalPath = await this.getHashFileLocalPath();
|
|
42
|
+
this.$fs.writeJson(hashFileLocalPath, data);
|
|
43
|
+
await this.adb.pushFile(hashFileLocalPath, this.hashFileDevicePath);
|
|
59
44
|
}
|
|
60
|
-
updateHashes(localToDevicePaths) {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
yield this.uploadHashFileToDevice(oldShasums);
|
|
65
|
-
});
|
|
45
|
+
async updateHashes(localToDevicePaths) {
|
|
46
|
+
const oldShasums = (await this.getShasumsFromDevice()) || {};
|
|
47
|
+
await this.generateHashesFromLocalToDevicePaths(localToDevicePaths, oldShasums);
|
|
48
|
+
await this.uploadHashFileToDevice(oldShasums);
|
|
66
49
|
}
|
|
67
|
-
generateHashesFromLocalToDevicePaths(localToDevicePaths, initialShasums = {}) {
|
|
68
|
-
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
return initialShasums;
|
|
77
|
-
});
|
|
50
|
+
async generateHashesFromLocalToDevicePaths(localToDevicePaths, initialShasums = {}) {
|
|
51
|
+
const action = async (localToDevicePathData) => {
|
|
52
|
+
const localPath = localToDevicePathData.getLocalPath();
|
|
53
|
+
if (this.$fs.getFsStats(localPath).isFile()) {
|
|
54
|
+
initialShasums[localPath] = await this.$fs.getFileShasum(localPath);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
await (0, helpers_1.executeActionByChunks)(localToDevicePaths, constants_1.DEFAULT_CHUNK_SIZE, action);
|
|
58
|
+
return initialShasums;
|
|
78
59
|
}
|
|
79
60
|
getDevicePaths(localToDevicePaths) {
|
|
80
61
|
return _.map(localToDevicePaths, (localToDevicePathData) => {
|
|
@@ -87,39 +68,34 @@ class AndroidDeviceHashService {
|
|
|
87
68
|
}
|
|
88
69
|
return _.omitBy(currentShasums, (hash, pathToFile) => !!oldShasums[pathToFile] && oldShasums[pathToFile] === hash);
|
|
89
70
|
}
|
|
90
|
-
removeHashes(localToDevicePaths) {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
return false;
|
|
99
|
-
});
|
|
71
|
+
async removeHashes(localToDevicePaths) {
|
|
72
|
+
const oldShasums = await this.getShasumsFromDevice();
|
|
73
|
+
if (oldShasums) {
|
|
74
|
+
const fileToShasumDictionary = _.omit(oldShasums, localToDevicePaths.map((ldp) => ldp.getLocalPath()));
|
|
75
|
+
await this.uploadHashFileToDevice(fileToShasumDictionary);
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
return false;
|
|
100
79
|
}
|
|
101
|
-
getHashFileLocalPath() {
|
|
102
|
-
return
|
|
103
|
-
return path.join(yield this.getTempDir(), AndroidDeviceHashService.HASH_FILE_NAME);
|
|
104
|
-
});
|
|
80
|
+
async getHashFileLocalPath() {
|
|
81
|
+
return path.join(await this.getTempDir(), AndroidDeviceHashService.HASH_FILE_NAME);
|
|
105
82
|
}
|
|
106
83
|
getTempDir() {
|
|
107
84
|
return this.$tempService.mkdirSync(`android-device-hash-service-${this.appIdentifier}`);
|
|
108
85
|
}
|
|
109
|
-
downloadHashFileFromDevice() {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
return hashFileLocalPath;
|
|
120
|
-
});
|
|
86
|
+
async downloadHashFileFromDevice() {
|
|
87
|
+
const hashFileLocalPath = await this.getHashFileLocalPath();
|
|
88
|
+
if (!this.$fs.exists(hashFileLocalPath)) {
|
|
89
|
+
await this.adb.executeCommand([
|
|
90
|
+
"pull",
|
|
91
|
+
this.hashFileDevicePath,
|
|
92
|
+
await this.getTempDir(),
|
|
93
|
+
]);
|
|
94
|
+
}
|
|
95
|
+
return hashFileLocalPath;
|
|
121
96
|
}
|
|
122
97
|
}
|
|
98
|
+
exports.AndroidDeviceHashService = AndroidDeviceHashService;
|
|
123
99
|
AndroidDeviceHashService.HASH_FILE_NAME = "hashes";
|
|
124
100
|
__decorate([
|
|
125
101
|
(0, decorators_1.cache)()
|
|
@@ -130,4 +106,3 @@ __decorate([
|
|
|
130
106
|
__decorate([
|
|
131
107
|
(0, decorators_1.cache)()
|
|
132
108
|
], AndroidDeviceHashService.prototype, "getTempDir", null);
|
|
133
|
-
exports.AndroidDeviceHashService = AndroidDeviceHashService;
|
|
@@ -5,15 +5,6 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
5
5
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
6
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
7
|
};
|
|
8
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
9
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
10
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
11
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
12
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
13
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
14
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
15
|
-
});
|
|
16
|
-
};
|
|
17
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
9
|
exports.AndroidDevice = void 0;
|
|
19
10
|
const device_android_debug_bridge_1 = require("./device-android-debug-bridge");
|
|
@@ -33,52 +24,50 @@ class AndroidDevice {
|
|
|
33
24
|
this.$logcatHelper = $logcatHelper;
|
|
34
25
|
this.$injector = $injector;
|
|
35
26
|
}
|
|
36
|
-
init() {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
identifier: this.identifier,
|
|
40
|
-
});
|
|
41
|
-
this.applicationManager = this.$injector.resolve(applicationManagerPath.AndroidApplicationManager, { adb: this.adb, identifier: this.identifier });
|
|
42
|
-
this.fileSystem = this.$injector.resolve(fileSystemPath.AndroidDeviceFileSystem, { adb: this.adb });
|
|
43
|
-
let details = yield this.getDeviceDetails(["getprop"]);
|
|
44
|
-
if (!details || !details.name) {
|
|
45
|
-
details = yield this.getDeviceDetails(["cat", "/system/build.prop"]);
|
|
46
|
-
}
|
|
47
|
-
this.$logger.trace(details);
|
|
48
|
-
const adbStatusInfo = AndroidDevice.ADB_DEVICE_STATUS_INFO[this.status];
|
|
49
|
-
const type = yield this.getType();
|
|
50
|
-
let version = details.release;
|
|
51
|
-
if (version && version.toLowerCase() === "q") {
|
|
52
|
-
version = "10.0.0";
|
|
53
|
-
}
|
|
54
|
-
this.deviceInfo = {
|
|
55
|
-
identifier: this.identifier,
|
|
56
|
-
displayName: details.name,
|
|
57
|
-
model: details.model,
|
|
58
|
-
abis: [
|
|
59
|
-
...details["cpu.abilist64"].split(","),
|
|
60
|
-
...details["cpu.abilist32"].split(","),
|
|
61
|
-
],
|
|
62
|
-
version,
|
|
63
|
-
vendor: details.brand,
|
|
64
|
-
platform: this.$devicePlatformsConstants.Android,
|
|
65
|
-
status: adbStatusInfo ? adbStatusInfo.deviceStatus : this.status,
|
|
66
|
-
errorHelp: adbStatusInfo ? adbStatusInfo.errorHelp : "Unknown status",
|
|
67
|
-
isTablet: this.getIsTablet(details),
|
|
68
|
-
type,
|
|
69
|
-
connectionTypes: [constants_1.DeviceConnectionType.Local],
|
|
70
|
-
};
|
|
71
|
-
this.deviceInfo.connectionTypes = this.isEmulator
|
|
72
|
-
? [constants_1.DeviceConnectionType.Local]
|
|
73
|
-
: [constants_1.DeviceConnectionType.USB];
|
|
74
|
-
if (this.isEmulator) {
|
|
75
|
-
this.deviceInfo.displayName =
|
|
76
|
-
yield this.$androidEmulatorServices.getRunningEmulatorName(this.identifier);
|
|
77
|
-
this.deviceInfo.imageIdentifier =
|
|
78
|
-
yield this.$androidEmulatorServices.getRunningEmulatorImageIdentifier(this.identifier);
|
|
79
|
-
}
|
|
80
|
-
this.$logger.trace(this.deviceInfo);
|
|
27
|
+
async init() {
|
|
28
|
+
this.adb = this.$injector.resolve(device_android_debug_bridge_1.DeviceAndroidDebugBridge, {
|
|
29
|
+
identifier: this.identifier,
|
|
81
30
|
});
|
|
31
|
+
this.applicationManager = this.$injector.resolve(applicationManagerPath.AndroidApplicationManager, { adb: this.adb, identifier: this.identifier });
|
|
32
|
+
this.fileSystem = this.$injector.resolve(fileSystemPath.AndroidDeviceFileSystem, { adb: this.adb });
|
|
33
|
+
let details = await this.getDeviceDetails(["getprop"]);
|
|
34
|
+
if (!details || !details.name) {
|
|
35
|
+
details = await this.getDeviceDetails(["cat", "/system/build.prop"]);
|
|
36
|
+
}
|
|
37
|
+
this.$logger.trace(details);
|
|
38
|
+
const adbStatusInfo = AndroidDevice.ADB_DEVICE_STATUS_INFO[this.status];
|
|
39
|
+
const type = await this.getType();
|
|
40
|
+
let version = details.release;
|
|
41
|
+
if (version && version.toLowerCase() === "q") {
|
|
42
|
+
version = "10.0.0";
|
|
43
|
+
}
|
|
44
|
+
this.deviceInfo = {
|
|
45
|
+
identifier: this.identifier,
|
|
46
|
+
displayName: details.name,
|
|
47
|
+
model: details.model,
|
|
48
|
+
abis: [
|
|
49
|
+
...details["cpu.abilist64"].split(","),
|
|
50
|
+
...details["cpu.abilist32"].split(","),
|
|
51
|
+
],
|
|
52
|
+
version,
|
|
53
|
+
vendor: details.brand,
|
|
54
|
+
platform: this.$devicePlatformsConstants.Android,
|
|
55
|
+
status: adbStatusInfo ? adbStatusInfo.deviceStatus : this.status,
|
|
56
|
+
errorHelp: adbStatusInfo ? adbStatusInfo.errorHelp : "Unknown status",
|
|
57
|
+
isTablet: this.getIsTablet(details),
|
|
58
|
+
type,
|
|
59
|
+
connectionTypes: [constants_1.DeviceConnectionType.Local],
|
|
60
|
+
};
|
|
61
|
+
this.deviceInfo.connectionTypes = this.isEmulator
|
|
62
|
+
? [constants_1.DeviceConnectionType.Local]
|
|
63
|
+
: [constants_1.DeviceConnectionType.USB];
|
|
64
|
+
if (this.isEmulator) {
|
|
65
|
+
this.deviceInfo.displayName =
|
|
66
|
+
await this.$androidEmulatorServices.getRunningEmulatorName(this.identifier);
|
|
67
|
+
this.deviceInfo.imageIdentifier =
|
|
68
|
+
await this.$androidEmulatorServices.getRunningEmulatorImageIdentifier(this.identifier);
|
|
69
|
+
}
|
|
70
|
+
this.$logger.trace(this.deviceInfo);
|
|
82
71
|
}
|
|
83
72
|
get isEmulator() {
|
|
84
73
|
return this.deviceInfo.type === constants.DeviceTypes.Emulator;
|
|
@@ -86,56 +75,51 @@ class AndroidDevice {
|
|
|
86
75
|
get isOnlyWiFiConnected() {
|
|
87
76
|
return false;
|
|
88
77
|
}
|
|
89
|
-
openDeviceLogStream() {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
}
|
|
97
|
-
});
|
|
78
|
+
async openDeviceLogStream() {
|
|
79
|
+
if (this.deviceInfo.status === constants.CONNECTED_STATUS) {
|
|
80
|
+
await this.$logcatHelper.start({
|
|
81
|
+
deviceIdentifier: this.identifier,
|
|
82
|
+
keepSingleProcess: true,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
98
85
|
}
|
|
99
86
|
detach() {
|
|
100
87
|
if (this.isEmulator) {
|
|
101
88
|
this.$androidEmulatorServices.detach(this.deviceInfo);
|
|
102
89
|
}
|
|
103
90
|
}
|
|
104
|
-
getDeviceDetails(shellCommandArgs) {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
return parsedDetails;
|
|
122
|
-
});
|
|
91
|
+
async getDeviceDetails(shellCommandArgs) {
|
|
92
|
+
const parsedDetails = {};
|
|
93
|
+
this.$logger.trace(`Trying to get information for Android device. Command is: ${shellCommandArgs}`);
|
|
94
|
+
try {
|
|
95
|
+
const details = await this.adb.executeShellCommand(shellCommandArgs);
|
|
96
|
+
details.split(/\r?\n|\r/).forEach((value) => {
|
|
97
|
+
const match = /(?:\[?ro\.build\.version|ro\.product|ro\.build)\.(.+?)]?(?:\:|=)(?:\s*?\[)?(.*?)]?$/.exec(value);
|
|
98
|
+
if (match) {
|
|
99
|
+
parsedDetails[match[1]] = match[2];
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
this.$logger.trace(`Error while getting details from Android device. Command is: ${shellCommandArgs}. Error is: ${err}`);
|
|
105
|
+
}
|
|
106
|
+
this.$logger.trace(parsedDetails);
|
|
107
|
+
return parsedDetails;
|
|
123
108
|
}
|
|
124
109
|
getIsTablet(details) {
|
|
125
110
|
return (details &&
|
|
126
111
|
(_.startsWith(details.release, "3.") ||
|
|
127
112
|
_.includes((details.characteristics || "").toLowerCase(), "tablet")));
|
|
128
113
|
}
|
|
129
|
-
getType() {
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
return constants.DeviceTypes.Device;
|
|
136
|
-
});
|
|
114
|
+
async getType() {
|
|
115
|
+
const runningEmulatorIds = await this.$androidEmulatorServices.getRunningEmulatorIds();
|
|
116
|
+
if (_.find(runningEmulatorIds, (emulatorId) => emulatorId === this.identifier)) {
|
|
117
|
+
return constants.DeviceTypes.Emulator;
|
|
118
|
+
}
|
|
119
|
+
return constants.DeviceTypes.Device;
|
|
137
120
|
}
|
|
138
121
|
}
|
|
122
|
+
exports.AndroidDevice = AndroidDevice;
|
|
139
123
|
AndroidDevice.ADB_DEVICE_STATUS_INFO = {
|
|
140
124
|
device: {
|
|
141
125
|
errorHelp: null,
|
|
@@ -161,4 +145,3 @@ AndroidDevice.ADB_DEVICE_STATUS_INFO = {
|
|
|
161
145
|
__decorate([
|
|
162
146
|
(0, decorators_1.cache)()
|
|
163
147
|
], AndroidDevice.prototype, "init", null);
|
|
164
|
-
exports.AndroidDevice = AndroidDevice;
|