nativescript 9.0.0-alpha.13 → 9.0.0-alpha.14
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 +2 -2
- package/docs/build-jekyll-md.sh +1 -1
- package/docs/man_pages/config/config-get.md +36 -0
- package/docs/man_pages/config/config-set.md +40 -0
- package/docs/man_pages/config/config.md +39 -0
- package/docs/man_pages/project/hooks/hooks.md +35 -0
- package/docs/man_pages/start.md +1 -0
- package/lib/.d.ts +4 -0
- package/lib/android-tools-info.js +12 -0
- package/lib/base-package-manager.js +7 -0
- package/lib/bootstrap.js +7 -1
- package/lib/bun-package-manager.js +14 -1
- package/lib/color.js +4 -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 +3 -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 +5 -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 +48 -1
- package/lib/commands/hooks/common.js +80 -0
- package/lib/commands/hooks/hooks-lock.js +101 -0
- package/lib/commands/hooks/hooks.js +72 -0
- 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/commands/widget.js +20 -1
- 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/definitions/extensibility.d.ts +2 -2
- package/lib/common/definitions/mobile.d.ts +72 -72
- 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 +26 -0
- package/lib/common/mobile/android/device-android-debug-bridge.js +1 -0
- package/lib/common/mobile/android/genymotion/genymotion-service.js +6 -1
- 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 +3 -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 +90 -4
- 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/definitions/hooks.d.ts +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 +11 -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 +144 -119
- 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 +1 -0
- package/lib/services/android-device-debug-service.js +6 -0
- package/lib/services/android-plugin-build-service.js +31 -2
- 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/apple-portal/srp/srp-wrapper.js +4 -1
- package/lib/services/assets-generation/assets-generation-service.js +10 -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/bundler/bundler-compiler-service.js +88 -17
- package/lib/services/bundler/bundler.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 +9 -1
- 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 +11 -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 +2 -1
- 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 +91 -1
- 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 +21 -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 +21 -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 +3 -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/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/package.json +11 -10
- package/vendor/aab-tool/README.txt +1 -1
- package/vendor/aab-tool/bundletool.jar +0 -0
- package/vendor/gradle-plugin/build.gradle +1 -1
|
@@ -29,7 +29,7 @@ class AndroidApplicationManager extends application_manager_base_1.ApplicationMa
|
|
|
29
29
|
this.$deviceLogProvider = $deviceLogProvider;
|
|
30
30
|
this.$errors = $errors;
|
|
31
31
|
this.PID_CHECK_INTERVAL = 100;
|
|
32
|
-
this.PID_CHECK_TIMEOUT = 10000;
|
|
32
|
+
this.PID_CHECK_TIMEOUT = 10000; // 10 secs
|
|
33
33
|
}
|
|
34
34
|
async getInstalledApplications() {
|
|
35
35
|
const result = (await this.adb.executeShellCommand(["pm", "list", "packages"])) || "";
|
|
@@ -67,6 +67,7 @@ class AndroidApplicationManager extends application_manager_base_1.ApplicationMa
|
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
69
|
uninstallApplication(appIdentifier) {
|
|
70
|
+
// Need to set the treatErrorsAsWarnings to true because when using `ns run` command if the application is not installed on the device it will throw error
|
|
70
71
|
return this.adb.executeShellCommand(["pm", "uninstall", `${appIdentifier}`], { treatErrorsAsWarnings: true });
|
|
71
72
|
}
|
|
72
73
|
async startApplication(appData) {
|
|
@@ -75,9 +76,24 @@ class AndroidApplicationManager extends application_manager_base_1.ApplicationMa
|
|
|
75
76
|
`cat /dev/null > ${constants_1.LiveSyncPaths.ANDROID_TMP_DIR_NAME}/${appData.appId}-debugbreak`,
|
|
76
77
|
]);
|
|
77
78
|
}
|
|
79
|
+
// If the app is debuggable, the Runtime will update the file when its ready for debugging
|
|
80
|
+
// and we will be able to take decisions and synchronize the debug experience based on the content
|
|
78
81
|
await this.adb.executeShellCommand([
|
|
79
82
|
`cat /dev/null > ${constants_1.LiveSyncPaths.ANDROID_TMP_DIR_NAME}/${appData.appId}-debugger-started`,
|
|
80
83
|
]);
|
|
84
|
+
/*
|
|
85
|
+
Example "pm dump <app_identifier> | grep -A 1 MAIN" output"
|
|
86
|
+
android.intent.action.MAIN:
|
|
87
|
+
3b2df03 org.nativescript.cliapp/com.tns.NativeScriptActivity filter 50dd82e
|
|
88
|
+
Action: "android.intent.action.MAIN"
|
|
89
|
+
Category: "android.intent.category.LAUNCHER"
|
|
90
|
+
--
|
|
91
|
+
intent={act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=org.nativescript.cliapp/com.tns.NativeScriptActivity}
|
|
92
|
+
realActivity=org.nativescript.cliapp/com.tns.NativeScriptActivity
|
|
93
|
+
--
|
|
94
|
+
Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=org.nativescript.cliapp/com.tns.NativeScriptActivity }
|
|
95
|
+
frontOfTask=true task=TaskRecord{fe592ac #449 A=org.nativescript.cliapp U=0 StackId=1 sz=1}
|
|
96
|
+
*/
|
|
81
97
|
const appIdentifier = appData.appId;
|
|
82
98
|
const pmDumpOutput = await this.adb.executeShellCommand([
|
|
83
99
|
"pm",
|
|
@@ -127,6 +143,8 @@ class AndroidApplicationManager extends application_manager_base_1.ApplicationMa
|
|
|
127
143
|
pid: processIdentifier,
|
|
128
144
|
appId: appIdentifier,
|
|
129
145
|
onAppRestarted: () => {
|
|
146
|
+
// If the app restarts, we update the PID and
|
|
147
|
+
// restart log helper.
|
|
130
148
|
this.onAppLaunch(appData);
|
|
131
149
|
},
|
|
132
150
|
});
|
|
@@ -205,3 +223,4 @@ __decorate([
|
|
|
205
223
|
__decorate([
|
|
206
224
|
(0, decorators_1.cache)()
|
|
207
225
|
], AndroidApplicationManager.prototype, "getFullyQualifiedActivityRegex", null);
|
|
226
|
+
//# sourceMappingURL=android-application-manager.js.map
|
|
@@ -38,11 +38,15 @@ class AndroidDebugBridge {
|
|
|
38
38
|
return this.$childProcess.spawn(command.command, command.args);
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
|
+
// If adb -s <invalid device id> install <smth> is executed the childProcess won't get any response
|
|
42
|
+
// because the adb will be waiting for valid device and will not send close or exit event.
|
|
43
|
+
// For example `adb -s <invalid device id> install <smth>` throws error 'error: device \'030939f508e6c773\' not found\r\n' exitCode 4294967295
|
|
41
44
|
const result = await this.$childProcess.spawnFromEvent(command.command, command.args, event, childProcessOptions, { throwError: false });
|
|
42
45
|
const errors = this.$androidDebugBridgeResultHandler.checkForErrors(result);
|
|
43
46
|
if (errors && errors.length > 0) {
|
|
44
47
|
this.$androidDebugBridgeResultHandler.handleErrors(errors, treatErrorsAsWarnings);
|
|
45
48
|
}
|
|
49
|
+
// Some adb commands returns array of strings instead of object with stdout and stderr. (adb start-server)
|
|
46
50
|
return result.stdout === undefined || result.stdout === null
|
|
47
51
|
? result
|
|
48
52
|
: result.stdout;
|
|
@@ -121,6 +125,7 @@ class AndroidDebugBridge {
|
|
|
121
125
|
}
|
|
122
126
|
async pushFile(localFilePath, deviceFilePath) {
|
|
123
127
|
const fileDirectory = (0, helpers_1.fromWindowsRelativePathToUnix)(path.dirname(deviceFilePath));
|
|
128
|
+
// starting from API level 28, the push command is returning an error if the directory does not exist
|
|
124
129
|
await this.executeShellCommand(["mkdir", "-p", fileDirectory]);
|
|
125
130
|
await this.executeCommand(["push", localFilePath, deviceFilePath]);
|
|
126
131
|
await this.executeShellCommand(["chmod", "0777", fileDirectory]);
|
|
@@ -140,3 +145,4 @@ __decorate([
|
|
|
140
145
|
(0, decorators_1.invokeInit)()
|
|
141
146
|
], AndroidDebugBridge.prototype, "getDevices", null);
|
|
142
147
|
yok_1.injector.register("adb", AndroidDebugBridge);
|
|
148
|
+
//# sourceMappingURL=android-debug-bridge.js.map
|
|
@@ -74,6 +74,8 @@ class AndroidDeviceFileSystem {
|
|
|
74
74
|
return transferredFiles;
|
|
75
75
|
}
|
|
76
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
|
|
77
79
|
const minAndroidWithoutAdbPushDir = "9.0.0";
|
|
78
80
|
const isAdbPushDirSupported = semver.lt(semver.coerce(deviceAppData.device.deviceInfo.version), minAndroidWithoutAdbPushDir);
|
|
79
81
|
const deviceProjectDir = await deviceAppData.getDeviceProjectRootPath();
|
|
@@ -120,6 +122,7 @@ class AndroidDeviceFileSystem {
|
|
|
120
122
|
const hostTmpDir = await this.$tempService.mkdirSync("application-");
|
|
121
123
|
const commandsFileHostPath = path.join(hostTmpDir, "temp.commands.file");
|
|
122
124
|
this.$fs.writeFile(commandsFileHostPath, fileContent);
|
|
125
|
+
// copy it to the device
|
|
123
126
|
await this.transferFile(commandsFileHostPath, deviceFilePath);
|
|
124
127
|
await this.adb.executeShellCommand(["chmod", "0777", deviceFilePath]);
|
|
125
128
|
}
|
|
@@ -141,3 +144,4 @@ class AndroidDeviceFileSystem {
|
|
|
141
144
|
}
|
|
142
145
|
}
|
|
143
146
|
exports.AndroidDeviceFileSystem = AndroidDeviceFileSystem;
|
|
147
|
+
//# sourceMappingURL=android-device-file-system.js.map
|
|
@@ -51,6 +51,8 @@ class AndroidDeviceHashService {
|
|
|
51
51
|
const action = async (localToDevicePathData) => {
|
|
52
52
|
const localPath = localToDevicePathData.getLocalPath();
|
|
53
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.
|
|
54
56
|
initialShasums[localPath] = await this.$fs.getFileShasum(localPath);
|
|
55
57
|
}
|
|
56
58
|
};
|
|
@@ -106,3 +108,4 @@ __decorate([
|
|
|
106
108
|
__decorate([
|
|
107
109
|
(0, decorators_1.cache)()
|
|
108
110
|
], AndroidDeviceHashService.prototype, "getTempDir", null);
|
|
111
|
+
//# sourceMappingURL=android-device-hash-service.js.map
|
|
@@ -32,6 +32,8 @@ class AndroidDevice {
|
|
|
32
32
|
this.fileSystem = this.$injector.resolve(fileSystemPath.AndroidDeviceFileSystem, { adb: this.adb });
|
|
33
33
|
let details = await this.getDeviceDetails(["getprop"]);
|
|
34
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
|
|
35
37
|
details = await this.getDeviceDetails(["cat", "/system/build.prop"]);
|
|
36
38
|
}
|
|
37
39
|
this.$logger.trace(details);
|
|
@@ -88,6 +90,9 @@ class AndroidDevice {
|
|
|
88
90
|
try {
|
|
89
91
|
const details = await this.adb.executeShellCommand(shellCommandArgs);
|
|
90
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]: []
|
|
91
96
|
const match = /(?:\[?ro\.build\.version|ro\.product|ro\.build)\.(.+?)]?(?:\:|=)(?:\s*?\[)?(.*?)]?$/.exec(value);
|
|
92
97
|
if (match) {
|
|
93
98
|
parsedDetails[match[1]] = match[2];
|
|
@@ -101,6 +106,7 @@ class AndroidDevice {
|
|
|
101
106
|
return parsedDetails;
|
|
102
107
|
}
|
|
103
108
|
getIsTablet(details) {
|
|
109
|
+
//version 3.x.x (also known as Honeycomb) is a tablet only version
|
|
104
110
|
return (details &&
|
|
105
111
|
(_.startsWith(details.release, "3.") ||
|
|
106
112
|
_.includes((details.characteristics || "").toLowerCase(), "tablet")));
|
|
@@ -114,6 +120,7 @@ class AndroidDevice {
|
|
|
114
120
|
}
|
|
115
121
|
}
|
|
116
122
|
exports.AndroidDevice = AndroidDevice;
|
|
123
|
+
// http://stackoverflow.com/questions/31178195/what-does-adb-device-status-mean
|
|
117
124
|
AndroidDevice.ADB_DEVICE_STATUS_INFO = {
|
|
118
125
|
device: {
|
|
119
126
|
errorHelp: null,
|
|
@@ -139,3 +146,4 @@ AndroidDevice.ADB_DEVICE_STATUS_INFO = {
|
|
|
139
146
|
__decorate([
|
|
140
147
|
(0, decorators_1.cache)()
|
|
141
148
|
], AndroidDevice.prototype, "init", null);
|
|
149
|
+
//# sourceMappingURL=android-device.js.map
|
|
@@ -103,7 +103,7 @@ class AndroidEmulatorServices {
|
|
|
103
103
|
endTimeEpoch,
|
|
104
104
|
};
|
|
105
105
|
}
|
|
106
|
-
await (0, helpers_1.sleep)(10000);
|
|
106
|
+
await (0, helpers_1.sleep)(10000); // the emulator definitely takes its time to wake up
|
|
107
107
|
hasTimeLeft = (0, helpers_1.getCurrentEpochTime)() < endTimeEpoch;
|
|
108
108
|
}
|
|
109
109
|
if (!hasTimeLeft && !isInfiniteWait) {
|
|
@@ -180,3 +180,4 @@ class AndroidEmulatorServices {
|
|
|
180
180
|
}
|
|
181
181
|
exports.AndroidEmulatorServices = AndroidEmulatorServices;
|
|
182
182
|
yok_1.injector.register("androidEmulatorServices", AndroidEmulatorServices);
|
|
183
|
+
//# 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) => {
|
|
@@ -44,6 +46,8 @@ class AndroidIniFileParser {
|
|
|
44
46
|
}, Object.create(null));
|
|
45
47
|
}
|
|
46
48
|
getAvdEncoding(avdName) {
|
|
49
|
+
// avd files can have different encoding, defined on the first line.
|
|
50
|
+
// find which one it is (if any) and use it to correctly read the file contents
|
|
47
51
|
let encoding = "utf8";
|
|
48
52
|
let contents = this.$fs.readText(avdName, "ascii");
|
|
49
53
|
if (contents.length > 0) {
|
|
@@ -57,18 +61,22 @@ class AndroidIniFileParser {
|
|
|
57
61
|
}
|
|
58
62
|
return encoding;
|
|
59
63
|
}
|
|
64
|
+
// Android L is not written as a number in the .ini files, and we need to convert it
|
|
60
65
|
readTargetNum(target) {
|
|
61
66
|
const platform = target.replace("android-", "");
|
|
62
67
|
let platformNumber = +platform;
|
|
63
68
|
if (isNaN(platformNumber)) {
|
|
69
|
+
// this may be a google image
|
|
64
70
|
const googlePlatform = target.split(":")[2];
|
|
65
71
|
if (googlePlatform) {
|
|
66
72
|
platformNumber = +googlePlatform;
|
|
67
73
|
}
|
|
68
74
|
else if (platform === "L") {
|
|
75
|
+
// Android SDK 20 preview
|
|
69
76
|
platformNumber = 20;
|
|
70
77
|
}
|
|
71
78
|
else if (platform === "MNC") {
|
|
79
|
+
// Android M preview
|
|
72
80
|
platformNumber = 22;
|
|
73
81
|
}
|
|
74
82
|
}
|
|
@@ -77,3 +85,4 @@ class AndroidIniFileParser {
|
|
|
77
85
|
}
|
|
78
86
|
exports.AndroidIniFileParser = AndroidIniFileParser;
|
|
79
87
|
yok_1.injector.register("androidIniFileParser", AndroidIniFileParser);
|
|
88
|
+
//# sourceMappingURL=android-ini-file-parser.js.map
|
|
@@ -37,6 +37,10 @@ class AndroidLogFilter {
|
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
exports.AndroidLogFilter = AndroidLogFilter;
|
|
40
|
+
//sample line is "I/Web Console( 4438): Received Event: deviceready at file:///storage/emulated/0/Icenium/com.telerik.TestApp/js/index.js:48"
|
|
40
41
|
AndroidLogFilter.LINE_REGEX = /.\/(.+?)\s*\(\s*\d+?\): (.*)/;
|
|
42
|
+
// 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"
|
|
43
|
+
// or '12-28 10:45:08.020 3329 3329 W chromium: [WARNING:data_reduction_proxy_settings.cc(328)] SPDY proxy OFF at startup'
|
|
41
44
|
AndroidLogFilter.API_LEVEL_23_LINE_REGEX = /.+?\s+?(?:[A-Z]\s+?)([A-Za-z \.]+?)\s*?\: (.*)/;
|
|
42
45
|
yok_1.injector.register("androidLogFilter", AndroidLogFilter);
|
|
46
|
+
//# sourceMappingURL=android-log-filter.js.map
|
|
@@ -69,6 +69,9 @@ class AndroidVirtualDeviceService {
|
|
|
69
69
|
get pathToEmulatorExecutable() {
|
|
70
70
|
const emulatorExecutableName = "emulator";
|
|
71
71
|
if (this.androidHome) {
|
|
72
|
+
// Check https://developer.android.com/studio/releases/sdk-tools.html (25.3.0)
|
|
73
|
+
// Since this version of SDK tools, the emulator is a separate package.
|
|
74
|
+
// However the emulator executable still exists in the "tools" dir.
|
|
72
75
|
const pathToEmulatorFromAndroidStudio = path.join(this.androidHome, emulatorExecutableName, emulatorExecutableName);
|
|
73
76
|
const realFilePath = this.$hostInfo.isWindows
|
|
74
77
|
? `${pathToEmulatorFromAndroidStudio}.exe`
|
|
@@ -108,6 +111,17 @@ class AndroidVirtualDeviceService {
|
|
|
108
111
|
client.on("data", (data) => {
|
|
109
112
|
output += data.toString();
|
|
110
113
|
const imageIdentifier = this.getImageIdentifierFromClientOutput(output);
|
|
114
|
+
// old output should look like:
|
|
115
|
+
// Android Console: type 'help' for a list of commands
|
|
116
|
+
// OK
|
|
117
|
+
// <Name of image>
|
|
118
|
+
// OK
|
|
119
|
+
// new output should look like:
|
|
120
|
+
// Android Console: type 'help' for a list of commands
|
|
121
|
+
// OK
|
|
122
|
+
// a\u001b[K\u001b[Dav\u001b[K\u001b[D\u001b[Davd\u001b...
|
|
123
|
+
// <Name of image>
|
|
124
|
+
// OK
|
|
111
125
|
if (imageIdentifier && !isResolved) {
|
|
112
126
|
this.mapEmulatorIdToImageIdentifier[emulatorId] = imageIdentifier;
|
|
113
127
|
this.clearNetConnection(client, timer);
|
|
@@ -159,6 +173,8 @@ class AndroidVirtualDeviceService {
|
|
|
159
173
|
if (this.pathToAvdManagerExecutable &&
|
|
160
174
|
this.$fs.exists(this.pathToAvdManagerExecutable)) {
|
|
161
175
|
if (process.env.JAVA_HOME) {
|
|
176
|
+
// 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
|
|
177
|
+
// no matter if you have correct java in PATH.
|
|
162
178
|
canExecute = !!(await this.$sysInfo.getJavaVersionFromJavaHome());
|
|
163
179
|
}
|
|
164
180
|
else {
|
|
@@ -230,6 +246,13 @@ class AndroidVirtualDeviceService {
|
|
|
230
246
|
const avdOutput = output.split(constants_1.AndroidVirtualDevice.AVAILABLE_AVDS_MESSAGE);
|
|
231
247
|
const availableDevices = avdOutput && avdOutput[1] && avdOutput[1].trim();
|
|
232
248
|
if (availableDevices) {
|
|
249
|
+
// In some cases `avdmanager list avds` command prints:
|
|
250
|
+
// `The following Android Virtual Devices could not be loaded:
|
|
251
|
+
// Name: Pixel_2_XL_API_28
|
|
252
|
+
// Path: /Users/<username>/.android/avd/Pixel_2_XL_API_28.avd
|
|
253
|
+
// Error: Google pixel_2_xl no longer exists as a device`
|
|
254
|
+
// These devices sometimes are valid so try to parse them.
|
|
255
|
+
// Also these devices are printed at the end of the output and are separated with 2 new lines from the valid devices output.
|
|
233
256
|
const parts = availableDevices.split(/(?:\r?\n){2}/);
|
|
234
257
|
const items = [parts[0], parts[1]].filter((item) => !!item);
|
|
235
258
|
for (const item of items) {
|
|
@@ -246,6 +269,7 @@ class AndroidVirtualDeviceService {
|
|
|
246
269
|
}
|
|
247
270
|
getAvdManagerDeviceInfo(output) {
|
|
248
271
|
const avdManagerDeviceInfo = Object.create(null);
|
|
272
|
+
// Split by `\n`, not EOL as the avdmanager and android executables print results with `\n` only even on Windows
|
|
249
273
|
_.reduce(output.split("\n"), (result, row) => {
|
|
250
274
|
const [key, value] = row.split(": ").map((part) => part.trim());
|
|
251
275
|
switch (key) {
|
|
@@ -292,6 +316,7 @@ class AndroidVirtualDeviceService {
|
|
|
292
316
|
};
|
|
293
317
|
}
|
|
294
318
|
getImageIdentifierFromClientOutput(output) {
|
|
319
|
+
// 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.
|
|
295
320
|
const lines = _.map(output.split(os_1.EOL), (line) => line.trim());
|
|
296
321
|
const firstIndexOfOk = _.indexOf(lines, "OK");
|
|
297
322
|
if (firstIndexOfOk < 0) {
|
|
@@ -340,3 +365,4 @@ __decorate([
|
|
|
340
365
|
(0, decorators_1.cache)()
|
|
341
366
|
], AndroidVirtualDeviceService.prototype, "getConfigurationError", null);
|
|
342
367
|
yok_1.injector.register("androidVirtualDeviceService", AndroidVirtualDeviceService);
|
|
368
|
+
//# sourceMappingURL=android-virtual-device-service.js.map
|
|
@@ -42,6 +42,7 @@ class AndroidGenymotionService {
|
|
|
42
42
|
.map(async (row) => {
|
|
43
43
|
const match = row.match(/^(.+?)\s+device$/);
|
|
44
44
|
if (match && match[1]) {
|
|
45
|
+
// possible genymotion emulator
|
|
45
46
|
const emulatorId = match[1];
|
|
46
47
|
const result = (await this.isGenymotionEmulator(emulatorId))
|
|
47
48
|
? emulatorId
|
|
@@ -92,6 +93,7 @@ class AndroidGenymotionService {
|
|
|
92
93
|
this.$emulatorHelper.setRunningAndroidEmulatorProperties(runningEmulatorId, runningEmulator);
|
|
93
94
|
return runningEmulator;
|
|
94
95
|
}
|
|
96
|
+
// https://wiki.appcelerator.org/display/guides2/Installing+Genymotion
|
|
95
97
|
get playerSearchPaths() {
|
|
96
98
|
return {
|
|
97
99
|
darwin: [
|
|
@@ -133,13 +135,14 @@ class AndroidGenymotionService {
|
|
|
133
135
|
vendor: constants_1.AndroidVirtualDevice.GENYMOTION_VENDOR_NAME,
|
|
134
136
|
status: constants_1.NOT_RUNNING_EMULATOR_STATUS,
|
|
135
137
|
errorHelp: [configurationError, error].filter((item) => !!item).join(os_1.EOL) || null,
|
|
136
|
-
isTablet: false,
|
|
138
|
+
isTablet: false, //TODO: Consider how to populate this correctly when the device is not running
|
|
137
139
|
type: constants_1.DeviceTypes.Emulator,
|
|
138
140
|
connectionTypes: [constants_2.DeviceConnectionType.Local],
|
|
139
141
|
platform: this.$devicePlatformsConstants.Android,
|
|
140
142
|
};
|
|
141
143
|
}
|
|
142
144
|
getSdkVersion(output) {
|
|
145
|
+
// Example -> Name: android_version, value: 6.0.0, timestamp: 1530090506102029000, flags:
|
|
143
146
|
const androidApiLevelRow = output
|
|
144
147
|
.split("\n")
|
|
145
148
|
.filter((row) => !!row)
|
|
@@ -165,6 +168,7 @@ In case you have installed Genymotion in a different location, please add the pa
|
|
|
165
168
|
}
|
|
166
169
|
async getConfigurationError() {
|
|
167
170
|
const result = await this.$childProcess.trySpawnFromCloseEvent(this.pathToEmulatorExecutable, [], {}, { throwError: false });
|
|
171
|
+
// When player is spawned, it always prints message on stderr.
|
|
168
172
|
if (result &&
|
|
169
173
|
result.stderr &&
|
|
170
174
|
result.stderr.indexOf(constants_1.AndroidVirtualDevice.GENYMOTION_DEFAULT_STDERR_STRING) === -1) {
|
|
@@ -182,3 +186,4 @@ __decorate([
|
|
|
182
186
|
(0, decorators_1.cache)()
|
|
183
187
|
], AndroidGenymotionService.prototype, "getConfigurationError", null);
|
|
184
188
|
yok_1.injector.register("androidGenymotionService", AndroidGenymotionService);
|
|
189
|
+
//# sourceMappingURL=genymotion-service.js.map
|
|
@@ -34,6 +34,7 @@ class VirtualBoxService {
|
|
|
34
34
|
.split(os_1.EOL)
|
|
35
35
|
.filter((row) => !!row)
|
|
36
36
|
.map((row) => {
|
|
37
|
+
// Example row: "Google Nexus 4 - 5.0.0 - API 21 - 768x1280" {9d9beef2-cc60-4a54-bcc0-cc1dbf89811f}
|
|
37
38
|
const [rawName, rawId] = row.split('" ');
|
|
38
39
|
const id = rawId.substr(1, rawId.length - 2);
|
|
39
40
|
const name = rawName.substr(1, rawName.length - 1);
|
|
@@ -70,6 +71,15 @@ class VirtualBoxService {
|
|
|
70
71
|
if (this.$hostInfo.isWindows) {
|
|
71
72
|
let searchPath = null;
|
|
72
73
|
try {
|
|
74
|
+
/* This can be used as interface!!!!
|
|
75
|
+
arch:null
|
|
76
|
+
hive:"HKLM"
|
|
77
|
+
host:""
|
|
78
|
+
key:"\Software\Oracle\VirtualBox"
|
|
79
|
+
name:"InstallDir"
|
|
80
|
+
type:"REG_SZ"
|
|
81
|
+
value:"C:\Program Files\Oracle\VirtualBox\"
|
|
82
|
+
*/
|
|
73
83
|
const result = await (0, helpers_1.getWinRegPropertyValue)("\\Software\\Oracle\\VirtualBox", "InstallDir");
|
|
74
84
|
searchPath = result && result.value ? result.value : null;
|
|
75
85
|
}
|
|
@@ -102,3 +112,4 @@ __decorate([
|
|
|
102
112
|
(0, decorators_1.cache)()
|
|
103
113
|
], VirtualBoxService.prototype, "getvBoxManagePath", null);
|
|
104
114
|
yok_1.injector.register("virtualBoxService", VirtualBoxService);
|
|
115
|
+
//# sourceMappingURL=virtualbox-service.js.map
|
|
@@ -40,6 +40,7 @@ class LogcatHelper {
|
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
42
|
catch (err) {
|
|
43
|
+
// Ignore the error, the process is dead.
|
|
43
44
|
}
|
|
44
45
|
});
|
|
45
46
|
lineStream.on("data", (lineBuffer) => {
|
|
@@ -60,6 +61,7 @@ class LogcatHelper {
|
|
|
60
61
|
return;
|
|
61
62
|
const lines = (lineBuffer.toString() || "").split("\n");
|
|
62
63
|
for (let line of lines) {
|
|
64
|
+
// 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}
|
|
63
65
|
const startProc = /Start proc (?<pid>[0-9]+):(?<appId>.+?)\//.exec(line);
|
|
64
66
|
if (startProc &&
|
|
65
67
|
((_b = startProc.groups) === null || _b === void 0 ? void 0 : _b.appId) === options.appId &&
|
|
@@ -86,6 +88,9 @@ class LogcatHelper {
|
|
|
86
88
|
lineStream.removeAllListeners();
|
|
87
89
|
});
|
|
88
90
|
}
|
|
91
|
+
/**
|
|
92
|
+
* Stops the logcat process for the specified device if keepSingleProcess is not passed on start
|
|
93
|
+
*/
|
|
89
94
|
stop(deviceIdentifier) {
|
|
90
95
|
if (this.mapDevicesLoggingData[deviceIdentifier] &&
|
|
91
96
|
!this.mapDevicesLoggingData[deviceIdentifier].keepSingleProcess) {
|
|
@@ -102,6 +107,9 @@ class LogcatHelper {
|
|
|
102
107
|
(_e = loggingData.lineStream) === null || _e === void 0 ? void 0 : _e.removeAllListeners();
|
|
103
108
|
delete this.mapDevicesLoggingData[deviceIdentifier];
|
|
104
109
|
}
|
|
110
|
+
/**
|
|
111
|
+
* @deprecated - we likely don't need this anymore, and can simplify the code...
|
|
112
|
+
*/
|
|
105
113
|
async isLogcatPidSupported(deviceIdentifier) {
|
|
106
114
|
const device = await this.$devicesService.getDevice(deviceIdentifier);
|
|
107
115
|
const minAndroidWithLogcatPidSupport = "7.0.0";
|
|
@@ -111,6 +119,7 @@ class LogcatHelper {
|
|
|
111
119
|
async getLogcatStream(deviceIdentifier, pid) {
|
|
112
120
|
const isLogcatPidSupported = await this.isLogcatPidSupported(deviceIdentifier);
|
|
113
121
|
const adb = this.$injector.resolve(device_android_debug_bridge_1.DeviceAndroidDebugBridge, { identifier: deviceIdentifier });
|
|
122
|
+
// -T 1 - shows only new logs after starting adb logcat
|
|
114
123
|
const logcatCommand = ["logcat", "-T", "1"];
|
|
115
124
|
const acceptedTags = [
|
|
116
125
|
"chromium",
|
|
@@ -123,6 +132,7 @@ class LogcatHelper {
|
|
|
123
132
|
if (pid && isLogcatPidSupported) {
|
|
124
133
|
logcatCommand.push(`--pid=${pid}`);
|
|
125
134
|
acceptedTags.forEach((tag) => {
|
|
135
|
+
// -s <tag> - shows only logs with the specified tag
|
|
126
136
|
logcatCommand.push("-s", tag);
|
|
127
137
|
});
|
|
128
138
|
}
|
|
@@ -133,6 +143,8 @@ class LogcatHelper {
|
|
|
133
143
|
}
|
|
134
144
|
async getAppStartTrackingLogcatStream(deviceIdentifier, appId) {
|
|
135
145
|
const adb = this.$injector.resolve(device_android_debug_bridge_1.DeviceAndroidDebugBridge, { identifier: deviceIdentifier });
|
|
146
|
+
// -b system - shows the system buffer/logs only
|
|
147
|
+
// -T 1 - shows only new logs after starting adb logcat
|
|
136
148
|
const logcatCommand = [
|
|
137
149
|
`logcat`,
|
|
138
150
|
`-b`,
|
|
@@ -153,3 +165,4 @@ class LogcatHelper {
|
|
|
153
165
|
}
|
|
154
166
|
exports.LogcatHelper = LogcatHelper;
|
|
155
167
|
yok_1.injector.register("logcatHelper", LogcatHelper);
|
|
168
|
+
//# sourceMappingURL=logcat-helper.js.map
|
|
@@ -36,6 +36,9 @@ class ApplicationManagerBase extends events_1.EventEmitter {
|
|
|
36
36
|
if (!this.checkForApplicationUpdatesPromise) {
|
|
37
37
|
this.checkForApplicationUpdatesPromise = new Promise(async (resolve, reject) => {
|
|
38
38
|
let isFulfilled = false;
|
|
39
|
+
// As this method is called on 500ms, but it's execution may last much longer
|
|
40
|
+
// use locking, so the next executions will not get into the body, while the first one is still working.
|
|
41
|
+
// In case we do not break the next executions, we'll report each app as newly installed several times.
|
|
39
42
|
try {
|
|
40
43
|
const currentlyInstalledAppIdentifiers = await this.getInstalledApplications();
|
|
41
44
|
const previouslyInstalledAppIdentifiers = this.lastInstalledAppIdentifiers || [];
|
|
@@ -80,6 +83,7 @@ class ApplicationManagerBase extends events_1.EventEmitter {
|
|
|
80
83
|
_.each(notAvailableAppsForDebugging, (appInfo) => {
|
|
81
84
|
this.emit("debuggableAppLost", appInfo);
|
|
82
85
|
if (_.has(this.lastAvailableDebuggableAppViews, appInfo.appIdentifier)) {
|
|
86
|
+
// Prevent emitting debuggableViewLost when application cannot be debugged anymore.
|
|
83
87
|
delete this.lastAvailableDebuggableAppViews[appInfo.appIdentifier];
|
|
84
88
|
}
|
|
85
89
|
});
|
|
@@ -98,6 +102,7 @@ class ApplicationManagerBase extends events_1.EventEmitter {
|
|
|
98
102
|
_.each(newAvailableViews, (debugWebViewInfo) => {
|
|
99
103
|
this.emit("debuggableViewFound", appIdentifier, debugWebViewInfo);
|
|
100
104
|
});
|
|
105
|
+
// Determine which of the views had changed since last check and raise debuggableViewChanged event for them:
|
|
101
106
|
const keptViews = _.differenceBy(currentlyAvailableViews, newAvailableViews, "id");
|
|
102
107
|
_.each(keptViews, (view) => {
|
|
103
108
|
const previousTimeViewInfo = _.find(previouslyAvailableViews, (previousView) => previousView.id === view.id);
|
|
@@ -111,3 +116,4 @@ class ApplicationManagerBase extends events_1.EventEmitter {
|
|
|
111
116
|
}
|
|
112
117
|
}
|
|
113
118
|
exports.ApplicationManagerBase = ApplicationManagerBase;
|
|
119
|
+
//# 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
|
|
@@ -35,6 +35,7 @@ class DeviceLogProvider extends device_log_provider_base_1.DeviceLogProviderBase
|
|
|
35
35
|
this.colorPoolIndex = 0;
|
|
36
36
|
}
|
|
37
37
|
logData(lineText, platform, deviceIdentifier) {
|
|
38
|
+
// console.log(lineText)
|
|
38
39
|
const loggingOptions = this.getDeviceLogOptionsForDevice(deviceIdentifier);
|
|
39
40
|
let data = this.$logFilter.filterData(platform, lineText, loggingOptions);
|
|
40
41
|
data = this.$logSourceMapService.replaceWithOriginalFileLocations(platform, data, loggingOptions);
|
|
@@ -52,6 +53,7 @@ class DeviceLogProvider extends device_log_provider_base_1.DeviceLogProviderBase
|
|
|
52
53
|
return this.deviceColorMap.get(deviceIdentifier);
|
|
53
54
|
}
|
|
54
55
|
const color = this.colorPool[this.colorPoolIndex];
|
|
56
|
+
// wrap around if we have no more colors in the pool
|
|
55
57
|
this.colorPoolIndex =
|
|
56
58
|
this.colorPoolIndex === this.colorPool.length - 1
|
|
57
59
|
? 0
|
|
@@ -61,10 +63,13 @@ class DeviceLogProvider extends device_log_provider_base_1.DeviceLogProviderBase
|
|
|
61
63
|
}
|
|
62
64
|
logDataCore(data, deviceIdentifier) {
|
|
63
65
|
var _a, _b, _c;
|
|
66
|
+
// todo: use config to set logger - --env.classicLogs is temporary!
|
|
64
67
|
if ("classicLogs" in ((_a = this.$options.env) !== null && _a !== void 0 ? _a : {})) {
|
|
68
|
+
// legacy logging
|
|
65
69
|
this.$logger.info(data, { [constants_2.LoggerConfigData.skipNewLine]: true });
|
|
66
70
|
return;
|
|
67
71
|
}
|
|
72
|
+
// todo: extract into an injectable printer/logger service
|
|
68
73
|
let shouldPrepend = false;
|
|
69
74
|
let splitIndexes = [];
|
|
70
75
|
const lines = data
|
|
@@ -119,7 +124,25 @@ class DeviceLogProvider extends device_log_provider_base_1.DeviceLogProviderBase
|
|
|
119
124
|
printLine(prefix, ...parts) {
|
|
120
125
|
const fullLine = parts.join(" ");
|
|
121
126
|
console.log(prefix, fullLine);
|
|
127
|
+
/**
|
|
128
|
+
* Note: Disabled
|
|
129
|
+
*
|
|
130
|
+
* This splits the output into lines that fit within the current
|
|
131
|
+
* terminal width, however this makes copying json objects that
|
|
132
|
+
* span across multiple lines difficult, as it introduces
|
|
133
|
+
* whitespace & line breaks
|
|
134
|
+
*/
|
|
135
|
+
// const maxWidth = process.stdout.columns - 2;
|
|
136
|
+
// if (!maxWidth || maxWidth < 10 || fullLine.length < maxWidth) {
|
|
137
|
+
// console.log(prefix, fullLine);
|
|
138
|
+
// } else {
|
|
139
|
+
// for (let i = 0; i < fullLine.length; i += maxWidth) {
|
|
140
|
+
// const part = fullLine.substring(i, i + maxWidth);
|
|
141
|
+
// console.log(prefix, part);
|
|
142
|
+
// }
|
|
143
|
+
// }
|
|
122
144
|
}
|
|
123
145
|
}
|
|
124
146
|
exports.DeviceLogProvider = DeviceLogProvider;
|
|
125
147
|
yok_1.injector.register("deviceLogProvider", DeviceLogProvider);
|
|
148
|
+
//# sourceMappingURL=device-log-provider.js.map
|
|
@@ -6,6 +6,7 @@ const _ = require("lodash");
|
|
|
6
6
|
const yok_1 = require("../yok");
|
|
7
7
|
class EmulatorHelper {
|
|
8
8
|
constructor() {
|
|
9
|
+
// https://developer.android.com/guide/topics/manifest/uses-sdk-element
|
|
9
10
|
this.mapAndroidApiLevelToVersion = {
|
|
10
11
|
"android-36": "16.0.0",
|
|
11
12
|
"android-35": "15.0.0",
|
|
@@ -80,7 +81,9 @@ class EmulatorHelper {
|
|
|
80
81
|
emulator.identifier = emulatorId;
|
|
81
82
|
emulator.status = constants_1.RUNNING_EMULATOR_STATUS;
|
|
82
83
|
emulator.type = constants_1.DeviceTypes.Device;
|
|
84
|
+
//emulator.isTablet; // TODO: consider to do this here!!!
|
|
83
85
|
}
|
|
84
86
|
}
|
|
85
87
|
exports.EmulatorHelper = EmulatorHelper;
|
|
86
88
|
yok_1.injector.register("emulatorHelper", EmulatorHelper);
|
|
89
|
+
//# sourceMappingURL=emulator-helper.js.map
|
|
@@ -115,9 +115,11 @@ class IOSApplicationManager extends application_manager_base_1.ApplicationManage
|
|
|
115
115
|
await this.device.openDeviceLogStream();
|
|
116
116
|
}
|
|
117
117
|
getDebuggableApps() {
|
|
118
|
+
// Implement when we can find debuggable applications for iOS.
|
|
118
119
|
return Promise.resolve([]);
|
|
119
120
|
}
|
|
120
121
|
getDebuggableAppViews(appIdentifiers) {
|
|
122
|
+
// Implement when we can find debuggable applications for iOS.
|
|
121
123
|
return Promise.resolve(null);
|
|
122
124
|
}
|
|
123
125
|
}
|
|
@@ -128,3 +130,4 @@ __decorate([
|
|
|
128
130
|
__decorate([
|
|
129
131
|
(0, decorators_1.cache)()
|
|
130
132
|
], IOSApplicationManager.prototype, "startDeviceLog", null);
|
|
133
|
+
//# sourceMappingURL=ios-application-manager.js.map
|
|
@@ -44,6 +44,7 @@ class IOSDeviceOperations extends events_1.EventEmitter {
|
|
|
44
44
|
if (options && options.shouldReturnImmediateResult) {
|
|
45
45
|
return;
|
|
46
46
|
}
|
|
47
|
+
// We need this because we need to make sure that we have devices.
|
|
47
48
|
await new Promise((resolve, reject) => {
|
|
48
49
|
let iterationsCount = 0;
|
|
49
50
|
const maxIterationsCount = 3;
|
|
@@ -125,6 +126,8 @@ class IOSDeviceOperations extends events_1.EventEmitter {
|
|
|
125
126
|
return this.getMultipleResults(() => this.deviceLib.stop(stopArray), errorHandler);
|
|
126
127
|
}
|
|
127
128
|
dispose(signal) {
|
|
129
|
+
// We need to check if we should dispose the device lib.
|
|
130
|
+
// For example we do not want to dispose it when we start printing the device logs.
|
|
128
131
|
if (this.shouldDispose && this.deviceLib) {
|
|
129
132
|
this.deviceLib.removeAllListeners();
|
|
130
133
|
this.deviceLib.dispose(signal);
|
|
@@ -195,3 +198,4 @@ __decorate([
|
|
|
195
198
|
(0, decorators_1.cache)()
|
|
196
199
|
], IOSDeviceOperations.prototype, "attacheDeviceLogDataHandler", null);
|
|
197
200
|
yok_1.injector.register("iosDeviceOperations", IOSDeviceOperations);
|
|
201
|
+
//# sourceMappingURL=ios-device-operations.js.map
|