nativescript 8.8.0 → 8.8.1
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/lib/android-tools-info.js +12 -0
- package/lib/base-package-manager.js +11 -1
- package/lib/bootstrap.js +5 -1
- package/lib/bun-package-manager.js +17 -1
- package/lib/color.js +3 -0
- package/lib/commands/add-platform.js +1 -0
- package/lib/commands/apple-login.js +1 -0
- package/lib/commands/appstore-list.js +1 -0
- package/lib/commands/appstore-upload.js +4 -0
- package/lib/commands/build.js +3 -2
- package/lib/commands/clean.js +22 -1
- package/lib/commands/command-base.js +1 -0
- package/lib/commands/config.js +3 -0
- package/lib/commands/create-project.js +6 -0
- package/lib/commands/debug.js +6 -1
- package/lib/commands/deploy.js +3 -2
- package/lib/commands/embedding/embed.js +7 -0
- package/lib/commands/extensibility/install-extension.js +1 -0
- package/lib/commands/extensibility/list-extensions.js +1 -0
- package/lib/commands/extensibility/uninstall-extension.js +1 -0
- package/lib/commands/fonts.js +1 -0
- package/lib/commands/generate-assets.js +1 -0
- package/lib/commands/generate-help.js +1 -0
- package/lib/commands/generate.js +12 -2
- package/lib/commands/info.js +1 -0
- package/lib/commands/install.js +1 -0
- package/lib/commands/list-platforms.js +1 -0
- package/lib/commands/migrate.js +1 -0
- package/lib/commands/native-add.js +5 -0
- package/lib/commands/platform-clean.js +1 -0
- package/lib/commands/plugin/add-plugin.js +1 -0
- package/lib/commands/plugin/build-plugin.js +1 -0
- package/lib/commands/plugin/create-plugin.js +5 -0
- package/lib/commands/plugin/list-plugins.js +1 -0
- package/lib/commands/plugin/remove-plugin.js +2 -0
- package/lib/commands/plugin/update-plugin.js +1 -0
- package/lib/commands/post-install.js +6 -0
- package/lib/commands/prepare.js +4 -3
- package/lib/commands/preview.js +2 -0
- package/lib/commands/remove-platform.js +1 -0
- package/lib/commands/resources/resources-update.js +2 -0
- package/lib/commands/run.js +1 -0
- package/lib/commands/setup.js +1 -0
- package/lib/commands/start.js +1 -0
- package/lib/commands/test-init.js +4 -0
- package/lib/commands/test.js +9 -2
- package/lib/commands/typings.js +2 -1
- package/lib/commands/update-platform.js +5 -0
- package/lib/commands/update.js +2 -0
- package/lib/common/bootstrap.js +1 -0
- package/lib/common/child-process.js +3 -0
- package/lib/common/codeGeneration/code-entity.js +1 -0
- package/lib/common/codeGeneration/code-printer.js +1 -0
- package/lib/common/command-params.js +1 -0
- package/lib/common/commands/analytics.js +3 -0
- package/lib/common/commands/autocompletion.js +3 -0
- package/lib/common/commands/device/device-log-stream.js +1 -0
- package/lib/common/commands/device/get-file.js +2 -0
- package/lib/common/commands/device/list-applications.js +1 -0
- package/lib/common/commands/device/list-devices.js +3 -0
- package/lib/common/commands/device/list-files.js +2 -0
- package/lib/common/commands/device/put-file.js +2 -0
- package/lib/common/commands/device/run-application.js +1 -0
- package/lib/common/commands/device/stop-application.js +1 -0
- package/lib/common/commands/device/uninstall-application.js +1 -0
- package/lib/common/commands/doctor.js +3 -2
- package/lib/common/commands/generate-messages.js +1 -0
- package/lib/common/commands/help.js +1 -0
- package/lib/common/commands/package-manager-get.js +1 -0
- package/lib/common/commands/package-manager-set.js +1 -0
- package/lib/common/commands/post-install.js +1 -0
- package/lib/common/commands/preuninstall.js +11 -2
- package/lib/common/commands/proxy/proxy-base.js +4 -0
- package/lib/common/commands/proxy/proxy-clear.js +1 -0
- package/lib/common/commands/proxy/proxy-get.js +1 -0
- package/lib/common/commands/proxy/proxy-set.js +1 -0
- package/lib/common/common-lib.js +1 -0
- package/lib/common/constants.js +11 -0
- package/lib/common/decorators.js +48 -0
- package/lib/common/dispatchers.js +10 -1
- package/lib/common/errors.js +13 -3
- package/lib/common/file-system.js +13 -2
- package/lib/common/header.js +3 -0
- package/lib/common/helpers.js +89 -3
- package/lib/common/host-info.js +4 -0
- package/lib/common/http-client.js +20 -0
- package/lib/common/logger/appenders/cli-appender.js +4 -0
- package/lib/common/logger/appenders/emit-appender.js +4 -0
- package/lib/common/logger/layouts/cli-layout.js +1 -0
- package/lib/common/logger/logger.js +5 -0
- package/lib/common/messages/messages.js +6 -0
- package/lib/common/mobile/android/android-application-manager.js +20 -1
- package/lib/common/mobile/android/android-debug-bridge-result-handler.js +1 -0
- package/lib/common/mobile/android/android-debug-bridge.js +6 -0
- package/lib/common/mobile/android/android-device-file-system.js +4 -0
- package/lib/common/mobile/android/android-device-hash-service.js +3 -0
- package/lib/common/mobile/android/android-device.js +8 -0
- package/lib/common/mobile/android/android-emulator-services.js +2 -1
- package/lib/common/mobile/android/android-ini-file-parser.js +9 -0
- package/lib/common/mobile/android/android-log-filter.js +4 -0
- package/lib/common/mobile/android/android-virtual-device-service.js +30 -1
- package/lib/common/mobile/android/device-android-debug-bridge.js +1 -0
- package/lib/common/mobile/android/genymotion/genymotion-service.js +5 -0
- package/lib/common/mobile/android/genymotion/virtualbox-service.js +11 -0
- package/lib/common/mobile/android/logcat-helper.js +13 -0
- package/lib/common/mobile/application-manager-base.js +6 -0
- package/lib/common/mobile/device-emitter.js +4 -0
- package/lib/common/mobile/device-log-emitter.js +1 -0
- package/lib/common/mobile/device-log-provider-base.js +1 -0
- package/lib/common/mobile/device-log-provider.js +23 -0
- package/lib/common/mobile/device-platforms-constants.js +1 -0
- package/lib/common/mobile/emulator-helper.js +4 -0
- package/lib/common/mobile/ios/device/ios-application-manager.js +3 -0
- package/lib/common/mobile/ios/device/ios-device-file-system.js +1 -0
- package/lib/common/mobile/ios/device/ios-device-operations.js +4 -0
- package/lib/common/mobile/ios/device/ios-device.js +4 -0
- package/lib/common/mobile/ios/ios-device-base.js +1 -0
- package/lib/common/mobile/ios/ios-device-product-name-mapper.js +2 -0
- package/lib/common/mobile/ios/ios-log-filter.js +1 -0
- package/lib/common/mobile/ios/simulator/ios-emulator-services.js +4 -0
- package/lib/common/mobile/ios/simulator/ios-sim-resolver.js +1 -0
- package/lib/common/mobile/ios/simulator/ios-simulator-application-manager.js +6 -0
- package/lib/common/mobile/ios/simulator/ios-simulator-device.js +5 -0
- package/lib/common/mobile/ios/simulator/ios-simulator-file-system.js +1 -0
- package/lib/common/mobile/ios/simulator/ios-simulator-log-provider.js +1 -0
- package/lib/common/mobile/local-to-device-path-data-factory.js +1 -0
- package/lib/common/mobile/log-filter.js +2 -0
- package/lib/common/mobile/logging-levels.js +1 -0
- package/lib/common/mobile/mobile-core/android-device-discovery.js +2 -0
- package/lib/common/mobile/mobile-core/android-emulator-discovery.js +3 -0
- package/lib/common/mobile/mobile-core/android-process-service.js +32 -0
- package/lib/common/mobile/mobile-core/device-discovery.js +1 -0
- package/lib/common/mobile/mobile-core/devices-service.js +69 -0
- package/lib/common/mobile/mobile-core/ios-device-discovery.js +2 -0
- package/lib/common/mobile/mobile-core/ios-simulator-discovery.js +3 -0
- package/lib/common/mobile/mobile-helper.js +1 -0
- package/lib/common/mobile/wp8/wp8-emulator-services.js +1 -0
- package/lib/common/opener.js +1 -0
- package/lib/common/os-info.js +1 -0
- package/lib/common/plist-parser.js +1 -0
- package/lib/common/project-helper.js +1 -0
- package/lib/common/prompter.js +9 -1
- package/lib/common/queue.js +1 -0
- package/lib/common/resource-loader.js +1 -0
- package/lib/common/services/auto-completion-service.js +13 -1
- package/lib/common/services/cancellation.js +2 -1
- package/lib/common/services/commands-service.js +17 -6
- package/lib/common/services/help-service.js +11 -3
- package/lib/common/services/hooks-service.js +13 -0
- package/lib/common/services/ios-notification-service.js +1 -0
- package/lib/common/services/json-file-settings-service.js +6 -0
- package/lib/common/services/lock-service.js +6 -0
- package/lib/common/services/message-contract-generator.js +1 -0
- package/lib/common/services/messages-service.js +1 -0
- package/lib/common/services/micro-templating-service.js +6 -0
- package/lib/common/services/net-service.js +3 -0
- package/lib/common/services/project-files-manager.js +5 -0
- package/lib/common/services/project-files-provider-base.js +1 -0
- package/lib/common/services/proxy-service.js +1 -0
- package/lib/common/services/qr.js +1 -0
- package/lib/common/services/settings-service.js +1 -0
- package/lib/common/services/xcode-select-service.js +1 -0
- package/lib/common/utils.js +1 -0
- package/lib/common/validators/project-name-validator.js +1 -0
- package/lib/common/validators/validation-result.js +1 -0
- package/lib/common/verify-node-version.js +8 -1
- package/lib/common/yok.js +32 -11
- package/lib/config.js +22 -1
- package/lib/constants-provider.js +1 -0
- package/lib/constants.js +53 -0
- package/lib/controllers/build-controller.js +4 -3
- package/lib/controllers/debug-controller.js +8 -3
- package/lib/controllers/deploy-controller.js +1 -0
- package/lib/controllers/migrate-controller.js +91 -3
- package/lib/controllers/platform-controller.js +9 -1
- package/lib/controllers/prepare-controller.js +17 -4
- package/lib/controllers/run-controller.js +17 -1
- package/lib/controllers/update-controller-base.js +1 -0
- package/lib/controllers/update-controller.js +11 -0
- package/lib/data/build-data.js +1 -0
- package/lib/data/controller-data-base.js +1 -0
- package/lib/data/debug-data.js +1 -0
- package/lib/data/platform-data.js +1 -0
- package/lib/data/prepare-data.js +1 -0
- package/lib/data/run-data.js +1 -0
- package/lib/detached-processes/cleanup-js-subprocess.js +8 -2
- package/lib/detached-processes/cleanup-process.js +18 -14
- package/lib/detached-processes/file-log-service.js +2 -1
- package/lib/device-path-provider.js +1 -0
- package/lib/device-sockets/ios/app-debug-socket-proxy-factory.js +7 -0
- package/lib/device-sockets/ios/notification.js +3 -0
- package/lib/device-sockets/ios/socket-request-executor.js +3 -0
- package/lib/helpers/android-bundle-validator-helper.js +2 -1
- package/lib/helpers/deploy-command-helper.js +1 -0
- package/lib/helpers/key-command-helper.js +4 -2
- package/lib/helpers/livesync-command-helper.js +4 -1
- package/lib/helpers/network-connectivity-validator.js +1 -0
- package/lib/helpers/options-track-helper.js +3 -2
- package/lib/helpers/package-path-helper.js +1 -0
- package/lib/helpers/platform-command-helper.js +7 -2
- package/lib/helpers/version-validator-helper.js +1 -0
- package/lib/key-commands/bootstrap.js +3 -2
- package/lib/key-commands/index.js +5 -4
- package/lib/nativescript-cli-lib-bootstrap.js +4 -0
- package/lib/nativescript-cli-lib.js +1 -0
- package/lib/nativescript-cli.js +10 -1
- package/lib/node/pbxproj-dom-xcode.js +1 -0
- package/lib/node/xcode.js +1 -0
- package/lib/node-package-manager.js +11 -1
- package/lib/options.js +143 -118
- package/lib/package-installation-manager.js +8 -1
- package/lib/package-manager.js +2 -0
- package/lib/platform-command-param.js +1 -0
- package/lib/pnpm-package-manager.js +4 -1
- package/lib/project-data.js +12 -0
- package/lib/providers/project-files-provider.js +1 -0
- package/lib/resolvers/livesync-service-resolver.js +1 -0
- package/lib/services/analytics/analytics-broker-process.js +10 -6
- package/lib/services/analytics/analytics-broker.js +2 -1
- package/lib/services/analytics/analytics-service.js +29 -25
- package/lib/services/analytics/google-analytics-provider.js +13 -12
- package/lib/services/analytics-settings-service.js +5 -0
- package/lib/services/android/android-bundle-tool-service.js +1 -0
- package/lib/services/android/gradle-build-args-service.js +3 -0
- package/lib/services/android/gradle-build-service.js +1 -0
- package/lib/services/android/gradle-command-service.js +6 -1
- package/lib/services/android-device-debug-service.js +6 -0
- package/lib/services/android-plugin-build-service.js +33 -1
- package/lib/services/android-project-service.js +71 -4
- package/lib/services/android-resources-migration-service.js +7 -0
- package/lib/services/apple-portal/apple-portal-application-service.js +1 -0
- package/lib/services/apple-portal/apple-portal-cookie-service.js +1 -0
- package/lib/services/apple-portal/apple-portal-session-service.js +6 -4
- package/lib/services/assets-generation/assets-generation-service.js +16 -5
- package/lib/services/build-artifacts-service.js +2 -1
- package/lib/services/build-data-service.js +1 -0
- package/lib/services/build-info-file-service.js +1 -0
- package/lib/services/cleanup-service.js +13 -9
- package/lib/services/cocoapods-platform-manager.js +9 -0
- package/lib/services/cocoapods-service.js +21 -1
- package/lib/services/debug-data-service.js +1 -0
- package/lib/services/debug-service-base.js +7 -0
- package/lib/services/device/device-install-app-service.js +2 -1
- package/lib/services/doctor-service.js +21 -6
- package/lib/services/extensibility-service.js +8 -0
- package/lib/services/files-hash-service.js +1 -0
- package/lib/services/hmr-status-service.js +2 -0
- package/lib/services/info-service.js +1 -0
- package/lib/services/initialize-service.js +5 -1
- package/lib/services/ios/export-options-plist-service.js +4 -0
- package/lib/services/ios/ios-signing-service.js +4 -0
- package/lib/services/ios/spm-service.js +9 -0
- package/lib/services/ios/xcodebuild-args-service.js +9 -0
- package/lib/services/ios/xcodebuild-command-service.js +1 -0
- package/lib/services/ios/xcodebuild-service.js +1 -0
- package/lib/services/ios-debugger-port-service.js +1 -0
- package/lib/services/ios-device-debug-service.js +1 -0
- package/lib/services/ios-entitlements-service.js +1 -0
- package/lib/services/ios-extensions-service.js +1 -0
- package/lib/services/ios-log-filter.js +20 -0
- package/lib/services/ios-native-target-service.js +6 -4
- package/lib/services/ios-project-service.js +94 -2
- package/lib/services/ios-provision-service.js +3 -0
- package/lib/services/ios-watch-app-service.js +1 -0
- package/lib/services/ip-service.js +2 -0
- package/lib/services/itmstransporter-service.js +1 -0
- package/lib/services/karma-execution.js +2 -0
- package/lib/services/livesync/android-device-livesync-service-base.js +1 -0
- package/lib/services/livesync/android-device-livesync-service.js +2 -0
- package/lib/services/livesync/android-device-livesync-sockets-service.js +3 -0
- package/lib/services/livesync/android-livesync-service.js +1 -0
- package/lib/services/livesync/android-livesync-tool.js +4 -0
- package/lib/services/livesync/device-livesync-service-base.js +2 -0
- package/lib/services/livesync/ios-device-livesync-service.js +7 -0
- package/lib/services/livesync/ios-livesync-service.js +2 -0
- package/lib/services/livesync/livesync-socket.js +1 -0
- package/lib/services/livesync/platform-livesync-service-base.js +5 -0
- package/lib/services/livesync-process-data-service.js +1 -0
- package/lib/services/log-parser-service.js +1 -0
- package/lib/services/log-source-map-service.js +15 -0
- package/lib/services/marking-mode-service.js +8 -5
- package/lib/services/metadata-filtering-service.js +1 -0
- package/lib/services/npm-config-service.js +4 -0
- package/lib/services/pacote-service.js +7 -0
- package/lib/services/performance-service.js +3 -1
- package/lib/services/platform/add-platform-service.js +49 -2
- package/lib/services/platform/platform-validation-service.js +1 -0
- package/lib/services/platform/prepare-native-platform-service.js +5 -2
- package/lib/services/platform-environment-requirements.js +8 -3
- package/lib/services/platform-project-service-base.js +1 -0
- package/lib/services/platforms-data-service.js +1 -0
- package/lib/services/plugins-service.js +20 -2
- package/lib/services/prepare-data-service.js +1 -0
- package/lib/services/project-backup-service.js +4 -0
- package/lib/services/project-changes-service.js +14 -3
- package/lib/services/project-cleanup-service.js +2 -0
- package/lib/services/project-config-service.js +22 -2
- package/lib/services/project-data-service.js +36 -7
- package/lib/services/project-name-service.js +1 -0
- package/lib/services/project-service.js +10 -0
- package/lib/services/project-templates-service.js +3 -2
- package/lib/services/qr-code-terminal-service.js +1 -0
- package/lib/services/require-service.js +1 -0
- package/lib/services/start-service.js +1 -0
- package/lib/services/temp-service.js +1 -0
- package/lib/services/terminal-spinner-service.js +2 -0
- package/lib/services/test-execution-service.js +9 -2
- package/lib/services/test-initialization-service.js +4 -0
- package/lib/services/timeline-profiler-service.js +1 -0
- package/lib/services/user-settings-service.js +1 -0
- package/lib/services/versions-service.js +6 -4
- package/lib/services/watch-ignore-list-service.js +1 -0
- package/lib/services/webpack/webpack-compiler-service.js +42 -1
- package/lib/services/xcconfig-service.js +2 -0
- package/lib/services/xcproj-service.js +1 -0
- package/lib/shared-event-bus.js +6 -0
- package/lib/sys-info.js +2 -1
- package/lib/tools/config-manipulation/config-transformer.js +12 -0
- package/lib/tools/node-modules/node-modules-builder.js +1 -0
- package/lib/tools/node-modules/node-modules-dependencies-builder.js +6 -0
- package/lib/yarn-package-manager.js +1 -0
- package/lib/yarn2-package-manager.js +3 -0
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/CHANGELOG.md +15 -0
- package/node_modules/rimraf/CHANGELOG.md +65 -0
- package/node_modules/stringify-package/CHANGELOG.md +16 -0
- package/package.json +2 -2
|
@@ -15,10 +15,14 @@ function cliAppender(layout) {
|
|
|
15
15
|
return appender;
|
|
16
16
|
}
|
|
17
17
|
function configure(config, layouts) {
|
|
18
|
+
// the default layout for the appender
|
|
18
19
|
let layout = layouts.messagePassThroughLayout;
|
|
20
|
+
// check if there is another layout specified
|
|
19
21
|
if (config.layout) {
|
|
20
22
|
layout = layouts.layout(config.layout.type, config.layout);
|
|
21
23
|
}
|
|
24
|
+
// create a new appender instance
|
|
22
25
|
return cliAppender(layout);
|
|
23
26
|
}
|
|
24
27
|
exports.configure = configure;
|
|
28
|
+
//# sourceMappingURL=cli-appender.js.map
|
|
@@ -21,10 +21,14 @@ function configure(config, layouts) {
|
|
|
21
21
|
if (!config.emitter.emit || typeof config.emitter.emit !== "function") {
|
|
22
22
|
throw new Error("The passed emitter must be instance of EventEmitter");
|
|
23
23
|
}
|
|
24
|
+
// the default layout for the appender
|
|
24
25
|
let layout = layouts.messagePassThroughLayout;
|
|
26
|
+
// check if there is another layout specified
|
|
25
27
|
if (config.layout) {
|
|
26
28
|
layout = layouts.layout(config.layout.type, config.layout);
|
|
27
29
|
}
|
|
30
|
+
// create a new appender instance
|
|
28
31
|
return emitAppender(layout, config.emitter);
|
|
29
32
|
}
|
|
30
33
|
exports.configure = configure;
|
|
34
|
+
//# sourceMappingURL=emit-appender.js.map
|
|
@@ -98,9 +98,11 @@ class Logger {
|
|
|
98
98
|
if (typeof item === "string") {
|
|
99
99
|
return item;
|
|
100
100
|
}
|
|
101
|
+
// do not try to read streams, because they may not be rewindable
|
|
101
102
|
if (item instanceof stream.Readable) {
|
|
102
103
|
return "[ReadableStream]";
|
|
103
104
|
}
|
|
105
|
+
// There's no point in printing buffers
|
|
104
106
|
if (item instanceof Buffer) {
|
|
105
107
|
return "[Buffer]";
|
|
106
108
|
}
|
|
@@ -153,12 +155,14 @@ class Logger {
|
|
|
153
155
|
getLogOptionsForMessage(data) {
|
|
154
156
|
const loggerOptionKeys = _.keys(constants_1.LoggerConfigData);
|
|
155
157
|
const dataToCheck = data.filter((el) => {
|
|
158
|
+
// objects created with Object.create(null) do not have `hasOwnProperty` function
|
|
156
159
|
if (!!el &&
|
|
157
160
|
typeof el === "object" &&
|
|
158
161
|
el.hasOwnProperty &&
|
|
159
162
|
typeof el.hasOwnProperty === "function") {
|
|
160
163
|
for (const key of loggerOptionKeys) {
|
|
161
164
|
if (el.hasOwnProperty(key)) {
|
|
165
|
+
// include only the elements which have one of the keys we've specified as logger options
|
|
162
166
|
return true;
|
|
163
167
|
}
|
|
164
168
|
}
|
|
@@ -197,3 +201,4 @@ __decorate([
|
|
|
197
201
|
], Logger.prototype, "initialize", null);
|
|
198
202
|
exports.Logger = Logger;
|
|
199
203
|
yok_1.injector.register("logger", Logger);
|
|
204
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
//
|
|
3
|
+
// automatically generated code; do not edit manually!
|
|
4
|
+
//
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.Messages = void 0;
|
|
4
7
|
const yok_1 = require("../yok");
|
|
8
|
+
/* tslint:disable:all */
|
|
5
9
|
class Messages {
|
|
6
10
|
constructor() {
|
|
7
11
|
this.Devices = {
|
|
@@ -13,3 +17,5 @@ class Messages {
|
|
|
13
17
|
}
|
|
14
18
|
exports.Messages = Messages;
|
|
15
19
|
yok_1.injector.register("messages", Messages);
|
|
20
|
+
/* tslint:enable */
|
|
21
|
+
//# sourceMappingURL=messages.js.map
|
|
@@ -38,7 +38,7 @@ class AndroidApplicationManager extends application_manager_base_1.ApplicationMa
|
|
|
38
38
|
this.$deviceLogProvider = $deviceLogProvider;
|
|
39
39
|
this.$errors = $errors;
|
|
40
40
|
this.PID_CHECK_INTERVAL = 100;
|
|
41
|
-
this.PID_CHECK_TIMEOUT = 10000;
|
|
41
|
+
this.PID_CHECK_TIMEOUT = 10000; // 10 secs
|
|
42
42
|
}
|
|
43
43
|
getInstalledApplications() {
|
|
44
44
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -80,6 +80,7 @@ class AndroidApplicationManager extends application_manager_base_1.ApplicationMa
|
|
|
80
80
|
});
|
|
81
81
|
}
|
|
82
82
|
uninstallApplication(appIdentifier) {
|
|
83
|
+
// Need to set the treatErrorsAsWarnings to true because when using tns run command if the application is not installed on the device it will throw error
|
|
83
84
|
return this.adb.executeShellCommand(["pm", "uninstall", `${appIdentifier}`], { treatErrorsAsWarnings: true });
|
|
84
85
|
}
|
|
85
86
|
startApplication(appData) {
|
|
@@ -89,9 +90,24 @@ class AndroidApplicationManager extends application_manager_base_1.ApplicationMa
|
|
|
89
90
|
`cat /dev/null > ${constants_1.LiveSyncPaths.ANDROID_TMP_DIR_NAME}/${appData.appId}-debugbreak`,
|
|
90
91
|
]);
|
|
91
92
|
}
|
|
93
|
+
// If the app is debuggable, the Runtime will update the file when its ready for debugging
|
|
94
|
+
// and we will be able to take decisions and synchronize the debug experience based on the content
|
|
92
95
|
yield this.adb.executeShellCommand([
|
|
93
96
|
`cat /dev/null > ${constants_1.LiveSyncPaths.ANDROID_TMP_DIR_NAME}/${appData.appId}-debugger-started`,
|
|
94
97
|
]);
|
|
98
|
+
/*
|
|
99
|
+
Example "pm dump <app_identifier> | grep -A 1 MAIN" output"
|
|
100
|
+
android.intent.action.MAIN:
|
|
101
|
+
3b2df03 org.nativescript.cliapp/com.tns.NativeScriptActivity filter 50dd82e
|
|
102
|
+
Action: "android.intent.action.MAIN"
|
|
103
|
+
Category: "android.intent.category.LAUNCHER"
|
|
104
|
+
--
|
|
105
|
+
intent={act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=org.nativescript.cliapp/com.tns.NativeScriptActivity}
|
|
106
|
+
realActivity=org.nativescript.cliapp/com.tns.NativeScriptActivity
|
|
107
|
+
--
|
|
108
|
+
Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=org.nativescript.cliapp/com.tns.NativeScriptActivity }
|
|
109
|
+
frontOfTask=true task=TaskRecord{fe592ac #449 A=org.nativescript.cliapp U=0 StackId=1 sz=1}
|
|
110
|
+
*/
|
|
95
111
|
const appIdentifier = appData.appId;
|
|
96
112
|
const pmDumpOutput = yield this.adb.executeShellCommand([
|
|
97
113
|
"pm",
|
|
@@ -143,6 +159,8 @@ class AndroidApplicationManager extends application_manager_base_1.ApplicationMa
|
|
|
143
159
|
pid: processIdentifier,
|
|
144
160
|
appId: appIdentifier,
|
|
145
161
|
onAppRestarted: () => {
|
|
162
|
+
// If the app restarts, we update the PID and
|
|
163
|
+
// restart log helper.
|
|
146
164
|
this.onAppLaunch(appData);
|
|
147
165
|
},
|
|
148
166
|
});
|
|
@@ -226,3 +244,4 @@ __decorate([
|
|
|
226
244
|
(0, decorators_1.cache)()
|
|
227
245
|
], AndroidApplicationManager.prototype, "getFullyQualifiedActivityRegex", null);
|
|
228
246
|
exports.AndroidApplicationManager = AndroidApplicationManager;
|
|
247
|
+
//# sourceMappingURL=android-application-manager.js.map
|
|
@@ -330,3 +330,4 @@ AndroidDebugBridgeResultHandler.ANDROID_DEBUG_BRIDGE_ERRORS = [
|
|
|
330
330
|
];
|
|
331
331
|
exports.AndroidDebugBridgeResultHandler = AndroidDebugBridgeResultHandler;
|
|
332
332
|
yok_1.injector.register("androidDebugBridgeResultHandler", AndroidDebugBridgeResultHandler);
|
|
333
|
+
//# sourceMappingURL=android-debug-bridge-result-handler.js.map
|
|
@@ -50,11 +50,15 @@ class AndroidDebugBridge {
|
|
|
50
50
|
return this.$childProcess.spawn(command.command, command.args);
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
|
+
// If adb -s <invalid device id> install <smth> is executed the childProcess won't get any response
|
|
54
|
+
// because the adb will be waiting for valid device and will not send close or exit event.
|
|
55
|
+
// For example `adb -s <invalid device id> install <smth>` throws error 'error: device \'030939f508e6c773\' not found\r\n' exitCode 4294967295
|
|
53
56
|
const result = yield this.$childProcess.spawnFromEvent(command.command, command.args, event, childProcessOptions, { throwError: false });
|
|
54
57
|
const errors = this.$androidDebugBridgeResultHandler.checkForErrors(result);
|
|
55
58
|
if (errors && errors.length > 0) {
|
|
56
59
|
this.$androidDebugBridgeResultHandler.handleErrors(errors, treatErrorsAsWarnings);
|
|
57
60
|
}
|
|
61
|
+
// Some adb commands returns array of strings instead of object with stdout and stderr. (adb start-server)
|
|
58
62
|
return result.stdout === undefined || result.stdout === null
|
|
59
63
|
? result
|
|
60
64
|
: result.stdout;
|
|
@@ -143,6 +147,7 @@ class AndroidDebugBridge {
|
|
|
143
147
|
pushFile(localFilePath, deviceFilePath) {
|
|
144
148
|
return __awaiter(this, void 0, void 0, function* () {
|
|
145
149
|
const fileDirectory = (0, helpers_1.fromWindowsRelativePathToUnix)(path.dirname(deviceFilePath));
|
|
150
|
+
// starting from API level 28, the push command is returning an error if the directory does not exist
|
|
146
151
|
yield this.executeShellCommand(["mkdir", "-p", fileDirectory]);
|
|
147
152
|
yield this.executeCommand(["push", localFilePath, deviceFilePath]);
|
|
148
153
|
yield this.executeShellCommand(["chmod", "0777", fileDirectory]);
|
|
@@ -165,3 +170,4 @@ __decorate([
|
|
|
165
170
|
], AndroidDebugBridge.prototype, "getDevices", null);
|
|
166
171
|
exports.AndroidDebugBridge = AndroidDebugBridge;
|
|
167
172
|
yok_1.injector.register("adb", AndroidDebugBridge);
|
|
173
|
+
//# sourceMappingURL=android-debug-bridge.js.map
|
|
@@ -94,6 +94,8 @@ class AndroidDeviceFileSystem {
|
|
|
94
94
|
}
|
|
95
95
|
transferDirectory(deviceAppData, localToDevicePaths, projectFilesPath) {
|
|
96
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
|
|
97
99
|
const minAndroidWithoutAdbPushDir = "9.0.0";
|
|
98
100
|
const isAdbPushDirSupported = semver.lt(semver.coerce(deviceAppData.device.deviceInfo.version), minAndroidWithoutAdbPushDir);
|
|
99
101
|
const deviceProjectDir = yield deviceAppData.getDeviceProjectRootPath();
|
|
@@ -148,6 +150,7 @@ class AndroidDeviceFileSystem {
|
|
|
148
150
|
const hostTmpDir = yield this.$tempService.mkdirSync("application-");
|
|
149
151
|
const commandsFileHostPath = path.join(hostTmpDir, "temp.commands.file");
|
|
150
152
|
this.$fs.writeFile(commandsFileHostPath, fileContent);
|
|
153
|
+
// copy it to the device
|
|
151
154
|
yield this.transferFile(commandsFileHostPath, deviceFilePath);
|
|
152
155
|
yield this.adb.executeShellCommand(["chmod", "0777", deviceFilePath]);
|
|
153
156
|
});
|
|
@@ -174,3 +177,4 @@ class AndroidDeviceFileSystem {
|
|
|
174
177
|
}
|
|
175
178
|
}
|
|
176
179
|
exports.AndroidDeviceFileSystem = AndroidDeviceFileSystem;
|
|
180
|
+
//# sourceMappingURL=android-device-file-system.js.map
|
|
@@ -69,6 +69,8 @@ class AndroidDeviceHashService {
|
|
|
69
69
|
const action = (localToDevicePathData) => __awaiter(this, void 0, void 0, function* () {
|
|
70
70
|
const localPath = localToDevicePathData.getLocalPath();
|
|
71
71
|
if (this.$fs.getFsStats(localPath).isFile()) {
|
|
72
|
+
// TODO: Use relative to project path for key
|
|
73
|
+
// This will speed up livesync on the same device for the same project on different PCs.
|
|
72
74
|
initialShasums[localPath] = yield this.$fs.getFileShasum(localPath);
|
|
73
75
|
}
|
|
74
76
|
});
|
|
@@ -131,3 +133,4 @@ __decorate([
|
|
|
131
133
|
(0, decorators_1.cache)()
|
|
132
134
|
], AndroidDeviceHashService.prototype, "getTempDir", null);
|
|
133
135
|
exports.AndroidDeviceHashService = AndroidDeviceHashService;
|
|
136
|
+
//# sourceMappingURL=android-device-hash-service.js.map
|
|
@@ -42,6 +42,8 @@ class AndroidDevice {
|
|
|
42
42
|
this.fileSystem = this.$injector.resolve(fileSystemPath.AndroidDeviceFileSystem, { adb: this.adb });
|
|
43
43
|
let details = yield this.getDeviceDetails(["getprop"]);
|
|
44
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
|
|
45
47
|
details = yield this.getDeviceDetails(["cat", "/system/build.prop"]);
|
|
46
48
|
}
|
|
47
49
|
this.$logger.trace(details);
|
|
@@ -102,6 +104,9 @@ class AndroidDevice {
|
|
|
102
104
|
try {
|
|
103
105
|
const details = yield this.adb.executeShellCommand(shellCommandArgs);
|
|
104
106
|
details.split(/\r?\n|\r/).forEach((value) => {
|
|
107
|
+
// sample line is "ro.build.version.release=4.4" in /system/build.prop
|
|
108
|
+
// sample line from getprop is: [ro.build.version.release]: [6.0]
|
|
109
|
+
// NOTE: some props do not have value: [ro.build.version.base_os]: []
|
|
105
110
|
const match = /(?:\[?ro\.build\.version|ro\.product|ro\.build)\.(.+?)]?(?:\:|=)(?:\s*?\[)?(.*?)]?$/.exec(value);
|
|
106
111
|
if (match) {
|
|
107
112
|
parsedDetails[match[1]] = match[2];
|
|
@@ -116,6 +121,7 @@ class AndroidDevice {
|
|
|
116
121
|
});
|
|
117
122
|
}
|
|
118
123
|
getIsTablet(details) {
|
|
124
|
+
//version 3.x.x (also known as Honeycomb) is a tablet only version
|
|
119
125
|
return (details &&
|
|
120
126
|
(_.startsWith(details.release, "3.") ||
|
|
121
127
|
_.includes((details.characteristics || "").toLowerCase(), "tablet")));
|
|
@@ -130,6 +136,7 @@ class AndroidDevice {
|
|
|
130
136
|
});
|
|
131
137
|
}
|
|
132
138
|
}
|
|
139
|
+
// http://stackoverflow.com/questions/31178195/what-does-adb-device-status-mean
|
|
133
140
|
AndroidDevice.ADB_DEVICE_STATUS_INFO = {
|
|
134
141
|
device: {
|
|
135
142
|
errorHelp: null,
|
|
@@ -156,3 +163,4 @@ __decorate([
|
|
|
156
163
|
(0, decorators_1.cache)()
|
|
157
164
|
], AndroidDevice.prototype, "init", null);
|
|
158
165
|
exports.AndroidDevice = AndroidDevice;
|
|
166
|
+
//# sourceMappingURL=android-device.js.map
|
|
@@ -121,7 +121,7 @@ class AndroidEmulatorServices {
|
|
|
121
121
|
endTimeEpoch,
|
|
122
122
|
};
|
|
123
123
|
}
|
|
124
|
-
yield (0, helpers_1.sleep)(10000);
|
|
124
|
+
yield (0, helpers_1.sleep)(10000); // the emulator definitely takes its time to wake up
|
|
125
125
|
hasTimeLeft = (0, helpers_1.getCurrentEpochTime)() < endTimeEpoch;
|
|
126
126
|
}
|
|
127
127
|
if (!hasTimeLeft && !isInfiniteWait) {
|
|
@@ -203,3 +203,4 @@ class AndroidEmulatorServices {
|
|
|
203
203
|
}
|
|
204
204
|
exports.AndroidEmulatorServices = AndroidEmulatorServices;
|
|
205
205
|
yok_1.injector.register("androidEmulatorServices", AndroidEmulatorServices);
|
|
206
|
+
//# sourceMappingURL=android-emulator-services.js.map
|
|
@@ -12,6 +12,8 @@ class AndroidIniFileParser {
|
|
|
12
12
|
if (!this.$fs.exists(iniFilePath)) {
|
|
13
13
|
return null;
|
|
14
14
|
}
|
|
15
|
+
// avd files can have different encoding, defined on the first line.
|
|
16
|
+
// find which one it is (if any) and use it to correctly read the file contents
|
|
15
17
|
const encoding = this.getAvdEncoding(iniFilePath);
|
|
16
18
|
const contents = this.$fs.readText(iniFilePath, encoding).split("\n");
|
|
17
19
|
return _.reduce(contents, (result, line) => {
|
|
@@ -42,6 +44,8 @@ class AndroidIniFileParser {
|
|
|
42
44
|
}, Object.create(null));
|
|
43
45
|
}
|
|
44
46
|
getAvdEncoding(avdName) {
|
|
47
|
+
// avd files can have different encoding, defined on the first line.
|
|
48
|
+
// find which one it is (if any) and use it to correctly read the file contents
|
|
45
49
|
let encoding = "utf8";
|
|
46
50
|
let contents = this.$fs.readText(avdName, "ascii");
|
|
47
51
|
if (contents.length > 0) {
|
|
@@ -55,18 +59,22 @@ class AndroidIniFileParser {
|
|
|
55
59
|
}
|
|
56
60
|
return encoding;
|
|
57
61
|
}
|
|
62
|
+
// Android L is not written as a number in the .ini files, and we need to convert it
|
|
58
63
|
readTargetNum(target) {
|
|
59
64
|
const platform = target.replace("android-", "");
|
|
60
65
|
let platformNumber = +platform;
|
|
61
66
|
if (isNaN(platformNumber)) {
|
|
67
|
+
// this may be a google image
|
|
62
68
|
const googlePlatform = target.split(":")[2];
|
|
63
69
|
if (googlePlatform) {
|
|
64
70
|
platformNumber = +googlePlatform;
|
|
65
71
|
}
|
|
66
72
|
else if (platform === "L") {
|
|
73
|
+
// Android SDK 20 preview
|
|
67
74
|
platformNumber = 20;
|
|
68
75
|
}
|
|
69
76
|
else if (platform === "MNC") {
|
|
77
|
+
// Android M preview
|
|
70
78
|
platformNumber = 22;
|
|
71
79
|
}
|
|
72
80
|
}
|
|
@@ -75,3 +83,4 @@ class AndroidIniFileParser {
|
|
|
75
83
|
}
|
|
76
84
|
exports.AndroidIniFileParser = AndroidIniFileParser;
|
|
77
85
|
yok_1.injector.register("androidIniFileParser", AndroidIniFileParser);
|
|
86
|
+
//# sourceMappingURL=android-ini-file-parser.js.map
|
|
@@ -36,7 +36,11 @@ class AndroidLogFilter {
|
|
|
36
36
|
return consoleLogMessage;
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
|
+
//sample line is "I/Web Console( 4438): Received Event: deviceready at file:///storage/emulated/0/Icenium/com.telerik.TestApp/js/index.js:48"
|
|
39
40
|
AndroidLogFilter.LINE_REGEX = /.\/(.+?)\s*\(\s*\d+?\): (.*)/;
|
|
41
|
+
// sample line is "11-23 12:39:07.310 1584 1597 I art : Background sticky concurrent mark sweep GC freed 21966(1780KB) AllocSpace objects, 4(80KB) LOS objects, 77% free, 840KB/3MB, paused 4.018ms total 158.629ms"
|
|
42
|
+
// or '12-28 10:45:08.020 3329 3329 W chromium: [WARNING:data_reduction_proxy_settings.cc(328)] SPDY proxy OFF at startup'
|
|
40
43
|
AndroidLogFilter.API_LEVEL_23_LINE_REGEX = /.+?\s+?(?:[A-Z]\s+?)([A-Za-z \.]+?)\s*?\: (.*)/;
|
|
41
44
|
exports.AndroidLogFilter = AndroidLogFilter;
|
|
42
45
|
yok_1.injector.register("androidLogFilter", AndroidLogFilter);
|
|
46
|
+
//# sourceMappingURL=android-log-filter.js.map
|
|
@@ -84,6 +84,9 @@ class AndroidVirtualDeviceService {
|
|
|
84
84
|
get pathToEmulatorExecutable() {
|
|
85
85
|
const emulatorExecutableName = "emulator";
|
|
86
86
|
if (this.androidHome) {
|
|
87
|
+
// Check https://developer.android.com/studio/releases/sdk-tools.html (25.3.0)
|
|
88
|
+
// Since this version of SDK tools, the emulator is a separate package.
|
|
89
|
+
// However the emulator executable still exists in the "tools" dir.
|
|
87
90
|
const pathToEmulatorFromAndroidStudio = path.join(this.androidHome, emulatorExecutableName, emulatorExecutableName);
|
|
88
91
|
const realFilePath = this.$hostInfo.isWindows
|
|
89
92
|
? `${pathToEmulatorFromAndroidStudio}.exe`
|
|
@@ -123,6 +126,17 @@ class AndroidVirtualDeviceService {
|
|
|
123
126
|
client.on("data", (data) => {
|
|
124
127
|
output += data.toString();
|
|
125
128
|
const imageIdentifier = this.getImageIdentifierFromClientOutput(output);
|
|
129
|
+
// old output should look like:
|
|
130
|
+
// Android Console: type 'help' for a list of commands
|
|
131
|
+
// OK
|
|
132
|
+
// <Name of image>
|
|
133
|
+
// OK
|
|
134
|
+
// new output should look like:
|
|
135
|
+
// Android Console: type 'help' for a list of commands
|
|
136
|
+
// OK
|
|
137
|
+
// a\u001b[K\u001b[Dav\u001b[K\u001b[D\u001b[Davd\u001b...
|
|
138
|
+
// <Name of image>
|
|
139
|
+
// OK
|
|
126
140
|
if (imageIdentifier && !isResolved) {
|
|
127
141
|
this.mapEmulatorIdToImageIdentifier[emulatorId] = imageIdentifier;
|
|
128
142
|
this.clearNetConnection(client, timer);
|
|
@@ -152,7 +166,10 @@ class AndroidVirtualDeviceService {
|
|
|
152
166
|
];
|
|
153
167
|
}
|
|
154
168
|
if (canExecuteAvdManagerCommand) {
|
|
155
|
-
|
|
169
|
+
const sanitizedPathToAvdManagerExecutable = this.$hostInfo.isWindows
|
|
170
|
+
? (0, helpers_1.quoteString)(this.pathToAvdManagerExecutable)
|
|
171
|
+
: this.pathToAvdManagerExecutable;
|
|
172
|
+
result = yield this.$childProcess.trySpawnFromCloseEvent(sanitizedPathToAvdManagerExecutable, ["list", "avds"], { shell: this.$hostInfo.isWindows });
|
|
156
173
|
}
|
|
157
174
|
else if (this.pathToAndroidExecutable &&
|
|
158
175
|
this.$fs.exists(this.pathToAndroidExecutable)) {
|
|
@@ -174,6 +191,8 @@ class AndroidVirtualDeviceService {
|
|
|
174
191
|
if (this.pathToAvdManagerExecutable &&
|
|
175
192
|
this.$fs.exists(this.pathToAvdManagerExecutable)) {
|
|
176
193
|
if (process.env.JAVA_HOME) {
|
|
194
|
+
// In case JAVA_HOME is set, but it points to incorrect directory (i.e. there's no java in $JAVA_HOME/bin/java), avdmanager will fail
|
|
195
|
+
// no matter if you have correct java in PATH.
|
|
177
196
|
canExecute = !!(yield this.$sysInfo.getJavaVersionFromJavaHome());
|
|
178
197
|
}
|
|
179
198
|
else {
|
|
@@ -248,6 +267,13 @@ class AndroidVirtualDeviceService {
|
|
|
248
267
|
const avdOutput = output.split(constants_1.AndroidVirtualDevice.AVAILABLE_AVDS_MESSAGE);
|
|
249
268
|
const availableDevices = avdOutput && avdOutput[1] && avdOutput[1].trim();
|
|
250
269
|
if (availableDevices) {
|
|
270
|
+
// In some cases `avdmanager list avds` command prints:
|
|
271
|
+
// `The following Android Virtual Devices could not be loaded:
|
|
272
|
+
// Name: Pixel_2_XL_API_28
|
|
273
|
+
// Path: /Users/<username>/.android/avd/Pixel_2_XL_API_28.avd
|
|
274
|
+
// Error: Google pixel_2_xl no longer exists as a device`
|
|
275
|
+
// These devices sometimes are valid so try to parse them.
|
|
276
|
+
// Also these devices are printed at the end of the output and are separated with 2 new lines from the valid devices output.
|
|
251
277
|
const parts = availableDevices.split(/(?:\r?\n){2}/);
|
|
252
278
|
const items = [parts[0], parts[1]].filter((item) => !!item);
|
|
253
279
|
for (const item of items) {
|
|
@@ -264,6 +290,7 @@ class AndroidVirtualDeviceService {
|
|
|
264
290
|
}
|
|
265
291
|
getAvdManagerDeviceInfo(output) {
|
|
266
292
|
const avdManagerDeviceInfo = Object.create(null);
|
|
293
|
+
// Split by `\n`, not EOL as the avdmanager and android executables print results with `\n` only even on Windows
|
|
267
294
|
_.reduce(output.split("\n"), (result, row) => {
|
|
268
295
|
const [key, value] = row.split(": ").map((part) => part.trim());
|
|
269
296
|
switch (key) {
|
|
@@ -310,6 +337,7 @@ class AndroidVirtualDeviceService {
|
|
|
310
337
|
};
|
|
311
338
|
}
|
|
312
339
|
getImageIdentifierFromClientOutput(output) {
|
|
340
|
+
// The lines should be trimmed after the split because the output has \r\n and when using split(EOL) on mac each line ends with \r.
|
|
313
341
|
const lines = _.map(output.split(os_1.EOL), (line) => line.trim());
|
|
314
342
|
const firstIndexOfOk = _.indexOf(lines, "OK");
|
|
315
343
|
if (firstIndexOfOk < 0) {
|
|
@@ -358,3 +386,4 @@ __decorate([
|
|
|
358
386
|
], AndroidVirtualDeviceService.prototype, "getConfigurationError", null);
|
|
359
387
|
exports.AndroidVirtualDeviceService = AndroidVirtualDeviceService;
|
|
360
388
|
yok_1.injector.register("androidVirtualDeviceService", AndroidVirtualDeviceService);
|
|
389
|
+
//# sourceMappingURL=android-virtual-device-service.js.map
|
|
@@ -54,6 +54,7 @@ class AndroidGenymotionService {
|
|
|
54
54
|
.map((row) => __awaiter(this, void 0, void 0, function* () {
|
|
55
55
|
const match = row.match(/^(.+?)\s+device$/);
|
|
56
56
|
if (match && match[1]) {
|
|
57
|
+
// possible genymotion emulator
|
|
57
58
|
const emulatorId = match[1];
|
|
58
59
|
const result = (yield this.isGenymotionEmulator(emulatorId))
|
|
59
60
|
? emulatorId
|
|
@@ -113,6 +114,7 @@ class AndroidGenymotionService {
|
|
|
113
114
|
return runningEmulator;
|
|
114
115
|
});
|
|
115
116
|
}
|
|
117
|
+
// https://wiki.appcelerator.org/display/guides2/Installing+Genymotion
|
|
116
118
|
get playerSearchPaths() {
|
|
117
119
|
return {
|
|
118
120
|
darwin: [
|
|
@@ -163,6 +165,7 @@ class AndroidGenymotionService {
|
|
|
163
165
|
};
|
|
164
166
|
}
|
|
165
167
|
getSdkVersion(output) {
|
|
168
|
+
// Example -> Name: android_version, value: 6.0.0, timestamp: 1530090506102029000, flags:
|
|
166
169
|
const androidApiLevelRow = output
|
|
167
170
|
.split("\n")
|
|
168
171
|
.filter((row) => !!row)
|
|
@@ -191,6 +194,7 @@ In case you have installed Genymotion in a different location, please add the pa
|
|
|
191
194
|
getConfigurationError() {
|
|
192
195
|
return __awaiter(this, void 0, void 0, function* () {
|
|
193
196
|
const result = yield this.$childProcess.trySpawnFromCloseEvent(this.pathToEmulatorExecutable, [], {}, { throwError: false });
|
|
197
|
+
// When player is spawned, it always prints message on stderr.
|
|
194
198
|
if (result &&
|
|
195
199
|
result.stderr &&
|
|
196
200
|
result.stderr.indexOf(constants_1.AndroidVirtualDevice.GENYMOTION_DEFAULT_STDERR_STRING) === -1) {
|
|
@@ -209,3 +213,4 @@ __decorate([
|
|
|
209
213
|
], AndroidGenymotionService.prototype, "getConfigurationError", null);
|
|
210
214
|
exports.AndroidGenymotionService = AndroidGenymotionService;
|
|
211
215
|
yok_1.injector.register("androidGenymotionService", AndroidGenymotionService);
|
|
216
|
+
//# sourceMappingURL=genymotion-service.js.map
|
|
@@ -44,6 +44,7 @@ class VirtualBoxService {
|
|
|
44
44
|
.split(os_1.EOL)
|
|
45
45
|
.filter((row) => !!row)
|
|
46
46
|
.map((row) => {
|
|
47
|
+
// Example row: "Google Nexus 4 - 5.0.0 - API 21 - 768x1280" {9d9beef2-cc60-4a54-bcc0-cc1dbf89811f}
|
|
47
48
|
const [rawName, rawId] = row.split('" ');
|
|
48
49
|
const id = rawId.substr(1, rawId.length - 2);
|
|
49
50
|
const name = rawName.substr(1, rawName.length - 1);
|
|
@@ -84,6 +85,15 @@ class VirtualBoxService {
|
|
|
84
85
|
if (this.$hostInfo.isWindows) {
|
|
85
86
|
let searchPath = null;
|
|
86
87
|
try {
|
|
88
|
+
/* This can be used as interface!!!!
|
|
89
|
+
arch:null
|
|
90
|
+
hive:"HKLM"
|
|
91
|
+
host:""
|
|
92
|
+
key:"\Software\Oracle\VirtualBox"
|
|
93
|
+
name:"InstallDir"
|
|
94
|
+
type:"REG_SZ"
|
|
95
|
+
value:"C:\Program Files\Oracle\VirtualBox\"
|
|
96
|
+
*/
|
|
87
97
|
const result = yield (0, helpers_1.getWinRegPropertyValue)("\\Software\\Oracle\\VirtualBox", "InstallDir");
|
|
88
98
|
searchPath = result && result.value ? result.value : null;
|
|
89
99
|
}
|
|
@@ -119,3 +129,4 @@ __decorate([
|
|
|
119
129
|
], VirtualBoxService.prototype, "getvBoxManagePath", null);
|
|
120
130
|
exports.VirtualBoxService = VirtualBoxService;
|
|
121
131
|
yok_1.injector.register("virtualBoxService", VirtualBoxService);
|
|
132
|
+
//# sourceMappingURL=virtualbox-service.js.map
|
|
@@ -50,6 +50,7 @@ class LogcatHelper {
|
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
52
|
catch (err) {
|
|
53
|
+
// Ignore the error, the process is dead.
|
|
53
54
|
}
|
|
54
55
|
});
|
|
55
56
|
lineStream.on("data", (lineBuffer) => {
|
|
@@ -70,6 +71,7 @@ class LogcatHelper {
|
|
|
70
71
|
return;
|
|
71
72
|
const lines = (lineBuffer.toString() || "").split("\n");
|
|
72
73
|
for (let line of lines) {
|
|
74
|
+
// 2024-06-26 16:43:22.286 630-659 ActivityManager system_server I Start proc 8854:org.nativescript.uitestsapp/u0a190 for next-top-activity {org.nativescript.uitestsapp/com.tns.NativeScriptActivity}
|
|
73
75
|
const startProc = /Start proc (?<pid>[0-9]+):(?<appId>.+?)\//.exec(line);
|
|
74
76
|
if (startProc &&
|
|
75
77
|
((_b = startProc.groups) === null || _b === void 0 ? void 0 : _b.appId) === options.appId &&
|
|
@@ -99,6 +101,9 @@ class LogcatHelper {
|
|
|
99
101
|
});
|
|
100
102
|
});
|
|
101
103
|
}
|
|
104
|
+
/**
|
|
105
|
+
* Stops the logcat process for the specified device if keepSingleProcess is not passed on start
|
|
106
|
+
*/
|
|
102
107
|
stop(deviceIdentifier) {
|
|
103
108
|
if (this.mapDevicesLoggingData[deviceIdentifier] &&
|
|
104
109
|
!this.mapDevicesLoggingData[deviceIdentifier].keepSingleProcess) {
|
|
@@ -115,6 +120,9 @@ class LogcatHelper {
|
|
|
115
120
|
(_e = loggingData.lineStream) === null || _e === void 0 ? void 0 : _e.removeAllListeners();
|
|
116
121
|
delete this.mapDevicesLoggingData[deviceIdentifier];
|
|
117
122
|
}
|
|
123
|
+
/**
|
|
124
|
+
* @deprecated - we likely don't need this anymore, and can simplify the code...
|
|
125
|
+
*/
|
|
118
126
|
isLogcatPidSupported(deviceIdentifier) {
|
|
119
127
|
return __awaiter(this, void 0, void 0, function* () {
|
|
120
128
|
const device = yield this.$devicesService.getDevice(deviceIdentifier);
|
|
@@ -127,6 +135,7 @@ class LogcatHelper {
|
|
|
127
135
|
return __awaiter(this, void 0, void 0, function* () {
|
|
128
136
|
const isLogcatPidSupported = yield this.isLogcatPidSupported(deviceIdentifier);
|
|
129
137
|
const adb = this.$injector.resolve(device_android_debug_bridge_1.DeviceAndroidDebugBridge, { identifier: deviceIdentifier });
|
|
138
|
+
// -T 1 - shows only new logs after starting adb logcat
|
|
130
139
|
const logcatCommand = ["logcat", "-T", "1"];
|
|
131
140
|
const acceptedTags = [
|
|
132
141
|
"chromium",
|
|
@@ -139,6 +148,7 @@ class LogcatHelper {
|
|
|
139
148
|
if (pid && isLogcatPidSupported) {
|
|
140
149
|
logcatCommand.push(`--pid=${pid}`);
|
|
141
150
|
acceptedTags.forEach((tag) => {
|
|
151
|
+
// -s <tag> - shows only logs with the specified tag
|
|
142
152
|
logcatCommand.push("-s", tag);
|
|
143
153
|
});
|
|
144
154
|
}
|
|
@@ -151,6 +161,8 @@ class LogcatHelper {
|
|
|
151
161
|
getAppStartTrackingLogcatStream(deviceIdentifier, appId) {
|
|
152
162
|
return __awaiter(this, void 0, void 0, function* () {
|
|
153
163
|
const adb = this.$injector.resolve(device_android_debug_bridge_1.DeviceAndroidDebugBridge, { identifier: deviceIdentifier });
|
|
164
|
+
// -b system - shows the system buffer/logs only
|
|
165
|
+
// -T 1 - shows only new logs after starting adb logcat
|
|
154
166
|
const logcatCommand = [
|
|
155
167
|
`logcat`,
|
|
156
168
|
`-b`,
|
|
@@ -172,3 +184,4 @@ class LogcatHelper {
|
|
|
172
184
|
}
|
|
173
185
|
exports.LogcatHelper = LogcatHelper;
|
|
174
186
|
yok_1.injector.register("logcatHelper", LogcatHelper);
|
|
187
|
+
//# sourceMappingURL=logcat-helper.js.map
|
|
@@ -54,6 +54,9 @@ class ApplicationManagerBase extends events_1.EventEmitter {
|
|
|
54
54
|
if (!this.checkForApplicationUpdatesPromise) {
|
|
55
55
|
this.checkForApplicationUpdatesPromise = new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
|
|
56
56
|
let isFulfilled = false;
|
|
57
|
+
// As this method is called on 500ms, but it's execution may last much longer
|
|
58
|
+
// use locking, so the next executions will not get into the body, while the first one is still working.
|
|
59
|
+
// In case we do not break the next executions, we'll report each app as newly installed several times.
|
|
57
60
|
try {
|
|
58
61
|
const currentlyInstalledAppIdentifiers = yield this.getInstalledApplications();
|
|
59
62
|
const previouslyInstalledAppIdentifiers = this.lastInstalledAppIdentifiers || [];
|
|
@@ -102,6 +105,7 @@ class ApplicationManagerBase extends events_1.EventEmitter {
|
|
|
102
105
|
_.each(notAvailableAppsForDebugging, (appInfo) => {
|
|
103
106
|
this.emit("debuggableAppLost", appInfo);
|
|
104
107
|
if (_.has(this.lastAvailableDebuggableAppViews, appInfo.appIdentifier)) {
|
|
108
|
+
// Prevent emitting debuggableViewLost when application cannot be debugged anymore.
|
|
105
109
|
delete this.lastAvailableDebuggableAppViews[appInfo.appIdentifier];
|
|
106
110
|
}
|
|
107
111
|
});
|
|
@@ -120,6 +124,7 @@ class ApplicationManagerBase extends events_1.EventEmitter {
|
|
|
120
124
|
_.each(newAvailableViews, (debugWebViewInfo) => {
|
|
121
125
|
this.emit("debuggableViewFound", appIdentifier, debugWebViewInfo);
|
|
122
126
|
});
|
|
127
|
+
// Determine which of the views had changed since last check and raise debuggableViewChanged event for them:
|
|
123
128
|
const keptViews = _.differenceBy(currentlyAvailableViews, newAvailableViews, "id");
|
|
124
129
|
_.each(keptViews, (view) => {
|
|
125
130
|
const previousTimeViewInfo = _.find(previouslyAvailableViews, (previousView) => previousView.id === view.id);
|
|
@@ -134,3 +139,4 @@ class ApplicationManagerBase extends events_1.EventEmitter {
|
|
|
134
139
|
}
|
|
135
140
|
}
|
|
136
141
|
exports.ApplicationManagerBase = ApplicationManagerBase;
|
|
142
|
+
//# sourceMappingURL=application-manager-base.js.map
|
|
@@ -15,7 +15,10 @@ class DeviceEmitter extends events_1.EventEmitter {
|
|
|
15
15
|
this.$devicesService.on(constants_1.DeviceDiscoveryEventNames.DEVICE_FOUND, (device) => {
|
|
16
16
|
this.emit(constants_1.DeviceDiscoveryEventNames.DEVICE_FOUND, device.deviceInfo);
|
|
17
17
|
this.attachApplicationChangedHandlers(device);
|
|
18
|
+
// await: Do not await as this will require to mark the lambda with async keyword, but there's no way to await the lambda itself.
|
|
19
|
+
/* tslint:disable:no-floating-promises */
|
|
18
20
|
device.openDeviceLogStream();
|
|
21
|
+
/* tslint:enable:no-floating-promises */
|
|
19
22
|
});
|
|
20
23
|
this.$devicesService.on(constants_1.DeviceDiscoveryEventNames.DEVICE_LOST, (device) => {
|
|
21
24
|
this.emit(constants_1.DeviceDiscoveryEventNames.DEVICE_LOST, device.deviceInfo);
|
|
@@ -59,3 +62,4 @@ class DeviceEmitter extends events_1.EventEmitter {
|
|
|
59
62
|
}
|
|
60
63
|
exports.DeviceEmitter = DeviceEmitter;
|
|
61
64
|
yok_1.injector.register("deviceEmitter", DeviceEmitter);
|
|
65
|
+
//# sourceMappingURL=device-emitter.js.map
|