nativescript 8.9.0-dev.2 → 8.9.0-dev.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/config/test-deps-versions-generated.json +1 -1
- package/docs/man_pages/project/configuration/widget-ios.md +24 -0
- package/docs/man_pages/project/configuration/widget.md +24 -0
- package/docs/man_pages/start.md +1 -1
- package/lib/android-tools-info.js +11 -22
- package/lib/base-package-manager.js +53 -70
- package/lib/bun-package-manager.js +75 -98
- package/lib/color.js +4 -4
- 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 +54 -67
- package/lib/commands/build.js +55 -87
- package/lib/commands/clean.js +169 -184
- package/lib/commands/command-base.js +14 -27
- package/lib/commands/config.js +49 -68
- package/lib/commands/create-project.js +215 -234
- package/lib/commands/debug.js +66 -88
- package/lib/commands/deploy.js +28 -44
- package/lib/commands/embedding/embed.js +37 -56
- 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 +49 -60
- 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 +31 -44
- package/lib/commands/plugin/create-plugin.js +114 -137
- package/lib/commands/plugin/list-plugins.js +22 -33
- package/lib/commands/plugin/remove-plugin.js +21 -34
- package/lib/commands/plugin/update-plugin.js +20 -33
- package/lib/commands/post-install.js +25 -38
- package/lib/commands/prepare.js +19 -35
- package/lib/commands/preview.js +50 -63
- package/lib/commands/remove-platform.js +7 -18
- package/lib/commands/resources/resources-update.js +14 -27
- package/lib/commands/run.js +55 -76
- package/lib/commands/start.js +6 -19
- package/lib/commands/test-init.js +126 -137
- package/lib/commands/test.js +72 -95
- package/lib/commands/typings.js +126 -142
- package/lib/commands/update-platform.js +26 -39
- package/lib/commands/update.js +31 -44
- package/lib/commands/widget.js +408 -357
- 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 +29 -42
- package/lib/common/commands/autocompletion.js +41 -58
- package/lib/common/commands/device/device-log-stream.js +12 -23
- package/lib/common/commands/device/get-file.js +23 -34
- 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 +24 -35
- package/lib/common/commands/device/put-file.js +23 -34
- 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 +27 -42
- package/lib/common/commands/proxy/proxy-base.js +11 -22
- 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 +84 -101
- package/lib/common/errors.js +92 -107
- package/lib/common/file-system.js +110 -132
- package/lib/common/header.js +1 -2
- package/lib/common/helpers.js +149 -178
- package/lib/common/host-info.js +40 -53
- package/lib/common/http-client.js +104 -119
- 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 +4 -4
- package/lib/common/mobile/android/android-application-manager.js +138 -159
- package/lib/common/mobile/android/android-debug-bridge-result-handler.js +1 -1
- package/lib/common/mobile/android/android-debug-bridge.js +92 -117
- package/lib/common/mobile/android/android-device-file-system.js +101 -134
- package/lib/common/mobile/android/android-device-hash-service.js +52 -77
- package/lib/common/mobile/android/android-device.js +73 -90
- 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 +78 -99
- package/lib/common/mobile/android/device-android-debug-bridge.js +13 -29
- package/lib/common/mobile/android/genymotion/genymotion-service.js +94 -121
- package/lib/common/mobile/android/genymotion/virtualbox-service.js +74 -91
- package/lib/common/mobile/android/logcat-helper.js +114 -133
- package/lib/common/mobile/application-manager-base.js +89 -112
- 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 +106 -143
- 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 +66 -95
- package/lib/common/mobile/ios/simulator/ios-sim-resolver.js +1 -1
- package/lib/common/mobile/ios/simulator/ios-simulator-application-manager.js +61 -90
- package/lib/common/mobile/ios/simulator/ios-simulator-device.js +31 -47
- 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 +44 -63
- package/lib/common/mobile/mobile-core/android-emulator-discovery.js +23 -34
- package/lib/common/mobile/mobile-core/android-process-service.js +174 -213
- package/lib/common/mobile/mobile-core/device-discovery.js +2 -13
- package/lib/common/mobile/mobile-core/devices-service.js +400 -450
- package/lib/common/mobile/mobile-core/ios-device-discovery.js +25 -36
- package/lib/common/mobile/mobile-core/ios-simulator-discovery.js +49 -64
- 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/prompter.js +91 -106
- package/lib/common/queue.js +9 -20
- package/lib/common/services/auto-completion-service.js +40 -53
- package/lib/common/services/cancellation.js +17 -28
- package/lib/common/services/commands-service.js +156 -179
- package/lib/common/services/help-service.js +130 -155
- package/lib/common/services/hooks-service.js +99 -114
- package/lib/common/services/ios-notification-service.js +21 -34
- package/lib/common/services/json-file-settings-service.js +56 -75
- 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 +6 -17
- package/lib/common/services/net-service.js +92 -109
- 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 +25 -38
- package/lib/config.js +41 -56
- package/lib/constants.js +24 -24
- package/lib/controllers/build-controller.js +82 -99
- package/lib/controllers/debug-controller.js +111 -132
- package/lib/controllers/deploy-controller.js +15 -23
- package/lib/controllers/migrate-controller.js +780 -853
- package/lib/controllers/platform-controller.js +74 -89
- package/lib/controllers/prepare-controller.js +241 -270
- package/lib/controllers/run-controller.js +411 -425
- package/lib/controllers/update-controller-base.js +16 -29
- package/lib/controllers/update-controller.js +101 -126
- package/lib/data/prepare-data.js +4 -1
- package/lib/definitions/project.d.ts +24 -24
- 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 +155 -170
- package/lib/device-sockets/ios/notification.js +1 -1
- package/lib/device-sockets/ios/socket-request-executor.js +26 -41
- package/lib/helpers/android-bundle-validator-helper.js +1 -1
- package/lib/helpers/deploy-command-helper.js +44 -49
- package/lib/helpers/key-command-helper.js +4 -13
- package/lib/helpers/livesync-command-helper.js +138 -153
- 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 +103 -124
- package/lib/key-commands/index.js +150 -200
- package/lib/nativescript-cli.js +5 -14
- package/lib/node-package-manager.js +90 -113
- package/lib/options.js +4 -13
- package/lib/package-installation-manager.js +132 -167
- package/lib/package-manager.js +64 -87
- package/lib/platform-command-param.js +4 -15
- package/lib/pnpm-package-manager.js +60 -79
- 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 +165 -201
- 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 +10 -21
- package/lib/services/android/gradle-build-service.js +22 -35
- package/lib/services/android/gradle-command-service.js +22 -35
- package/lib/services/android-device-debug-service.js +92 -119
- package/lib/services/android-plugin-build-service.js +219 -245
- package/lib/services/android-project-service.js +134 -179
- package/lib/services/android-resources-migration-service.js +57 -70
- package/lib/services/apple-portal/apple-portal-application-service.js +46 -63
- package/lib/services/apple-portal/apple-portal-session-service.js +196 -215
- package/lib/services/apple-portal/srp/srp-wrapper.js +45 -60
- package/lib/services/assets-generation/assets-generation-service.js +114 -128
- 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 +124 -145
- package/lib/services/device/device-install-app-service.js +54 -71
- package/lib/services/doctor-service.js +106 -125
- package/lib/services/extensibility-service.js +87 -106
- package/lib/services/files-hash-service.js +26 -43
- package/lib/services/hmr-status-service.js +1 -1
- package/lib/services/initialize-service.js +38 -51
- package/lib/services/ios/export-options-plist-service.js +41 -54
- package/lib/services/ios/ios-signing-service.js +171 -190
- package/lib/services/ios/spm-service.js +52 -65
- 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 +52 -71
- package/lib/services/ios-debugger-port-service.js +24 -37
- 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 +530 -591
- package/lib/services/ios-provision-service.js +110 -131
- package/lib/services/ios-watch-app-service.js +21 -32
- package/lib/services/ip-service.js +39 -54
- 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 +121 -150
- package/lib/services/livesync/android-device-livesync-sockets-service.js +123 -154
- package/lib/services/livesync/android-livesync-service.js +14 -35
- package/lib/services/livesync/android-livesync-tool.js +90 -113
- package/lib/services/livesync/device-livesync-service-base.js +16 -29
- package/lib/services/livesync/ios-device-livesync-service.js +120 -149
- package/lib/services/livesync/ios-livesync-service.js +43 -59
- package/lib/services/livesync/platform-livesync-service-base.js +98 -123
- package/lib/services/log-parser-service.js +1 -1
- package/lib/services/log-source-map-service.js +31 -42
- package/lib/services/marking-mode-service.js +17 -30
- package/lib/services/npm-config-service.js +1 -1
- package/lib/services/pacote-service.js +54 -69
- package/lib/services/performance-service.js +1 -1
- package/lib/services/platform/add-platform-service.js +57 -78
- package/lib/services/platform/platform-validation-service.js +22 -33
- package/lib/services/platform/prepare-native-platform-service.js +51 -64
- package/lib/services/platform-environment-requirements.js +27 -38
- package/lib/services/plugins-service.js +126 -151
- package/lib/services/project-backup-service.js +1 -1
- package/lib/services/project-changes-service.js +126 -143
- package/lib/services/project-cleanup-service.js +65 -78
- package/lib/services/project-config-service.js +78 -88
- package/lib/services/project-data-service.js +112 -129
- package/lib/services/project-name-service.js +28 -43
- package/lib/services/project-service.js +90 -109
- 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 +15 -26
- package/lib/services/test-execution-service.js +64 -77
- package/lib/services/test-initialization-service.js +2 -2
- package/lib/services/timeline-profiler-service.js +1 -1
- package/lib/services/versions-service.js +120 -139
- package/lib/services/webpack/webpack-compiler-service.js +228 -251
- 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 +62 -81
- package/package.json +67 -82
- package/node_modules/@npmcli/move-file/LICENSE.md +0 -22
- package/node_modules/@npmcli/move-file/README.md +0 -69
- package/node_modules/@npmcli/move-file/lib/index.js +0 -185
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/LICENSE +0 -21
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/bin/cmd.js +0 -68
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/index.js +0 -31
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/find-made.js +0 -29
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/mkdirp-manual.js +0 -64
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/mkdirp-native.js +0 -39
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/opts-arg.js +0 -23
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/path-arg.js +0 -29
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/use-native.js +0 -10
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/package.json +0 -44
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/readme.markdown +0 -266
- package/node_modules/@npmcli/move-file/package.json +0 -47
- package/node_modules/balanced-match/.github/FUNDING.yml +0 -2
- package/node_modules/balanced-match/LICENSE.md +0 -21
- package/node_modules/balanced-match/README.md +0 -97
- package/node_modules/balanced-match/index.js +0 -62
- package/node_modules/balanced-match/package.json +0 -48
- package/node_modules/concat-map/.travis.yml +0 -4
- package/node_modules/concat-map/LICENSE +0 -18
- package/node_modules/concat-map/README.markdown +0 -62
- package/node_modules/concat-map/example/map.js +0 -6
- package/node_modules/concat-map/index.js +0 -13
- package/node_modules/concat-map/package.json +0 -43
- package/node_modules/concat-map/test/map.js +0 -39
- package/node_modules/fs.realpath/LICENSE +0 -43
- package/node_modules/fs.realpath/README.md +0 -33
- package/node_modules/fs.realpath/index.js +0 -66
- package/node_modules/fs.realpath/old.js +0 -303
- package/node_modules/fs.realpath/package.json +0 -26
- package/node_modules/inflight/LICENSE +0 -15
- package/node_modules/inflight/README.md +0 -37
- package/node_modules/inflight/inflight.js +0 -54
- package/node_modules/inflight/package.json +0 -29
- package/node_modules/inherits/LICENSE +0 -16
- package/node_modules/inherits/README.md +0 -42
- package/node_modules/inherits/inherits.js +0 -9
- package/node_modules/inherits/inherits_browser.js +0 -27
- package/node_modules/inherits/package.json +0 -29
- package/node_modules/once/LICENSE +0 -15
- package/node_modules/once/README.md +0 -79
- package/node_modules/once/once.js +0 -42
- package/node_modules/once/package.json +0 -33
- package/node_modules/path-is-absolute/index.js +0 -20
- package/node_modules/path-is-absolute/license +0 -21
- package/node_modules/path-is-absolute/package.json +0 -43
- package/node_modules/path-is-absolute/readme.md +0 -59
- package/node_modules/rimraf/LICENSE +0 -15
- package/node_modules/rimraf/README.md +0 -101
- package/node_modules/rimraf/bin.js +0 -68
- package/node_modules/rimraf/node_modules/brace-expansion/LICENSE +0 -21
- package/node_modules/rimraf/node_modules/brace-expansion/README.md +0 -129
- package/node_modules/rimraf/node_modules/brace-expansion/index.js +0 -201
- package/node_modules/rimraf/node_modules/brace-expansion/package.json +0 -47
- package/node_modules/rimraf/node_modules/glob/LICENSE +0 -21
- package/node_modules/rimraf/node_modules/glob/README.md +0 -378
- package/node_modules/rimraf/node_modules/glob/common.js +0 -238
- package/node_modules/rimraf/node_modules/glob/glob.js +0 -790
- package/node_modules/rimraf/node_modules/glob/package.json +0 -55
- package/node_modules/rimraf/node_modules/glob/sync.js +0 -486
- package/node_modules/rimraf/node_modules/minimatch/LICENSE +0 -15
- package/node_modules/rimraf/node_modules/minimatch/README.md +0 -230
- package/node_modules/rimraf/node_modules/minimatch/minimatch.js +0 -947
- package/node_modules/rimraf/node_modules/minimatch/package.json +0 -33
- package/node_modules/rimraf/package.json +0 -32
- package/node_modules/rimraf/rimraf.js +0 -360
- package/node_modules/stringify-package/LICENSE +0 -13
- package/node_modules/stringify-package/README.md +0 -55
- package/node_modules/stringify-package/index.js +0 -18
- package/node_modules/stringify-package/package.json +0 -38
- package/node_modules/wrappy/LICENSE +0 -15
- package/node_modules/wrappy/README.md +0 -36
- package/node_modules/wrappy/package.json +0 -29
- package/node_modules/wrappy/wrappy.js +0 -33
|
@@ -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,145 +17,121 @@ 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
|
-
// starting from Android 9, adb push is throwing an exception when there are subfolders
|
|
98
|
-
// the check could be removed when we start supporting only runtime versions with sockets
|
|
99
|
-
const minAndroidWithoutAdbPushDir = "9.0.0";
|
|
100
|
-
const isAdbPushDirSupported = semver.lt(semver.coerce(deviceAppData.device.deviceInfo.version), minAndroidWithoutAdbPushDir);
|
|
101
|
-
const deviceProjectDir = yield deviceAppData.getDeviceProjectRootPath();
|
|
102
|
-
let transferredLocalToDevicePaths = [];
|
|
103
|
-
if (isAdbPushDirSupported) {
|
|
104
|
-
yield this.adb.pushFile(projectFilesPath, deviceProjectDir);
|
|
105
|
-
transferredLocalToDevicePaths = localToDevicePaths;
|
|
106
|
-
}
|
|
107
|
-
else {
|
|
108
|
-
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);
|
|
109
65
|
}
|
|
110
|
-
if (
|
|
111
|
-
const
|
|
112
|
-
|
|
66
|
+
else if (fstat.isDirectory()) {
|
|
67
|
+
const dirToChmod = localToDevicePathData.getDevicePath();
|
|
68
|
+
directoriesToChmod.push(dirToChmod);
|
|
113
69
|
}
|
|
114
|
-
|
|
115
|
-
|
|
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;
|
|
116
75
|
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
76
|
+
async transferDirectory(deviceAppData, localToDevicePaths, projectFilesPath) {
|
|
77
|
+
// starting from Android 9, adb push is throwing an exception when there are subfolders
|
|
78
|
+
// the check could be removed when we start supporting only runtime versions with sockets
|
|
79
|
+
const minAndroidWithoutAdbPushDir = "9.0.0";
|
|
80
|
+
const isAdbPushDirSupported = semver.lt(semver.coerce(deviceAppData.device.deviceInfo.version), minAndroidWithoutAdbPushDir);
|
|
81
|
+
const deviceProjectDir = await deviceAppData.getDeviceProjectRootPath();
|
|
82
|
+
let transferredLocalToDevicePaths = [];
|
|
83
|
+
if (isAdbPushDirSupported) {
|
|
84
|
+
await this.adb.pushFile(projectFilesPath, deviceProjectDir);
|
|
85
|
+
transferredLocalToDevicePaths = localToDevicePaths;
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
transferredLocalToDevicePaths = await this.pushFiles(localToDevicePaths);
|
|
89
|
+
}
|
|
90
|
+
if (transferredLocalToDevicePaths.length) {
|
|
91
|
+
const filesToChmodOnDevice = transferredLocalToDevicePaths.map((localToDevicePath) => localToDevicePath.getDevicePath());
|
|
92
|
+
await this.chmodFiles(deviceProjectDir, filesToChmodOnDevice);
|
|
93
|
+
}
|
|
94
|
+
return transferredLocalToDevicePaths;
|
|
123
95
|
}
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
const transferFileAction = (localToDevicePathData) => __awaiter(this, void 0, void 0, function* () {
|
|
129
|
-
transferredFiles.push(localToDevicePathData);
|
|
130
|
-
yield this.transferFile(localToDevicePathData.getLocalPath(), localToDevicePathData.getDevicePath());
|
|
131
|
-
});
|
|
132
|
-
yield (0, helpers_1.executeActionByChunks)(localToDevicePaths, constants_1.DEFAULT_CHUNK_SIZE, transferFileAction);
|
|
133
|
-
return transferredFiles;
|
|
134
|
-
});
|
|
96
|
+
async chmodFiles(deviceProjectRoot, filesToChmodOnDevice) {
|
|
97
|
+
const commandsDeviceFilePath = this.$mobileHelper.buildDevicePath(deviceProjectRoot, "nativescript.commands.sh");
|
|
98
|
+
await this.createFileOnDevice(commandsDeviceFilePath, `chmod 0777 ${filesToChmodOnDevice.join(" ")}`);
|
|
99
|
+
await this.adb.executeShellCommand([commandsDeviceFilePath]);
|
|
135
100
|
}
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
101
|
+
async pushFiles(localToDevicePaths) {
|
|
102
|
+
this.$logger.trace("Changed hashes are:", localToDevicePaths);
|
|
103
|
+
const transferredFiles = [];
|
|
104
|
+
const transferFileAction = async (localToDevicePathData) => {
|
|
105
|
+
transferredFiles.push(localToDevicePathData);
|
|
106
|
+
await this.transferFile(localToDevicePathData.getLocalPath(), localToDevicePathData.getDevicePath());
|
|
107
|
+
};
|
|
108
|
+
await (0, helpers_1.executeActionByChunks)(localToDevicePaths, constants_1.DEFAULT_CHUNK_SIZE, transferFileAction);
|
|
109
|
+
return transferredFiles;
|
|
110
|
+
}
|
|
111
|
+
async transferFile(localPath, devicePath) {
|
|
112
|
+
this.$logger.trace(`Transfering ${localPath} to ${devicePath}`);
|
|
113
|
+
const stats = this.$fs.getFsStats(localPath);
|
|
114
|
+
if (stats.isDirectory()) {
|
|
115
|
+
await this.adb.executeShellCommand(["mkdir", path.dirname(devicePath)]);
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
await this.adb.pushFile(localPath, devicePath);
|
|
119
|
+
}
|
|
147
120
|
}
|
|
148
|
-
createFileOnDevice(deviceFilePath, fileContent) {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
yield this.adb.executeShellCommand(["chmod", "0777", deviceFilePath]);
|
|
156
|
-
});
|
|
121
|
+
async createFileOnDevice(deviceFilePath, fileContent) {
|
|
122
|
+
const hostTmpDir = await this.$tempService.mkdirSync("application-");
|
|
123
|
+
const commandsFileHostPath = path.join(hostTmpDir, "temp.commands.file");
|
|
124
|
+
this.$fs.writeFile(commandsFileHostPath, fileContent);
|
|
125
|
+
// copy it to the device
|
|
126
|
+
await this.transferFile(commandsFileHostPath, deviceFilePath);
|
|
127
|
+
await this.adb.executeShellCommand(["chmod", "0777", deviceFilePath]);
|
|
157
128
|
}
|
|
158
|
-
deleteFile(deviceFilePath, appIdentifier) {
|
|
159
|
-
|
|
160
|
-
yield this.adb.executeShellCommand(["rm", "-rf", deviceFilePath]);
|
|
161
|
-
});
|
|
129
|
+
async deleteFile(deviceFilePath, appIdentifier) {
|
|
130
|
+
await this.adb.executeShellCommand(["rm", "-rf", deviceFilePath]);
|
|
162
131
|
}
|
|
163
|
-
updateHashesOnDevice(hashes, appIdentifier) {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
yield deviceHashService.uploadHashFileToDevice(hashes);
|
|
167
|
-
});
|
|
132
|
+
async updateHashesOnDevice(hashes, appIdentifier) {
|
|
133
|
+
const deviceHashService = this.getDeviceHashService(appIdentifier);
|
|
134
|
+
await deviceHashService.uploadHashFileToDevice(hashes);
|
|
168
135
|
}
|
|
169
136
|
getDeviceHashService(appIdentifier) {
|
|
170
137
|
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,51 +23,41 @@ 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
|
-
|
|
77
|
-
|
|
78
|
-
return initialShasums;
|
|
79
|
-
});
|
|
50
|
+
async generateHashesFromLocalToDevicePaths(localToDevicePaths, initialShasums = {}) {
|
|
51
|
+
const action = async (localToDevicePathData) => {
|
|
52
|
+
const localPath = localToDevicePathData.getLocalPath();
|
|
53
|
+
if (this.$fs.getFsStats(localPath).isFile()) {
|
|
54
|
+
// TODO: Use relative to project path for key
|
|
55
|
+
// This will speed up livesync on the same device for the same project on different PCs.
|
|
56
|
+
initialShasums[localPath] = await this.$fs.getFileShasum(localPath);
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
await (0, helpers_1.executeActionByChunks)(localToDevicePaths, constants_1.DEFAULT_CHUNK_SIZE, action);
|
|
60
|
+
return initialShasums;
|
|
80
61
|
}
|
|
81
62
|
getDevicePaths(localToDevicePaths) {
|
|
82
63
|
return _.map(localToDevicePaths, (localToDevicePathData) => {
|
|
@@ -89,39 +70,34 @@ class AndroidDeviceHashService {
|
|
|
89
70
|
}
|
|
90
71
|
return _.omitBy(currentShasums, (hash, pathToFile) => !!oldShasums[pathToFile] && oldShasums[pathToFile] === hash);
|
|
91
72
|
}
|
|
92
|
-
removeHashes(localToDevicePaths) {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
return false;
|
|
101
|
-
});
|
|
73
|
+
async removeHashes(localToDevicePaths) {
|
|
74
|
+
const oldShasums = await this.getShasumsFromDevice();
|
|
75
|
+
if (oldShasums) {
|
|
76
|
+
const fileToShasumDictionary = _.omit(oldShasums, localToDevicePaths.map((ldp) => ldp.getLocalPath()));
|
|
77
|
+
await this.uploadHashFileToDevice(fileToShasumDictionary);
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
return false;
|
|
102
81
|
}
|
|
103
|
-
getHashFileLocalPath() {
|
|
104
|
-
return
|
|
105
|
-
return path.join(yield this.getTempDir(), AndroidDeviceHashService.HASH_FILE_NAME);
|
|
106
|
-
});
|
|
82
|
+
async getHashFileLocalPath() {
|
|
83
|
+
return path.join(await this.getTempDir(), AndroidDeviceHashService.HASH_FILE_NAME);
|
|
107
84
|
}
|
|
108
85
|
getTempDir() {
|
|
109
86
|
return this.$tempService.mkdirSync(`android-device-hash-service-${this.appIdentifier}`);
|
|
110
87
|
}
|
|
111
|
-
downloadHashFileFromDevice() {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
return hashFileLocalPath;
|
|
122
|
-
});
|
|
88
|
+
async downloadHashFileFromDevice() {
|
|
89
|
+
const hashFileLocalPath = await this.getHashFileLocalPath();
|
|
90
|
+
if (!this.$fs.exists(hashFileLocalPath)) {
|
|
91
|
+
await this.adb.executeCommand([
|
|
92
|
+
"pull",
|
|
93
|
+
this.hashFileDevicePath,
|
|
94
|
+
await this.getTempDir(),
|
|
95
|
+
]);
|
|
96
|
+
}
|
|
97
|
+
return hashFileLocalPath;
|
|
123
98
|
}
|
|
124
99
|
}
|
|
100
|
+
exports.AndroidDeviceHashService = AndroidDeviceHashService;
|
|
125
101
|
AndroidDeviceHashService.HASH_FILE_NAME = "hashes";
|
|
126
102
|
__decorate([
|
|
127
103
|
(0, decorators_1.cache)()
|
|
@@ -132,5 +108,4 @@ __decorate([
|
|
|
132
108
|
__decorate([
|
|
133
109
|
(0, decorators_1.cache)()
|
|
134
110
|
], AndroidDeviceHashService.prototype, "getTempDir", null);
|
|
135
|
-
exports.AndroidDeviceHashService = AndroidDeviceHashService;
|
|
136
111
|
//# sourceMappingURL=android-device-hash-service.js.map
|
|
@@ -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,48 +24,46 @@ 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
|
-
// In older CLI versions we are calling cat /system/build.prop to get details.
|
|
46
|
-
// Keep this logic for compatibility and possibly for devices for which getprop is not working
|
|
47
|
-
details = yield this.getDeviceDetails(["cat", "/system/build.prop"]);
|
|
48
|
-
}
|
|
49
|
-
this.$logger.trace(details);
|
|
50
|
-
const adbStatusInfo = AndroidDevice.ADB_DEVICE_STATUS_INFO[this.status];
|
|
51
|
-
const type = yield this.getType();
|
|
52
|
-
let version = details.release;
|
|
53
|
-
if (version && version.toLowerCase() === "q") {
|
|
54
|
-
version = "10.0.0";
|
|
55
|
-
}
|
|
56
|
-
this.deviceInfo = {
|
|
57
|
-
identifier: this.identifier,
|
|
58
|
-
displayName: details.name,
|
|
59
|
-
model: details.model,
|
|
60
|
-
version,
|
|
61
|
-
vendor: details.brand,
|
|
62
|
-
platform: this.$devicePlatformsConstants.Android,
|
|
63
|
-
status: adbStatusInfo ? adbStatusInfo.deviceStatus : this.status,
|
|
64
|
-
errorHelp: adbStatusInfo ? adbStatusInfo.errorHelp : "Unknown status",
|
|
65
|
-
isTablet: this.getIsTablet(details),
|
|
66
|
-
type,
|
|
67
|
-
connectionTypes: [constants_1.DeviceConnectionType.Local],
|
|
68
|
-
};
|
|
69
|
-
this.deviceInfo.connectionTypes = this.isEmulator
|
|
70
|
-
? [constants_1.DeviceConnectionType.Local]
|
|
71
|
-
: [constants_1.DeviceConnectionType.USB];
|
|
72
|
-
if (this.isEmulator) {
|
|
73
|
-
this.deviceInfo.displayName = yield this.$androidEmulatorServices.getRunningEmulatorName(this.identifier);
|
|
74
|
-
this.deviceInfo.imageIdentifier = yield this.$androidEmulatorServices.getRunningEmulatorImageIdentifier(this.identifier);
|
|
75
|
-
}
|
|
76
|
-
this.$logger.trace(this.deviceInfo);
|
|
27
|
+
async init() {
|
|
28
|
+
this.adb = this.$injector.resolve(device_android_debug_bridge_1.DeviceAndroidDebugBridge, {
|
|
29
|
+
identifier: this.identifier,
|
|
77
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
|
+
// In older CLI versions we are calling cat /system/build.prop to get details.
|
|
36
|
+
// Keep this logic for compatibility and possibly for devices for which getprop is not working
|
|
37
|
+
details = await this.getDeviceDetails(["cat", "/system/build.prop"]);
|
|
38
|
+
}
|
|
39
|
+
this.$logger.trace(details);
|
|
40
|
+
const adbStatusInfo = AndroidDevice.ADB_DEVICE_STATUS_INFO[this.status];
|
|
41
|
+
const type = await this.getType();
|
|
42
|
+
let version = details.release;
|
|
43
|
+
if (version && version.toLowerCase() === "q") {
|
|
44
|
+
version = "10.0.0";
|
|
45
|
+
}
|
|
46
|
+
this.deviceInfo = {
|
|
47
|
+
identifier: this.identifier,
|
|
48
|
+
displayName: details.name,
|
|
49
|
+
model: details.model,
|
|
50
|
+
version,
|
|
51
|
+
vendor: details.brand,
|
|
52
|
+
platform: this.$devicePlatformsConstants.Android,
|
|
53
|
+
status: adbStatusInfo ? adbStatusInfo.deviceStatus : this.status,
|
|
54
|
+
errorHelp: adbStatusInfo ? adbStatusInfo.errorHelp : "Unknown status",
|
|
55
|
+
isTablet: this.getIsTablet(details),
|
|
56
|
+
type,
|
|
57
|
+
connectionTypes: [constants_1.DeviceConnectionType.Local],
|
|
58
|
+
};
|
|
59
|
+
this.deviceInfo.connectionTypes = this.isEmulator
|
|
60
|
+
? [constants_1.DeviceConnectionType.Local]
|
|
61
|
+
: [constants_1.DeviceConnectionType.USB];
|
|
62
|
+
if (this.isEmulator) {
|
|
63
|
+
this.deviceInfo.displayName = await this.$androidEmulatorServices.getRunningEmulatorName(this.identifier);
|
|
64
|
+
this.deviceInfo.imageIdentifier = await this.$androidEmulatorServices.getRunningEmulatorImageIdentifier(this.identifier);
|
|
65
|
+
}
|
|
66
|
+
this.$logger.trace(this.deviceInfo);
|
|
78
67
|
}
|
|
79
68
|
get isEmulator() {
|
|
80
69
|
return this.deviceInfo.type === constants.DeviceTypes.Emulator;
|
|
@@ -82,43 +71,39 @@ class AndroidDevice {
|
|
|
82
71
|
get isOnlyWiFiConnected() {
|
|
83
72
|
return false;
|
|
84
73
|
}
|
|
85
|
-
openDeviceLogStream() {
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
}
|
|
93
|
-
});
|
|
74
|
+
async openDeviceLogStream() {
|
|
75
|
+
if (this.deviceInfo.status === constants.CONNECTED_STATUS) {
|
|
76
|
+
await this.$logcatHelper.start({
|
|
77
|
+
deviceIdentifier: this.identifier,
|
|
78
|
+
keepSingleProcess: true,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
94
81
|
}
|
|
95
82
|
detach() {
|
|
96
83
|
if (this.isEmulator) {
|
|
97
84
|
this.$androidEmulatorServices.detach(this.deviceInfo);
|
|
98
85
|
}
|
|
99
86
|
}
|
|
100
|
-
getDeviceDetails(shellCommandArgs) {
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
return parsedDetails;
|
|
121
|
-
});
|
|
87
|
+
async getDeviceDetails(shellCommandArgs) {
|
|
88
|
+
const parsedDetails = {};
|
|
89
|
+
this.$logger.trace(`Trying to get information for Android device. Command is: ${shellCommandArgs}`);
|
|
90
|
+
try {
|
|
91
|
+
const details = await this.adb.executeShellCommand(shellCommandArgs);
|
|
92
|
+
details.split(/\r?\n|\r/).forEach((value) => {
|
|
93
|
+
// sample line is "ro.build.version.release=4.4" in /system/build.prop
|
|
94
|
+
// sample line from getprop is: [ro.build.version.release]: [6.0]
|
|
95
|
+
// NOTE: some props do not have value: [ro.build.version.base_os]: []
|
|
96
|
+
const match = /(?:\[?ro\.build\.version|ro\.product|ro\.build)\.(.+?)]?(?:\:|=)(?:\s*?\[)?(.*?)]?$/.exec(value);
|
|
97
|
+
if (match) {
|
|
98
|
+
parsedDetails[match[1]] = match[2];
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
catch (err) {
|
|
103
|
+
this.$logger.trace(`Error while getting details from Android device. Command is: ${shellCommandArgs}. Error is: ${err}`);
|
|
104
|
+
}
|
|
105
|
+
this.$logger.trace(parsedDetails);
|
|
106
|
+
return parsedDetails;
|
|
122
107
|
}
|
|
123
108
|
getIsTablet(details) {
|
|
124
109
|
//version 3.x.x (also known as Honeycomb) is a tablet only version
|
|
@@ -126,16 +111,15 @@ class AndroidDevice {
|
|
|
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
|
// http://stackoverflow.com/questions/31178195/what-does-adb-device-status-mean
|
|
140
124
|
AndroidDevice.ADB_DEVICE_STATUS_INFO = {
|
|
141
125
|
device: {
|
|
@@ -162,5 +146,4 @@ AndroidDevice.ADB_DEVICE_STATUS_INFO = {
|
|
|
162
146
|
__decorate([
|
|
163
147
|
(0, decorators_1.cache)()
|
|
164
148
|
], AndroidDevice.prototype, "init", null);
|
|
165
|
-
exports.AndroidDevice = AndroidDevice;
|
|
166
149
|
//# sourceMappingURL=android-device.js.map
|