nativescript 8.9.0-dev.1 → 8.9.0-dev.2
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/.d.ts +1 -0
- package/lib/android-tools-info.js +32 -9
- package/lib/base-package-manager.js +71 -47
- package/lib/bootstrap.js +6 -1
- package/lib/bun-package-manager.js +104 -65
- package/lib/color.js +5 -2
- package/lib/commands/add-platform.js +31 -14
- package/lib/commands/apple-login.js +30 -18
- package/lib/commands/appstore-list.js +46 -34
- package/lib/commands/appstore-upload.js +68 -52
- package/lib/commands/build.js +90 -57
- package/lib/commands/clean.js +197 -161
- package/lib/commands/command-base.js +28 -14
- package/lib/commands/config.js +71 -48
- package/lib/commands/create-project.js +235 -210
- package/lib/commands/debug.js +93 -66
- package/lib/commands/deploy.js +47 -30
- package/lib/commands/embedding/embed.js +59 -33
- package/lib/commands/extensibility/install-extension.js +17 -5
- package/lib/commands/extensibility/list-extensions.js +25 -13
- package/lib/commands/extensibility/uninstall-extension.js +16 -4
- package/lib/commands/fonts.js +42 -30
- package/lib/commands/generate-assets.js +29 -13
- package/lib/commands/generate-help.js +14 -2
- package/lib/commands/generate.js +70 -12
- package/lib/commands/info.js +14 -2
- package/lib/commands/install.js +50 -34
- package/lib/commands/list-platforms.js +26 -14
- package/lib/commands/migrate.js +27 -15
- package/lib/commands/native-add.js +51 -23
- package/lib/commands/platform-clean.js +33 -19
- package/lib/commands/plugin/add-plugin.js +26 -12
- package/lib/commands/plugin/build-plugin.js +45 -31
- package/lib/commands/plugin/create-plugin.js +138 -110
- package/lib/commands/plugin/list-plugins.js +34 -22
- package/lib/commands/plugin/remove-plugin.js +35 -20
- package/lib/commands/plugin/update-plugin.js +34 -20
- package/lib/commands/post-install.js +39 -20
- package/lib/commands/prepare.js +39 -22
- package/lib/commands/preview.js +64 -49
- package/lib/commands/remove-platform.js +19 -7
- package/lib/commands/resources/resources-update.js +28 -13
- package/lib/commands/run.js +77 -55
- package/lib/commands/setup.js +1 -0
- package/lib/commands/start.js +20 -6
- package/lib/commands/test-init.js +138 -123
- package/lib/commands/test.js +97 -67
- package/lib/commands/typings.js +143 -126
- package/lib/commands/update-platform.js +40 -22
- package/lib/commands/update.js +45 -30
- package/lib/commands/widget.js +767 -0
- package/lib/common/bootstrap.js +1 -0
- package/lib/common/child-process.js +75 -53
- package/lib/common/codeGeneration/code-entity.js +2 -1
- package/lib/common/codeGeneration/code-printer.js +2 -1
- package/lib/common/command-params.js +19 -7
- package/lib/common/commands/analytics.js +43 -27
- package/lib/common/commands/autocompletion.js +59 -39
- package/lib/common/commands/device/device-log-stream.js +24 -12
- package/lib/common/commands/device/get-file.js +35 -22
- package/lib/common/commands/device/list-applications.js +24 -12
- package/lib/common/commands/device/list-devices.js +90 -72
- package/lib/common/commands/device/list-files.js +36 -23
- package/lib/common/commands/device/put-file.js +35 -22
- package/lib/common/commands/device/run-application.js +26 -12
- package/lib/common/commands/device/stop-application.js +23 -11
- package/lib/common/commands/device/uninstall-application.js +18 -6
- package/lib/common/commands/doctor.js +3 -2
- package/lib/common/commands/generate-messages.js +29 -17
- package/lib/common/commands/help.js +34 -20
- package/lib/common/commands/package-manager-get.js +18 -6
- package/lib/common/commands/package-manager-set.js +21 -9
- package/lib/common/commands/post-install.js +14 -2
- package/lib/common/commands/preuninstall.js +48 -24
- package/lib/common/commands/proxy/proxy-base.js +23 -8
- package/lib/common/commands/proxy/proxy-clear.js +16 -4
- package/lib/common/commands/proxy/proxy-get.js +15 -3
- package/lib/common/commands/proxy/proxy-set.js +101 -87
- package/lib/common/common-lib.js +1 -0
- package/lib/common/constants.js +22 -11
- package/lib/common/decorators.js +70 -10
- package/lib/common/dispatchers.js +106 -80
- package/lib/common/errors.js +116 -91
- package/lib/common/file-system.js +141 -108
- package/lib/common/header.js +5 -1
- package/lib/common/helpers.js +267 -152
- package/lib/common/host-info.js +54 -37
- package/lib/common/http-client.js +128 -93
- package/lib/common/logger/appenders/cli-appender.js +6 -1
- package/lib/common/logger/appenders/emit-appender.js +6 -1
- package/lib/common/logger/layouts/cli-layout.js +3 -1
- package/lib/common/logger/logger.js +9 -4
- package/lib/common/messages/messages.js +6 -0
- package/lib/common/mobile/android/android-application-manager.js +162 -122
- package/lib/common/mobile/android/android-debug-bridge-result-handler.js +2 -1
- package/lib/common/mobile/android/android-debug-bridge.js +118 -87
- package/lib/common/mobile/android/android-device-file-system.js +135 -98
- package/lib/common/mobile/android/android-device-hash-service.js +78 -50
- package/lib/common/mobile/android/android-device.js +93 -68
- package/lib/common/mobile/android/android-emulator-services.js +131 -105
- package/lib/common/mobile/android/android-ini-file-parser.js +9 -0
- package/lib/common/mobile/android/android-log-filter.js +5 -1
- package/lib/common/mobile/android/android-virtual-device-service.js +123 -76
- package/lib/common/mobile/android/device-android-debug-bridge.js +30 -13
- package/lib/common/mobile/android/genymotion/genymotion-service.js +123 -91
- package/lib/common/mobile/android/genymotion/virtualbox-service.js +92 -64
- package/lib/common/mobile/android/logcat-helper.js +140 -108
- package/lib/common/mobile/application-manager-base.js +113 -84
- 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 +19 -7
- 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 +111 -79
- package/lib/common/mobile/ios/device/ios-device-file-system.js +106 -78
- package/lib/common/mobile/ios/device/ios-device-operations.js +146 -105
- package/lib/common/mobile/ios/device/ios-device.js +40 -20
- package/lib/common/mobile/ios/ios-device-base.js +82 -58
- 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 +96 -63
- package/lib/common/mobile/ios/simulator/ios-sim-resolver.js +2 -1
- package/lib/common/mobile/ios/simulator/ios-simulator-application-manager.js +95 -60
- package/lib/common/mobile/ios/simulator/ios-simulator-device.js +48 -27
- package/lib/common/mobile/ios/simulator/ios-simulator-file-system.js +63 -37
- package/lib/common/mobile/ios/simulator/ios-simulator-log-provider.js +36 -24
- 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 +64 -43
- package/lib/common/mobile/mobile-core/android-emulator-discovery.js +35 -21
- package/lib/common/mobile/mobile-core/android-process-service.js +214 -143
- package/lib/common/mobile/mobile-core/device-discovery.js +14 -2
- package/lib/common/mobile/mobile-core/devices-service.js +505 -386
- package/lib/common/mobile/mobile-core/ios-device-discovery.js +37 -24
- package/lib/common/mobile/mobile-core/ios-simulator-discovery.js +65 -47
- package/lib/common/mobile/mobile-helper.js +27 -15
- package/lib/common/mobile/wp8/wp8-emulator-services.js +53 -25
- package/lib/common/opener.js +3 -2
- 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 +114 -91
- package/lib/common/queue.js +21 -9
- package/lib/common/resource-loader.js +1 -0
- package/lib/common/services/auto-completion-service.js +65 -40
- package/lib/common/services/cancellation.js +29 -17
- package/lib/common/services/commands-service.js +180 -146
- package/lib/common/services/help-service.js +166 -133
- package/lib/common/services/hooks-service.js +121 -93
- package/lib/common/services/ios-notification-service.js +35 -21
- package/lib/common/services/json-file-settings-service.js +77 -52
- package/lib/common/services/lock-service.js +58 -35
- package/lib/common/services/message-contract-generator.js +47 -35
- package/lib/common/services/messages-service.js +1 -0
- package/lib/common/services/micro-templating-service.js +21 -4
- package/lib/common/services/net-service.js +110 -90
- package/lib/common/services/project-files-manager.js +28 -10
- package/lib/common/services/project-files-provider-base.js +1 -0
- package/lib/common/services/proxy-service.js +25 -13
- package/lib/common/services/qr.js +25 -13
- package/lib/common/services/settings-service.js +2 -1
- package/lib/common/services/xcode-select-service.js +36 -20
- package/lib/common/utils.js +3 -2
- package/lib/common/validators/project-name-validator.js +2 -1
- package/lib/common/validators/validation-result.js +2 -1
- package/lib/common/verify-node-version.js +11 -3
- package/lib/common/yok.js +69 -35
- package/lib/config.js +72 -36
- package/lib/constants-provider.js +1 -0
- package/lib/constants.js +78 -25
- package/lib/controllers/build-controller.js +100 -82
- package/lib/controllers/debug-controller.js +133 -107
- package/lib/controllers/deploy-controller.js +24 -15
- package/lib/controllers/migrate-controller.js +884 -723
- package/lib/controllers/platform-controller.js +94 -71
- package/lib/controllers/prepare-controller.js +274 -232
- package/lib/controllers/run-controller.js +427 -397
- package/lib/controllers/update-controller-base.js +30 -16
- package/lib/controllers/update-controller.js +130 -94
- 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 +2 -4
- package/lib/data/run-data.js +1 -0
- package/lib/definitions/project.d.ts +26 -0
- package/lib/detached-processes/cleanup-js-subprocess.js +20 -5
- package/lib/detached-processes/cleanup-process.js +43 -30
- package/lib/detached-processes/file-log-service.js +2 -1
- package/lib/device-path-provider.js +35 -23
- package/lib/device-sockets/ios/app-debug-socket-proxy-factory.js +171 -149
- package/lib/device-sockets/ios/notification.js +4 -1
- package/lib/device-sockets/ios/socket-request-executor.js +42 -24
- package/lib/helpers/android-bundle-validator-helper.js +3 -2
- package/lib/helpers/deploy-command-helper.js +50 -44
- package/lib/helpers/key-command-helper.js +17 -6
- package/lib/helpers/livesync-command-helper.js +155 -137
- package/lib/helpers/network-connectivity-validator.js +18 -6
- package/lib/helpers/options-track-helper.js +19 -7
- package/lib/helpers/package-path-helper.js +1 -0
- package/lib/helpers/platform-command-helper.js +127 -101
- package/lib/helpers/version-validator-helper.js +1 -0
- package/lib/key-commands/bootstrap.js +3 -2
- package/lib/key-commands/index.js +205 -154
- package/lib/nativescript-cli-lib-bootstrap.js +4 -0
- package/lib/nativescript-cli-lib.js +1 -0
- package/lib/nativescript-cli.js +24 -6
- package/lib/node/pbxproj-dom-xcode.js +1 -0
- package/lib/node/xcode.js +1 -0
- package/lib/node-package-manager.js +114 -81
- package/lib/options.js +156 -122
- package/lib/package-installation-manager.js +172 -130
- package/lib/package-manager.js +88 -63
- package/lib/platform-command-param.js +16 -4
- package/lib/pnpm-package-manager.js +81 -59
- package/lib/project-data.js +13 -1
- package/lib/providers/project-files-provider.js +2 -1
- package/lib/resolvers/livesync-service-resolver.js +1 -0
- package/lib/services/analytics/analytics-broker-process.js +32 -19
- package/lib/services/analytics/analytics-broker.js +31 -17
- package/lib/services/analytics/analytics-service.js +210 -170
- package/lib/services/analytics/google-analytics-provider.js +59 -43
- package/lib/services/analytics-settings-service.js +37 -15
- package/lib/services/android/android-bundle-tool-service.js +61 -43
- package/lib/services/android/gradle-build-args-service.js +23 -9
- package/lib/services/android/gradle-build-service.js +36 -22
- package/lib/services/android/gradle-command-service.js +36 -22
- package/lib/services/android-device-debug-service.js +123 -90
- package/lib/services/android-plugin-build-service.js +260 -205
- package/lib/services/android-project-service.js +241 -129
- package/lib/services/android-resources-migration-service.js +71 -51
- package/lib/services/apple-portal/apple-portal-application-service.js +64 -46
- package/lib/services/apple-portal/apple-portal-cookie-service.js +1 -0
- package/lib/services/apple-portal/apple-portal-session-service.js +218 -197
- package/lib/services/apple-portal/srp/srp-wrapper.js +61 -43
- package/lib/services/assets-generation/assets-generation-service.js +128 -103
- package/lib/services/build-artifacts-service.js +22 -10
- package/lib/services/build-data-service.js +1 -0
- package/lib/services/build-info-file-service.js +36 -20
- package/lib/services/cleanup-service.js +81 -48
- package/lib/services/cocoapods-platform-manager.js +9 -0
- package/lib/services/cocoapods-service.js +153 -112
- 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 +72 -54
- package/lib/services/doctor-service.js +135 -101
- package/lib/services/extensibility-service.js +108 -81
- package/lib/services/files-hash-service.js +44 -26
- package/lib/services/hmr-status-service.js +3 -1
- package/lib/services/info-service.js +1 -0
- package/lib/services/initialize-service.js +54 -37
- package/lib/services/ios/export-options-plist-service.js +55 -38
- package/lib/services/ios/ios-signing-service.js +191 -168
- package/lib/services/ios/spm-service.js +70 -46
- package/lib/services/ios/xcodebuild-args-service.js +103 -77
- package/lib/services/ios/xcodebuild-command-service.js +26 -14
- package/lib/services/ios/xcodebuild-service.js +72 -52
- package/lib/services/ios-debugger-port-service.js +38 -24
- package/lib/services/ios-device-debug-service.js +103 -75
- package/lib/services/ios-entitlements-service.js +43 -31
- package/lib/services/ios-extensions-service.js +30 -18
- 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 +605 -437
- package/lib/services/ios-provision-service.js +132 -108
- package/lib/services/ios-watch-app-service.js +33 -21
- package/lib/services/ip-service.js +55 -38
- package/lib/services/itmstransporter-service.js +153 -129
- package/lib/services/karma-execution.js +2 -0
- package/lib/services/livesync/android-device-livesync-service-base.js +49 -31
- package/lib/services/livesync/android-device-livesync-service.js +151 -120
- package/lib/services/livesync/android-device-livesync-sockets-service.js +155 -121
- package/lib/services/livesync/android-livesync-service.js +36 -14
- package/lib/services/livesync/android-livesync-tool.js +117 -90
- package/lib/services/livesync/device-livesync-service-base.js +30 -15
- package/lib/services/livesync/ios-device-livesync-service.js +150 -114
- package/lib/services/livesync/ios-livesync-service.js +60 -42
- package/lib/services/livesync/livesync-socket.js +1 -0
- package/lib/services/livesync/platform-livesync-service-base.js +124 -94
- package/lib/services/livesync-process-data-service.js +1 -0
- package/lib/services/log-parser-service.js +2 -1
- package/lib/services/log-source-map-service.js +56 -30
- package/lib/services/marking-mode-service.js +33 -17
- package/lib/services/metadata-filtering-service.js +1 -0
- package/lib/services/npm-config-service.js +5 -1
- package/lib/services/pacote-service.js +71 -49
- package/lib/services/performance-service.js +4 -2
- package/lib/services/platform/add-platform-service.js +119 -51
- package/lib/services/platform/platform-validation-service.js +34 -22
- package/lib/services/platform/prepare-native-platform-service.js +65 -49
- package/lib/services/platform-environment-requirements.js +43 -27
- 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 +168 -125
- package/lib/services/prepare-data-service.js +1 -0
- package/lib/services/project-backup-service.js +5 -1
- package/lib/services/project-changes-service.js +152 -124
- package/lib/services/project-cleanup-service.js +79 -64
- package/lib/services/project-config-service.js +111 -73
- package/lib/services/project-data-service.js +154 -108
- package/lib/services/project-name-service.js +44 -28
- package/lib/services/project-service.js +113 -84
- package/lib/services/project-templates-service.js +68 -52
- package/lib/services/qr-code-terminal-service.js +1 -0
- package/lib/services/require-service.js +1 -0
- package/lib/services/start-service.js +60 -41
- package/lib/services/temp-service.js +22 -8
- package/lib/services/terminal-spinner-service.js +28 -15
- package/lib/services/test-execution-service.js +79 -59
- package/lib/services/test-initialization-service.js +6 -2
- package/lib/services/timeline-profiler-service.js +2 -1
- package/lib/services/user-settings-service.js +1 -0
- package/lib/services/versions-service.js +140 -119
- package/lib/services/watch-ignore-list-service.js +1 -0
- package/lib/services/webpack/webpack-compiler-service.js +279 -215
- package/lib/services/xcconfig-service.js +21 -8
- package/lib/services/xcproj-service.js +1 -0
- package/lib/shared-event-bus.js +6 -0
- package/lib/sys-info.js +63 -45
- package/lib/tools/config-manipulation/config-transformer.js +21 -0
- package/lib/tools/node-modules/node-modules-builder.js +28 -16
- package/lib/tools/node-modules/node-modules-dependencies-builder.js +6 -0
- package/lib/yarn-package-manager.js +79 -59
- package/lib/yarn2-package-manager.js +82 -60
- package/node_modules/@npmcli/move-file/LICENSE.md +22 -0
- package/node_modules/@npmcli/move-file/README.md +69 -0
- package/node_modules/@npmcli/move-file/lib/index.js +185 -0
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/LICENSE +21 -0
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/bin/cmd.js +68 -0
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/index.js +31 -0
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/find-made.js +29 -0
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/mkdirp-manual.js +64 -0
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/mkdirp-native.js +39 -0
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/opts-arg.js +23 -0
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/path-arg.js +29 -0
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/lib/use-native.js +10 -0
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/package.json +44 -0
- package/node_modules/@npmcli/move-file/node_modules/mkdirp/readme.markdown +266 -0
- package/node_modules/@npmcli/move-file/package.json +47 -0
- package/node_modules/balanced-match/.github/FUNDING.yml +2 -0
- package/node_modules/balanced-match/LICENSE.md +21 -0
- package/node_modules/balanced-match/README.md +97 -0
- package/node_modules/balanced-match/index.js +62 -0
- package/node_modules/balanced-match/package.json +48 -0
- package/node_modules/concat-map/.travis.yml +4 -0
- package/node_modules/concat-map/LICENSE +18 -0
- package/node_modules/concat-map/README.markdown +62 -0
- package/node_modules/concat-map/example/map.js +6 -0
- package/node_modules/concat-map/index.js +13 -0
- package/node_modules/concat-map/package.json +43 -0
- package/node_modules/concat-map/test/map.js +39 -0
- package/node_modules/fs.realpath/LICENSE +43 -0
- package/node_modules/fs.realpath/README.md +33 -0
- package/node_modules/fs.realpath/index.js +66 -0
- package/node_modules/fs.realpath/old.js +303 -0
- package/node_modules/fs.realpath/package.json +26 -0
- package/node_modules/inflight/LICENSE +15 -0
- package/node_modules/inflight/README.md +37 -0
- package/node_modules/inflight/inflight.js +54 -0
- package/node_modules/inflight/package.json +29 -0
- package/node_modules/inherits/LICENSE +16 -0
- package/node_modules/inherits/README.md +42 -0
- package/node_modules/inherits/inherits.js +9 -0
- package/node_modules/inherits/inherits_browser.js +27 -0
- package/node_modules/inherits/package.json +29 -0
- package/node_modules/once/LICENSE +15 -0
- package/node_modules/once/README.md +79 -0
- package/node_modules/once/once.js +42 -0
- package/node_modules/once/package.json +33 -0
- package/node_modules/path-is-absolute/index.js +20 -0
- package/node_modules/path-is-absolute/license +21 -0
- package/node_modules/path-is-absolute/package.json +43 -0
- package/node_modules/path-is-absolute/readme.md +59 -0
- package/node_modules/rimraf/LICENSE +15 -0
- package/node_modules/rimraf/README.md +101 -0
- package/node_modules/rimraf/bin.js +68 -0
- package/node_modules/rimraf/node_modules/brace-expansion/LICENSE +21 -0
- package/node_modules/rimraf/node_modules/brace-expansion/README.md +129 -0
- package/node_modules/rimraf/node_modules/brace-expansion/index.js +201 -0
- package/node_modules/rimraf/node_modules/brace-expansion/package.json +47 -0
- package/node_modules/rimraf/node_modules/glob/LICENSE +21 -0
- package/node_modules/rimraf/node_modules/glob/README.md +378 -0
- package/node_modules/rimraf/node_modules/glob/common.js +238 -0
- package/node_modules/rimraf/node_modules/glob/glob.js +790 -0
- package/node_modules/rimraf/node_modules/glob/package.json +55 -0
- package/node_modules/rimraf/node_modules/glob/sync.js +486 -0
- package/node_modules/rimraf/node_modules/minimatch/LICENSE +15 -0
- package/node_modules/rimraf/node_modules/minimatch/README.md +230 -0
- package/node_modules/rimraf/node_modules/minimatch/minimatch.js +947 -0
- package/node_modules/rimraf/node_modules/minimatch/package.json +33 -0
- package/node_modules/rimraf/package.json +32 -0
- package/node_modules/rimraf/rimraf.js +360 -0
- package/node_modules/stringify-package/LICENSE +13 -0
- package/node_modules/stringify-package/README.md +55 -0
- package/node_modules/stringify-package/index.js +18 -0
- package/node_modules/stringify-package/package.json +38 -0
- package/node_modules/wrappy/LICENSE +15 -0
- package/node_modules/wrappy/README.md +36 -0
- package/node_modules/wrappy/package.json +29 -0
- package/node_modules/wrappy/wrappy.js +33 -0
- package/package.json +79 -64
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
2
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
12
|
exports.AndroidEmulatorServices = void 0;
|
|
4
13
|
const constants_1 = require("../../constants");
|
|
@@ -18,99 +27,111 @@ class AndroidEmulatorServices {
|
|
|
18
27
|
this.$logger = $logger;
|
|
19
28
|
this.$utils = $utils;
|
|
20
29
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
+
getEmulatorImages() {
|
|
31
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
32
|
+
const adbDevicesOutput = yield this.$adb.getDevicesSafe();
|
|
33
|
+
const avdAvailableEmulatorsOutput = yield this.$androidVirtualDeviceService.getEmulatorImages(adbDevicesOutput);
|
|
34
|
+
const genyAvailableDevicesOutput = yield this.$androidGenymotionService.getEmulatorImages(adbDevicesOutput);
|
|
35
|
+
const devices = _.concat(avdAvailableEmulatorsOutput.devices, genyAvailableDevicesOutput.devices).filter((item) => !!item);
|
|
36
|
+
return {
|
|
37
|
+
devices,
|
|
38
|
+
errors: avdAvailableEmulatorsOutput.errors.concat(genyAvailableDevicesOutput.errors),
|
|
39
|
+
};
|
|
40
|
+
});
|
|
30
41
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
42
|
+
getRunningEmulatorIds() {
|
|
43
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
44
|
+
const adbDevicesOutput = yield this.$adb.getDevicesSafe();
|
|
45
|
+
const avds = yield this.$androidVirtualDeviceService.getRunningEmulatorIds(adbDevicesOutput);
|
|
46
|
+
const genies = yield this.$androidGenymotionService.getRunningEmulatorIds(adbDevicesOutput);
|
|
47
|
+
return avds.concat(genies);
|
|
48
|
+
});
|
|
36
49
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
50
|
+
getRunningEmulatorName(emulatorId) {
|
|
51
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
52
|
+
let result = yield this.$androidVirtualDeviceService.getRunningEmulatorName(emulatorId);
|
|
53
|
+
if (!result) {
|
|
54
|
+
result = yield this.$androidGenymotionService.getRunningEmulatorName(emulatorId);
|
|
55
|
+
}
|
|
56
|
+
return result;
|
|
57
|
+
});
|
|
43
58
|
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
59
|
+
getRunningEmulatorImageIdentifier(emulatorId) {
|
|
60
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
61
|
+
let result = yield this.$androidVirtualDeviceService.getRunningEmulatorImageIdentifier(emulatorId);
|
|
62
|
+
if (!result) {
|
|
63
|
+
result = yield this.$androidGenymotionService.getRunningEmulatorImageIdentifier(emulatorId);
|
|
64
|
+
}
|
|
65
|
+
return result;
|
|
66
|
+
});
|
|
50
67
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
68
|
+
startEmulator(options) {
|
|
69
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
70
|
+
const output = yield this.startEmulatorCore(options);
|
|
71
|
+
let bootToCompleteOutput = null;
|
|
72
|
+
if (output && output.runningEmulator) {
|
|
73
|
+
bootToCompleteOutput = yield this.waitForEmulatorBootToComplete(output.runningEmulator, output.endTimeEpoch, options.timeout);
|
|
74
|
+
}
|
|
75
|
+
return {
|
|
76
|
+
errors: ((output && output.errors) || []).concat((bootToCompleteOutput && bootToCompleteOutput.errors) || []),
|
|
77
|
+
};
|
|
78
|
+
});
|
|
60
79
|
}
|
|
61
80
|
detach(deviceInfo) {
|
|
62
81
|
this.$androidVirtualDeviceService.detach(deviceInfo);
|
|
63
82
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
!
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
runningEmulator: null,
|
|
78
|
-
errors: [
|
|
79
|
-
`No emulator image available for device identifier '${options.emulatorIdOrName || options.imageIdentifier}'.`,
|
|
80
|
-
],
|
|
81
|
-
endTimeEpoch,
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
if (emulator.errorHelp) {
|
|
85
|
-
return {
|
|
86
|
-
runningEmulator: null,
|
|
87
|
-
errors: [emulator.errorHelp],
|
|
88
|
-
endTimeEpoch,
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
this.spawnEmulator(emulator);
|
|
92
|
-
const isInfiniteWait = this.$utils.getMilliSecondsTimeout(timeout) === 0;
|
|
93
|
-
let hasTimeLeft = (0, helpers_1.getCurrentEpochTime)() < endTimeEpoch;
|
|
94
|
-
while (hasTimeLeft || isInfiniteWait) {
|
|
95
|
-
const emulators = (await this.getEmulatorImages()).devices;
|
|
96
|
-
const newEmulator = _.find(emulators, (e) => e.imageIdentifier === emulator.imageIdentifier);
|
|
97
|
-
if (newEmulator && this.$emulatorHelper.isEmulatorRunning(newEmulator)) {
|
|
83
|
+
startEmulatorCore(options) {
|
|
84
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
85
|
+
const timeout = options.timeout || constants_1.AndroidVirtualDevice.TIMEOUT_SECONDS;
|
|
86
|
+
const endTimeEpoch = (0, helpers_1.getCurrentEpochTime)() + this.$utils.getMilliSecondsTimeout(timeout);
|
|
87
|
+
const availableEmulators = (yield this.getEmulatorImages()).devices;
|
|
88
|
+
let emulator = this.$emulatorHelper.getEmulatorByStartEmulatorOptions(options, availableEmulators);
|
|
89
|
+
if (!emulator &&
|
|
90
|
+
!options.emulatorIdOrName &&
|
|
91
|
+
!options.imageIdentifier &&
|
|
92
|
+
!options.emulator) {
|
|
93
|
+
emulator = this.getBestFit(availableEmulators);
|
|
94
|
+
}
|
|
95
|
+
if (!emulator) {
|
|
98
96
|
return {
|
|
99
|
-
runningEmulator:
|
|
100
|
-
errors: [
|
|
97
|
+
runningEmulator: null,
|
|
98
|
+
errors: [
|
|
99
|
+
`No emulator image available for device identifier '${options.emulatorIdOrName || options.imageIdentifier}'.`,
|
|
100
|
+
],
|
|
101
101
|
endTimeEpoch,
|
|
102
102
|
};
|
|
103
103
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
104
|
+
if (emulator.errorHelp) {
|
|
105
|
+
return {
|
|
106
|
+
runningEmulator: null,
|
|
107
|
+
errors: [emulator.errorHelp],
|
|
108
|
+
endTimeEpoch,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
this.spawnEmulator(emulator);
|
|
112
|
+
const isInfiniteWait = this.$utils.getMilliSecondsTimeout(timeout) === 0;
|
|
113
|
+
let hasTimeLeft = (0, helpers_1.getCurrentEpochTime)() < endTimeEpoch;
|
|
114
|
+
while (hasTimeLeft || isInfiniteWait) {
|
|
115
|
+
const emulators = (yield this.getEmulatorImages()).devices;
|
|
116
|
+
const newEmulator = _.find(emulators, (e) => e.imageIdentifier === emulator.imageIdentifier);
|
|
117
|
+
if (newEmulator && this.$emulatorHelper.isEmulatorRunning(newEmulator)) {
|
|
118
|
+
return {
|
|
119
|
+
runningEmulator: newEmulator,
|
|
120
|
+
errors: [],
|
|
121
|
+
endTimeEpoch,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
yield (0, helpers_1.sleep)(10000); // the emulator definitely takes its time to wake up
|
|
125
|
+
hasTimeLeft = (0, helpers_1.getCurrentEpochTime)() < endTimeEpoch;
|
|
126
|
+
}
|
|
127
|
+
if (!hasTimeLeft && !isInfiniteWait) {
|
|
128
|
+
return {
|
|
129
|
+
runningEmulator: null,
|
|
130
|
+
errors: [constants_1.AndroidVirtualDevice.UNABLE_TO_START_EMULATOR_MESSAGE],
|
|
131
|
+
endTimeEpoch,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
});
|
|
114
135
|
}
|
|
115
136
|
spawnEmulator(emulator) {
|
|
116
137
|
let pathToEmulatorExecutable = null;
|
|
@@ -148,33 +169,38 @@ class AndroidEmulatorServices {
|
|
|
148
169
|
const bestVersion = best && best.version && semver.coerce(best.version);
|
|
149
170
|
return bestVersion && semver.gte(bestVersion, minVersion) ? best : null;
|
|
150
171
|
}
|
|
151
|
-
|
|
152
|
-
this
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
172
|
+
waitForEmulatorBootToComplete(emulator, endTimeEpoch, timeout) {
|
|
173
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
174
|
+
this.$logger.info("Waiting for emulator device initialization...", {
|
|
175
|
+
[constants_2.LoggerConfigData.skipNewLine]: true,
|
|
176
|
+
});
|
|
177
|
+
const isInfiniteWait = this.$utils.getMilliSecondsTimeout(timeout || constants_1.AndroidVirtualDevice.TIMEOUT_SECONDS) === 0;
|
|
178
|
+
while ((0, helpers_1.getCurrentEpochTime)() < endTimeEpoch || isInfiniteWait) {
|
|
179
|
+
const isEmulatorBootCompleted = yield this.isEmulatorBootCompleted(emulator.identifier);
|
|
180
|
+
if (isEmulatorBootCompleted) {
|
|
181
|
+
this.$logger.info(os_1.EOL, { [constants_2.LoggerConfigData.skipNewLine]: true });
|
|
182
|
+
return {
|
|
183
|
+
runningEmulator: emulator,
|
|
184
|
+
errors: [],
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
this.$logger.info(".", { [constants_2.LoggerConfigData.skipNewLine]: true });
|
|
188
|
+
yield (0, helpers_1.sleep)(10000);
|
|
164
189
|
}
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
errors: [constants_1.AndroidVirtualDevice.UNABLE_TO_START_EMULATOR_MESSAGE],
|
|
171
|
-
};
|
|
190
|
+
return {
|
|
191
|
+
runningEmulator: null,
|
|
192
|
+
errors: [constants_1.AndroidVirtualDevice.UNABLE_TO_START_EMULATOR_MESSAGE],
|
|
193
|
+
};
|
|
194
|
+
});
|
|
172
195
|
}
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
196
|
+
isEmulatorBootCompleted(emulatorId) {
|
|
197
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
198
|
+
const output = yield this.$adb.getPropertyValue(emulatorId, "dev.bootcomplete");
|
|
199
|
+
const matches = output.match("1");
|
|
200
|
+
return matches && matches.length > 0;
|
|
201
|
+
});
|
|
177
202
|
}
|
|
178
203
|
}
|
|
179
204
|
exports.AndroidEmulatorServices = AndroidEmulatorServices;
|
|
180
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) => {
|
|
@@ -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
|
|
@@ -36,7 +36,11 @@ class AndroidLogFilter {
|
|
|
36
36
|
return consoleLogMessage;
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
|
-
|
|
39
|
+
//sample line is "I/Web Console( 4438): Received Event: deviceready at file:///storage/emulated/0/Icenium/com.telerik.TestApp/js/index.js:48"
|
|
40
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'
|
|
41
43
|
AndroidLogFilter.API_LEVEL_23_LINE_REGEX = /.+?\s+?(?:[A-Z]\s+?)([A-Za-z \.]+?)\s*?\: (.*)/;
|
|
44
|
+
exports.AndroidLogFilter = AndroidLogFilter;
|
|
42
45
|
yok_1.injector.register("androidLogFilter", AndroidLogFilter);
|
|
46
|
+
//# sourceMappingURL=android-log-filter.js.map
|
|
@@ -5,6 +5,15 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
5
5
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
6
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
7
|
};
|
|
8
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
9
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
10
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
11
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
12
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
13
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
14
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
15
|
+
});
|
|
16
|
+
};
|
|
8
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
18
|
exports.AndroidVirtualDeviceService = void 0;
|
|
10
19
|
const net = require("net");
|
|
@@ -30,38 +39,44 @@ class AndroidVirtualDeviceService {
|
|
|
30
39
|
this.mapEmulatorIdToImageIdentifier = {};
|
|
31
40
|
this.androidHome = process.env.ANDROID_HOME;
|
|
32
41
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
42
|
+
getEmulatorImages(adbDevicesOutput) {
|
|
43
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
44
|
+
const availableEmulatorsOutput = yield this.getEmulatorImagesCore();
|
|
45
|
+
const avds = availableEmulatorsOutput.devices;
|
|
46
|
+
const runningEmulatorIds = yield this.getRunningEmulatorIds(adbDevicesOutput);
|
|
47
|
+
const runningEmulators = yield (0, helpers_1.settlePromises)(_.map(runningEmulatorIds, (emulatorId) => this.getRunningEmulatorData(emulatorId, avds)));
|
|
48
|
+
const devices = availableEmulatorsOutput.devices.map((emulator) => this.$emulatorHelper.getEmulatorByImageIdentifier(emulator.imageIdentifier, runningEmulators) || emulator);
|
|
49
|
+
return {
|
|
50
|
+
devices,
|
|
51
|
+
errors: availableEmulatorsOutput.errors,
|
|
52
|
+
};
|
|
53
|
+
});
|
|
43
54
|
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
55
|
+
getRunningEmulatorIds(adbDevicesOutput) {
|
|
56
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
57
|
+
const emulatorIds = _.reduce(adbDevicesOutput, (result, device) => {
|
|
58
|
+
const rx = device.match(constants_1.AndroidVirtualDevice.RUNNING_AVD_EMULATOR_REGEX);
|
|
59
|
+
if (rx && rx[1]) {
|
|
60
|
+
result.push(rx[1]);
|
|
61
|
+
}
|
|
62
|
+
return result;
|
|
63
|
+
}, []);
|
|
64
|
+
return emulatorIds;
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
getRunningEmulatorName(emulatorId) {
|
|
68
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
69
|
+
const imageIdentifier = yield this.getRunningEmulatorImageIdentifier(emulatorId);
|
|
70
|
+
const iniFilePath = path.join(this.pathToAvdHomeDir, `${imageIdentifier}.ini`);
|
|
71
|
+
const iniFileInfo = this.$androidIniFileParser.parseIniFile(iniFilePath);
|
|
72
|
+
let result = imageIdentifier;
|
|
73
|
+
if (iniFileInfo && iniFileInfo.path) {
|
|
74
|
+
const configIniFileInfo = this.$androidIniFileParser.parseIniFile(path.join(iniFileInfo.path, constants_1.AndroidVirtualDevice.CONFIG_INI_FILE_NAME));
|
|
75
|
+
result =
|
|
76
|
+
(configIniFileInfo && configIniFileInfo.displayName) || imageIdentifier;
|
|
49
77
|
}
|
|
50
78
|
return result;
|
|
51
|
-
}
|
|
52
|
-
return emulatorIds;
|
|
53
|
-
}
|
|
54
|
-
async getRunningEmulatorName(emulatorId) {
|
|
55
|
-
const imageIdentifier = await this.getRunningEmulatorImageIdentifier(emulatorId);
|
|
56
|
-
const iniFilePath = path.join(this.pathToAvdHomeDir, `${imageIdentifier}.ini`);
|
|
57
|
-
const iniFileInfo = this.$androidIniFileParser.parseIniFile(iniFilePath);
|
|
58
|
-
let result = imageIdentifier;
|
|
59
|
-
if (iniFileInfo && iniFileInfo.path) {
|
|
60
|
-
const configIniFileInfo = this.$androidIniFileParser.parseIniFile(path.join(iniFileInfo.path, constants_1.AndroidVirtualDevice.CONFIG_INI_FILE_NAME));
|
|
61
|
-
result =
|
|
62
|
-
(configIniFileInfo && configIniFileInfo.displayName) || imageIdentifier;
|
|
63
|
-
}
|
|
64
|
-
return result;
|
|
79
|
+
});
|
|
65
80
|
}
|
|
66
81
|
startEmulatorArgs(imageIdentifier) {
|
|
67
82
|
return ["-avd", imageIdentifier];
|
|
@@ -69,6 +84,9 @@ class AndroidVirtualDeviceService {
|
|
|
69
84
|
get pathToEmulatorExecutable() {
|
|
70
85
|
const emulatorExecutableName = "emulator";
|
|
71
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.
|
|
72
90
|
const pathToEmulatorFromAndroidStudio = path.join(this.androidHome, emulatorExecutableName, emulatorExecutableName);
|
|
73
91
|
const realFilePath = this.$hostInfo.isWindows
|
|
74
92
|
? `${pathToEmulatorFromAndroidStudio}.exe`
|
|
@@ -108,6 +126,17 @@ class AndroidVirtualDeviceService {
|
|
|
108
126
|
client.on("data", (data) => {
|
|
109
127
|
output += data.toString();
|
|
110
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
|
|
111
140
|
if (imageIdentifier && !isResolved) {
|
|
112
141
|
this.mapEmulatorIdToImageIdentifier[emulatorId] = imageIdentifier;
|
|
113
142
|
this.clearNetConnection(client, timer);
|
|
@@ -125,56 +154,64 @@ class AndroidVirtualDeviceService {
|
|
|
125
154
|
delete this.mapEmulatorIdToImageIdentifier[deviceInfo.identifier];
|
|
126
155
|
}
|
|
127
156
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
else {
|
|
153
|
-
devices = this.listAvdsFromDirectory();
|
|
154
|
-
}
|
|
155
|
-
return { devices, errors };
|
|
156
|
-
}
|
|
157
|
-
async canExecuteAvdManagerCommand() {
|
|
158
|
-
let canExecute = false;
|
|
159
|
-
if (this.pathToAvdManagerExecutable &&
|
|
160
|
-
this.$fs.exists(this.pathToAvdManagerExecutable)) {
|
|
161
|
-
if (process.env.JAVA_HOME) {
|
|
162
|
-
canExecute = !!(await this.$sysInfo.getJavaVersionFromJavaHome());
|
|
157
|
+
getEmulatorImagesCore() {
|
|
158
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
159
|
+
let result = null;
|
|
160
|
+
let devices = [];
|
|
161
|
+
let errors = [];
|
|
162
|
+
const canExecuteAvdManagerCommand = yield this.canExecuteAvdManagerCommand();
|
|
163
|
+
if (!canExecuteAvdManagerCommand) {
|
|
164
|
+
errors = [
|
|
165
|
+
"Unable to execute avdmanager, ensure JAVA_HOME is set and points to correct directory",
|
|
166
|
+
];
|
|
167
|
+
}
|
|
168
|
+
if (canExecuteAvdManagerCommand) {
|
|
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 });
|
|
173
|
+
}
|
|
174
|
+
else if (this.pathToAndroidExecutable &&
|
|
175
|
+
this.$fs.exists(this.pathToAndroidExecutable)) {
|
|
176
|
+
result = yield this.$childProcess.trySpawnFromCloseEvent(this.pathToAndroidExecutable, ["list", "avd"]);
|
|
177
|
+
}
|
|
178
|
+
if (result && result.stdout) {
|
|
179
|
+
devices = this.parseListAvdsOutput(result.stdout);
|
|
180
|
+
errors = result && result.stderr ? [result.stderr] : [];
|
|
163
181
|
}
|
|
164
182
|
else {
|
|
165
|
-
|
|
183
|
+
devices = this.listAvdsFromDirectory();
|
|
166
184
|
}
|
|
167
|
-
|
|
168
|
-
|
|
185
|
+
return { devices, errors };
|
|
186
|
+
});
|
|
169
187
|
}
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
188
|
+
canExecuteAvdManagerCommand() {
|
|
189
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
190
|
+
let canExecute = false;
|
|
191
|
+
if (this.pathToAvdManagerExecutable &&
|
|
192
|
+
this.$fs.exists(this.pathToAvdManagerExecutable)) {
|
|
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.
|
|
196
|
+
canExecute = !!(yield this.$sysInfo.getJavaVersionFromJavaHome());
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
canExecute = !!(yield this.$sysInfo.getJavaVersionFromPath());
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return canExecute;
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
getRunningEmulatorData(runningEmulatorId, availableEmulators) {
|
|
206
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
207
|
+
const imageIdentifier = yield this.getRunningEmulatorImageIdentifier(runningEmulatorId);
|
|
208
|
+
const runningEmulator = this.$emulatorHelper.getEmulatorByImageIdentifier(imageIdentifier, availableEmulators);
|
|
209
|
+
if (!runningEmulator) {
|
|
210
|
+
return null;
|
|
211
|
+
}
|
|
212
|
+
this.$emulatorHelper.setRunningAndroidEmulatorProperties(runningEmulatorId, runningEmulator);
|
|
213
|
+
return runningEmulator;
|
|
214
|
+
});
|
|
178
215
|
}
|
|
179
216
|
get pathToAvdManagerExecutable() {
|
|
180
217
|
let avdManagerPath = null;
|
|
@@ -230,6 +267,13 @@ class AndroidVirtualDeviceService {
|
|
|
230
267
|
const avdOutput = output.split(constants_1.AndroidVirtualDevice.AVAILABLE_AVDS_MESSAGE);
|
|
231
268
|
const availableDevices = avdOutput && avdOutput[1] && avdOutput[1].trim();
|
|
232
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.
|
|
233
277
|
const parts = availableDevices.split(/(?:\r?\n){2}/);
|
|
234
278
|
const items = [parts[0], parts[1]].filter((item) => !!item);
|
|
235
279
|
for (const item of items) {
|
|
@@ -246,6 +290,7 @@ class AndroidVirtualDeviceService {
|
|
|
246
290
|
}
|
|
247
291
|
getAvdManagerDeviceInfo(output) {
|
|
248
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
|
|
249
294
|
_.reduce(output.split("\n"), (result, row) => {
|
|
250
295
|
const [key, value] = row.split(": ").map((part) => part.trim());
|
|
251
296
|
switch (key) {
|
|
@@ -292,6 +337,7 @@ class AndroidVirtualDeviceService {
|
|
|
292
337
|
};
|
|
293
338
|
}
|
|
294
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.
|
|
295
341
|
const lines = _.map(output.split(os_1.EOL), (line) => line.trim());
|
|
296
342
|
const firstIndexOfOk = _.indexOf(lines, "OK");
|
|
297
343
|
if (firstIndexOfOk < 0) {
|
|
@@ -320,7 +366,6 @@ class AndroidVirtualDeviceService {
|
|
|
320
366
|
}
|
|
321
367
|
}
|
|
322
368
|
}
|
|
323
|
-
exports.AndroidVirtualDeviceService = AndroidVirtualDeviceService;
|
|
324
369
|
__decorate([
|
|
325
370
|
(0, decorators_1.cache)()
|
|
326
371
|
], AndroidVirtualDeviceService.prototype, "pathToEmulatorExecutable", null);
|
|
@@ -339,4 +384,6 @@ __decorate([
|
|
|
339
384
|
__decorate([
|
|
340
385
|
(0, decorators_1.cache)()
|
|
341
386
|
], AndroidVirtualDeviceService.prototype, "getConfigurationError", null);
|
|
387
|
+
exports.AndroidVirtualDeviceService = AndroidVirtualDeviceService;
|
|
342
388
|
yok_1.injector.register("androidVirtualDeviceService", AndroidVirtualDeviceService);
|
|
389
|
+
//# sourceMappingURL=android-virtual-device-service.js.map
|