appium-android-driver 7.4.0 → 7.5.0

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/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ ## [7.5.0](https://github.com/appium/appium-android-driver/compare/v7.4.1...v7.5.0) (2024-01-05)
2
+
3
+
4
+ ### Features
5
+
6
+ * Add common android doctor checks ([#892](https://github.com/appium/appium-android-driver/issues/892)) ([4d1d648](https://github.com/appium/appium-android-driver/commit/4d1d6480f610bfe7680c325caef36fbd0edc8b20))
7
+
8
+ ## [7.4.1](https://github.com/appium/appium-android-driver/compare/v7.4.0...v7.4.1) (2023-12-18)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * Respect adb remote host setting while collecting CDP info ([#890](https://github.com/appium/appium-android-driver/issues/890)) ([23e76dd](https://github.com/appium/appium-android-driver/commit/23e76ddd63d07bbf8b65c53181c7784140966d82))
14
+
1
15
  ## [7.4.0](https://github.com/appium/appium-android-driver/compare/v7.3.1...v7.4.0) (2023-12-17)
2
16
 
3
17
 
@@ -0,0 +1,81 @@
1
+ export const androidHomeCheck: EnvVarAndPathCheck;
2
+ export const javaHomeCheck: EnvVarAndPathCheck;
3
+ /** @satisfies {import('@appium/types').IDoctorCheck} */
4
+ export class JavaHomeValueCheck {
5
+ diagnose(): Promise<import("@appium/types").DoctorCheckResult>;
6
+ fix(): Promise<string>;
7
+ hasAutofix(): boolean;
8
+ isOptional(): boolean;
9
+ }
10
+ export const javaHomeValueCheck: JavaHomeValueCheck;
11
+ /** @satisfies {import('@appium/types').IDoctorCheck} */
12
+ export class AndroidSdkCheck {
13
+ TOOL_NAMES: string[];
14
+ diagnose(): Promise<import("@appium/types").DoctorCheckResult>;
15
+ fix(): Promise<string>;
16
+ hasAutofix(): boolean;
17
+ isOptional(): boolean;
18
+ }
19
+ export const androidSdkCheck: AndroidSdkCheck;
20
+ /** @satisfies {import('@appium/types').IDoctorCheck} */
21
+ export class OptionalBundletoolCheck {
22
+ diagnose(): Promise<import("@appium/types").DoctorCheckResult>;
23
+ fix(): Promise<string>;
24
+ hasAutofix(): boolean;
25
+ isOptional(): boolean;
26
+ }
27
+ export const optionalBundletoolCheck: OptionalBundletoolCheck;
28
+ /** @satisfies {import('@appium/types').IDoctorCheck} */
29
+ export class OptionalGstreamerCheck {
30
+ GSTREAMER_BINARY: string;
31
+ GST_INSPECT_BINARY: string;
32
+ diagnose(): Promise<import("@appium/types").DoctorCheckResult>;
33
+ fix(): Promise<string>;
34
+ hasAutofix(): boolean;
35
+ isOptional(): boolean;
36
+ }
37
+ export const optionalGstreamerCheck: OptionalGstreamerCheck;
38
+ /** @satisfies {import('@appium/types').IDoctorCheck} */
39
+ export class OptionalFfmpegCheck {
40
+ FFMPEG_BINARY: string;
41
+ diagnose(): Promise<import("@appium/types").DoctorCheckResult>;
42
+ fix(): Promise<string>;
43
+ hasAutofix(): boolean;
44
+ isOptional(): boolean;
45
+ }
46
+ export const optionalFfmpegCheck: OptionalFfmpegCheck;
47
+ export type EnvVarCheckOptions = {
48
+ /**
49
+ * If set to true then
50
+ * the path is expected to be a valid folder
51
+ */
52
+ expectDir?: boolean | undefined;
53
+ /**
54
+ * If set to true then
55
+ * the path is expected to be a valid file
56
+ */
57
+ expectFile?: boolean | undefined;
58
+ };
59
+ /**
60
+ * @typedef EnvVarCheckOptions
61
+ * @property {boolean} [expectDir] If set to true then
62
+ * the path is expected to be a valid folder
63
+ * @property {boolean} [expectFile] If set to true then
64
+ * the path is expected to be a valid file
65
+ */
66
+ /** @satisfies {import('@appium/types').IDoctorCheck} */
67
+ declare class EnvVarAndPathCheck {
68
+ /**
69
+ * @param {string} varName
70
+ * @param {EnvVarCheckOptions} [opts={}]
71
+ */
72
+ constructor(varName: string, opts?: EnvVarCheckOptions | undefined);
73
+ varName: string;
74
+ opts: EnvVarCheckOptions;
75
+ diagnose(): Promise<import("@appium/types").DoctorCheckResult>;
76
+ fix(): Promise<string>;
77
+ hasAutofix(): boolean;
78
+ isOptional(): boolean;
79
+ }
80
+ export {};
81
+ //# sourceMappingURL=checks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checks.d.ts","sourceRoot":"","sources":["../../../lib/doctor/checks.js"],"names":[],"mappings":"AA4EA,kDAA0F;AAC1F,+CAAoF;AAEpF,wDAAwD;AACxD;IACE,+DAeC;IAED,uBAGC;IAED,sBAEC;IAED,sBAEC;CACF;AACD,oDAA2D;AAE3D,wDAAwD;AACxD;IACE,qBAAmF;IAEnF,+DAwBC;IAED,uBAKC;IAED,sBAEC;IAED,sBAEC;CACF;AACD,8CAAqD;AAErD,wDAAwD;AACxD;IACE,+DAKC;IAED,uBAOC;IAED,sBAEC;IAED,sBAEC;CACF;AACD,8DAAqE;AAErE,wDAAwD;AACxD;IACE,yBAAuE;IACvE,2BAA0E;IAE1E,+DASC;IAED,uBAOC;IAED,sBAEC;IAED,sBAEC;CACF;AACD,4DAAmE;AAEnE,wDAAwD;AACxD;IACE,sBAA4D;IAE5D,+DAMC;IAED,uBAKC;IAED,sBAEC;IAED,sBAEC;CACF;AACD,sDAA6D;;;;;;;;;;;;;AAzO7D;;;;;;GAMG;AAEH,wDAAwD;AACxD;IACE;;;OAGG;IACH,qBAHW,MAAM,yCAMhB;IAFC,gBAAsB;IACtB,yBAAgB;IAGlB,+DAuBC;IAED,uBAKC;IAED,sBAEC;IAED,sBAEC;CACF"}
@@ -0,0 +1,212 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.optionalFfmpegCheck = exports.OptionalFfmpegCheck = exports.optionalGstreamerCheck = exports.OptionalGstreamerCheck = exports.optionalBundletoolCheck = exports.OptionalBundletoolCheck = exports.androidSdkCheck = exports.AndroidSdkCheck = exports.javaHomeValueCheck = exports.JavaHomeValueCheck = exports.javaHomeCheck = exports.androidHomeCheck = void 0;
7
+ const utils_1 = require("./utils");
8
+ const support_1 = require("@appium/support");
9
+ const path_1 = __importDefault(require("path"));
10
+ require("@colors/colors");
11
+ const appium_adb_1 = require("appium-adb");
12
+ const log = support_1.logger.getLogger('AndroidDoctor');
13
+ const JAVA_HOME_VAR_NAME = support_1.system.isWindows() ? '%JAVA_HOME%' : '$JAVA_HOME';
14
+ const ENVIRONMENT_VARS_TUTORIAL_URL = 'https://github.com/appium/java-client/blob/master/docs/environment.md';
15
+ const JAVA_HOME_TUTORIAL = 'https://docs.oracle.com/cd/E21454_01/html/821-2531/inst_jdk_javahome_t.html';
16
+ const ANDROID_SDK_LINK1 = 'https://developer.android.com/studio#cmdline-tools';
17
+ const ANDROID_SDK_LINK2 = 'https://developer.android.com/studio/intro/update#sdk-manager';
18
+ const BUNDLETOOL_RELEASES_LINK = 'https://github.com/google/bundletool/releases/';
19
+ const GSTREAMER_INSTALL_LINK = 'https://gstreamer.freedesktop.org/documentation/installing/index.html?gi-language=c';
20
+ const FFMPEG_INSTALL_LINK = 'https://www.ffmpeg.org/download.html';
21
+ /**
22
+ * @typedef EnvVarCheckOptions
23
+ * @property {boolean} [expectDir] If set to true then
24
+ * the path is expected to be a valid folder
25
+ * @property {boolean} [expectFile] If set to true then
26
+ * the path is expected to be a valid file
27
+ */
28
+ /** @satisfies {import('@appium/types').IDoctorCheck} */
29
+ class EnvVarAndPathCheck {
30
+ /**
31
+ * @param {string} varName
32
+ * @param {EnvVarCheckOptions} [opts={}]
33
+ */
34
+ constructor(varName, opts = {}) {
35
+ this.varName = varName;
36
+ this.opts = opts;
37
+ }
38
+ async diagnose() {
39
+ const varValue = process.env[this.varName];
40
+ if (!varValue) {
41
+ return support_1.doctor.nok(`${this.varName} environment variable is NOT set!`);
42
+ }
43
+ if (!await support_1.fs.exists(varValue)) {
44
+ let errMsg = `${this.varName} is set to '${varValue}' but this path does not exist!`;
45
+ if (support_1.system.isWindows() && varValue.includes('%')) {
46
+ errMsg += ` Consider replacing all references to other environment variables with absolute paths.`;
47
+ }
48
+ return support_1.doctor.nok(errMsg);
49
+ }
50
+ const stat = await support_1.fs.stat(varValue);
51
+ if (this.opts.expectDir && !stat.isDirectory()) {
52
+ return support_1.doctor.nok(`${this.varName} is expected to be a valid folder, got a file path instead`);
53
+ }
54
+ if (this.opts.expectFile && stat.isDirectory()) {
55
+ return support_1.doctor.nok(`${this.varName} is expected to be a valid file, got a folder path instead`);
56
+ }
57
+ return support_1.doctor.ok(`${this.varName} is set to: ${varValue}`);
58
+ }
59
+ async fix() {
60
+ return (`Make sure the environment variable ${this.varName.bold} is properly configured for the Appium process. ` +
61
+ `Refer ${ENVIRONMENT_VARS_TUTORIAL_URL} for more details.`);
62
+ }
63
+ hasAutofix() {
64
+ return false;
65
+ }
66
+ isOptional() {
67
+ return false;
68
+ }
69
+ }
70
+ exports.androidHomeCheck = new EnvVarAndPathCheck('ANDROID_HOME', { expectDir: true });
71
+ exports.javaHomeCheck = new EnvVarAndPathCheck('JAVA_HOME', { expectDir: true });
72
+ /** @satisfies {import('@appium/types').IDoctorCheck} */
73
+ class JavaHomeValueCheck {
74
+ async diagnose() {
75
+ const envVar = process.env.JAVA_HOME;
76
+ if (!envVar) {
77
+ return support_1.doctor.nok(`${JAVA_HOME_VAR_NAME} environment variable must be set`);
78
+ }
79
+ const javaBinaryRelativePath = path_1.default.join('bin', `java${support_1.system.isWindows() ? '.exe' : ''}`);
80
+ const javaBinary = path_1.default.join(envVar, javaBinaryRelativePath);
81
+ if (!await support_1.fs.exists(javaBinary)) {
82
+ return support_1.doctor.nok(`${JAVA_HOME_VAR_NAME} is set to an invalid value. ` +
83
+ `It must be pointing to a folder containing ${javaBinaryRelativePath}`);
84
+ }
85
+ return support_1.doctor.ok(`'${javaBinaryRelativePath}' exists under '${envVar}'`);
86
+ }
87
+ async fix() {
88
+ return `Set ${JAVA_HOME_VAR_NAME} environment variable to the root folder path of your local JDK installation. ` +
89
+ `Read ${JAVA_HOME_TUTORIAL}`;
90
+ }
91
+ hasAutofix() {
92
+ return false;
93
+ }
94
+ isOptional() {
95
+ return false;
96
+ }
97
+ }
98
+ exports.JavaHomeValueCheck = JavaHomeValueCheck;
99
+ exports.javaHomeValueCheck = new JavaHomeValueCheck();
100
+ /** @satisfies {import('@appium/types').IDoctorCheck} */
101
+ class AndroidSdkCheck {
102
+ constructor() {
103
+ this.TOOL_NAMES = ['adb', 'emulator', `apkanalyzer${support_1.system.isWindows() ? '.bat' : ''}`];
104
+ }
105
+ async diagnose() {
106
+ const listOfTools = this.TOOL_NAMES.join(', ');
107
+ const sdkRoot = (0, appium_adb_1.getSdkRootFromEnv)();
108
+ if (!sdkRoot) {
109
+ return support_1.doctor.nok(`${listOfTools} could not be found because ANDROID_HOME is NOT set!`);
110
+ }
111
+ log.info(` Checking ${listOfTools}`);
112
+ const missingBinaries = [];
113
+ for (const binary of this.TOOL_NAMES) {
114
+ try {
115
+ log.info(` '${binary}' exists in ${await (0, appium_adb_1.getAndroidBinaryPath)(binary)}`);
116
+ }
117
+ catch (e) {
118
+ missingBinaries.push(binary);
119
+ }
120
+ }
121
+ if (missingBinaries.length > 0) {
122
+ return support_1.doctor.nok(`${missingBinaries.join(', ')} could NOT be found in '${sdkRoot}'!`);
123
+ }
124
+ return support_1.doctor.ok(`${listOfTools} exist in '${sdkRoot}'`);
125
+ }
126
+ async fix() {
127
+ return (`Manually install ${'Android SDK'.bold} and set ${'ANDROID_HOME'.bold}. ` +
128
+ `Read ${[ANDROID_SDK_LINK1, ANDROID_SDK_LINK2].join(' and ')}.`);
129
+ }
130
+ hasAutofix() {
131
+ return false;
132
+ }
133
+ isOptional() {
134
+ return false;
135
+ }
136
+ }
137
+ exports.AndroidSdkCheck = AndroidSdkCheck;
138
+ exports.androidSdkCheck = new AndroidSdkCheck();
139
+ /** @satisfies {import('@appium/types').IDoctorCheck} */
140
+ class OptionalBundletoolCheck {
141
+ async diagnose() {
142
+ const bundletoolPath = await (0, utils_1.resolveExecutablePath)('bundletool.jar');
143
+ return bundletoolPath
144
+ ? support_1.doctor.okOptional(`bundletool.jar is installed at: ${bundletoolPath}`)
145
+ : support_1.doctor.nokOptional('bundletool.jar cannot be found');
146
+ }
147
+ async fix() {
148
+ return (`${'bundletool.jar'.bold} is used to handle Android App bundles. ` +
149
+ `Please download the binary from ${BUNDLETOOL_RELEASES_LINK} and store it ` +
150
+ `to any folder listed in the PATH environment variable. Folders that ` +
151
+ `are currently present in PATH: ${process.env.PATH}`);
152
+ }
153
+ hasAutofix() {
154
+ return false;
155
+ }
156
+ isOptional() {
157
+ return true;
158
+ }
159
+ }
160
+ exports.OptionalBundletoolCheck = OptionalBundletoolCheck;
161
+ exports.optionalBundletoolCheck = new OptionalBundletoolCheck();
162
+ /** @satisfies {import('@appium/types').IDoctorCheck} */
163
+ class OptionalGstreamerCheck {
164
+ constructor() {
165
+ this.GSTREAMER_BINARY = `gst-launch-1.0${support_1.system.isWindows() ? '.exe' : ''}`;
166
+ this.GST_INSPECT_BINARY = `gst-inspect-1.0${support_1.system.isWindows() ? '.exe' : ''}`;
167
+ }
168
+ async diagnose() {
169
+ const gstreamerPath = await (0, utils_1.resolveExecutablePath)(this.GSTREAMER_BINARY);
170
+ const gstInspectPath = await (0, utils_1.resolveExecutablePath)(this.GST_INSPECT_BINARY);
171
+ return gstreamerPath && gstInspectPath
172
+ ? support_1.doctor.okOptional(`${this.GSTREAMER_BINARY} and ${this.GST_INSPECT_BINARY} are installed at: ${gstreamerPath} and ${gstInspectPath}`)
173
+ : support_1.doctor.nokOptional(`${this.GSTREAMER_BINARY} and/or ${this.GST_INSPECT_BINARY} cannot be found`);
174
+ }
175
+ async fix() {
176
+ return (`${`${this.GSTREAMER_BINARY} and ${this.GST_INSPECT_BINARY}`.bold} are used to stream the screen of the device under test. ` +
177
+ `Please read ${GSTREAMER_INSTALL_LINK}.`);
178
+ }
179
+ hasAutofix() {
180
+ return false;
181
+ }
182
+ isOptional() {
183
+ return true;
184
+ }
185
+ }
186
+ exports.OptionalGstreamerCheck = OptionalGstreamerCheck;
187
+ exports.optionalGstreamerCheck = new OptionalGstreamerCheck();
188
+ /** @satisfies {import('@appium/types').IDoctorCheck} */
189
+ class OptionalFfmpegCheck {
190
+ constructor() {
191
+ this.FFMPEG_BINARY = `ffmpeg${support_1.system.isWindows() ? '.exe' : ''}`;
192
+ }
193
+ async diagnose() {
194
+ const ffmpegPath = await (0, utils_1.resolveExecutablePath)(this.FFMPEG_BINARY);
195
+ return ffmpegPath
196
+ ? support_1.doctor.okOptional(`${this.FFMPEG_BINARY} exists at '${ffmpegPath}'`)
197
+ : support_1.doctor.nokOptional(`${this.FFMPEG_BINARY} cannot be found`);
198
+ }
199
+ async fix() {
200
+ return (`${`${this.FFMPEG_BINARY}`.bold} is used to capture screen recordings from the device under test. ` +
201
+ `Please read ${FFMPEG_INSTALL_LINK}.`);
202
+ }
203
+ hasAutofix() {
204
+ return false;
205
+ }
206
+ isOptional() {
207
+ return true;
208
+ }
209
+ }
210
+ exports.OptionalFfmpegCheck = OptionalFfmpegCheck;
211
+ exports.optionalFfmpegCheck = new OptionalFfmpegCheck();
212
+ //# sourceMappingURL=checks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checks.js","sourceRoot":"","sources":["../../../lib/doctor/checks.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Return an executable path of cmd
3
+ *
4
+ * @param {string} cmd Standard output by command
5
+ * @return {Promise<string?>} The full path of cmd. `null` if the cmd is not found.
6
+ */
7
+ export function resolveExecutablePath(cmd: string): Promise<string | null>;
8
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../lib/doctor/utils.js"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,2CAHW,MAAM,GACL,QAAQ,MAAM,QAAE,CAU3B"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveExecutablePath = void 0;
4
+ const support_1 = require("@appium/support");
5
+ /**
6
+ * Return an executable path of cmd
7
+ *
8
+ * @param {string} cmd Standard output by command
9
+ * @return {Promise<string?>} The full path of cmd. `null` if the cmd is not found.
10
+ */
11
+ async function resolveExecutablePath(cmd) {
12
+ try {
13
+ const executablePath = await support_1.fs.which(cmd);
14
+ if (executablePath && (await support_1.fs.exists(executablePath))) {
15
+ return executablePath;
16
+ }
17
+ }
18
+ catch (err) { }
19
+ return null;
20
+ }
21
+ exports.resolveExecutablePath = resolveExecutablePath;
22
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../lib/doctor/utils.js"],"names":[],"mappings":";;;AAAA,6CAAmC;AAEnC;;;;;GAKG;AACI,KAAK,UAAU,qBAAqB,CAAC,GAAG;IAC7C,IAAI;QACF,MAAM,cAAc,GAAG,MAAM,YAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,cAAc,IAAI,CAAC,MAAM,YAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE;YACvD,OAAO,cAAc,CAAC;SACvB;KACF;IAAC,OAAO,GAAG,EAAE,GAAE;IAChB,OAAO,IAAI,CAAC;AACd,CAAC;AARD,sDAQC"}
@@ -1 +1 @@
1
- {"version":3,"file":"webview.d.ts","sourceRoot":"","sources":["../../../lib/helpers/webview.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAGvD,OAAO,KAAK,EAEV,eAAe,EACf,cAAc,EAGf,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAC,GAAG,EAAC,MAAM,YAAY,CAAC;AAGpC,QAAA,MAAM,UAAU,eAAe,CAAC;AAChC,QAAA,MAAM,WAAW,YAAY,CAAC;AAC9B,QAAA,MAAM,YAAY,aAAa,CAAC;AAChC,QAAA,MAAM,YAAY,aAAoB,CAAC;AAGvC,eAAO,MAAM,uBAAuB,QAAgD,CAAC;AAIrF,QAAA,MAAM,0BAA0B,UAK/B,CAAC;AAaF,UAAU,cAAc;IACtB;;;;;;;;;;;OAWG;IACH,eAAe,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAEhE;;;;;;OAMG;IACH,iBAAiB,EAAE,CAAC,eAAe,EAAE,eAAe,EAAE,EAAE,IAAI,CAAC,EAAE,eAAe,KAAK,MAAM,EAAE,CAAC;IAE5F;;;;;;;;;;;;;;OAcG;IACH,kBAAkB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,eAAe,KAAK,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IAErF;;;;;;OAMG;IACH,iBAAiB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,KAAK,cAAc,GAAG,SAAS,CAAC;IAE7E;;;;;;;;OAQG;IAEH,sBAAsB,EAAE,CACtB,IAAI,EAAE,GAAG,EACT,QAAQ,EAAE,MAAM,EAChB,cAAc,CAAC,EAAE,cAAc,GAAG,IAAI,KACnC,MAAM,CAAC;CACb;AA2PD,QAAA,MAAM,cAAc,EAAE,cA+NrB,CAAC;AAEF,OAAO,EAAC,YAAY,EAAE,0BAA0B,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAC,CAAC;AACzF,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"webview.d.ts","sourceRoot":"","sources":["../../../lib/helpers/webview.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAGvD,OAAO,KAAK,EAEV,eAAe,EACf,cAAc,EAGf,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAC,GAAG,EAAC,MAAM,YAAY,CAAC;AAGpC,QAAA,MAAM,UAAU,eAAe,CAAC;AAChC,QAAA,MAAM,WAAW,YAAY,CAAC;AAC9B,QAAA,MAAM,YAAY,aAAa,CAAC;AAChC,QAAA,MAAM,YAAY,aAAoB,CAAC;AAGvC,eAAO,MAAM,uBAAuB,QAAgD,CAAC;AAIrF,QAAA,MAAM,0BAA0B,UAK/B,CAAC;AAaF,UAAU,cAAc;IACtB;;;;;;;;;;;OAWG;IACH,eAAe,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAEhE;;;;;;OAMG;IACH,iBAAiB,EAAE,CAAC,eAAe,EAAE,eAAe,EAAE,EAAE,IAAI,CAAC,EAAE,eAAe,KAAK,MAAM,EAAE,CAAC;IAE5F;;;;;;;;;;;;;;OAcG;IACH,kBAAkB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,eAAe,KAAK,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IAErF;;;;;;OAMG;IACH,iBAAiB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,KAAK,cAAc,GAAG,SAAS,CAAC;IAE7E;;;;;;;;OAQG;IAEH,sBAAsB,EAAE,CACtB,IAAI,EAAE,GAAG,EACT,QAAQ,EAAE,MAAM,EAChB,cAAc,CAAC,EAAE,cAAc,GAAG,IAAI,KACnC,MAAM,CAAC;CACb;AA6PD,QAAA,MAAM,cAAc,EAAE,cA+NrB,CAAC;AAEF,OAAO,EAAC,YAAY,EAAE,0BAA0B,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAC,CAAC;AACzF,eAAe,cAAc,CAAC"}
@@ -143,11 +143,11 @@ async function webviewsFromProcs(adb, deviceSocket = null) {
143
143
  * @param socketName - The remote Unix socket name
144
144
  * @param webviewDevtoolsPort - The local port number or null to apply
145
145
  * autodetection
146
- * @returns The local port number if the remote socket has been forwarded
147
- * successfully or `null` otherwise
146
+ * @returns The host name and the port number to connect to if the
147
+ * remote socket has been forwarded successfully
148
148
  * @throws {Error} If there was an error while allocating the local port
149
149
  */
150
- async function allocateDevtoolsPort(adb, socketName, webviewDevtoolsPort = null) {
150
+ async function allocateDevtoolsChannel(adb, socketName, webviewDevtoolsPort = null) {
151
151
  // socket names come with '@', but this should not be a part of the abstract
152
152
  // remote port, so remove it
153
153
  const remotePort = socketName.replace(/^@/, '');
@@ -161,7 +161,7 @@ async function allocateDevtoolsPort(adb, socketName, webviewDevtoolsPort = null)
161
161
  logger_1.default.debug(`You could use the 'webviewDevtoolsPort' capability to customize ` +
162
162
  `the starting port number`);
163
163
  }
164
- return (await DEVTOOLS_PORT_ALLOCATION_GUARD(async () => {
164
+ const port = (await DEVTOOLS_PORT_ALLOCATION_GUARD(async () => {
165
165
  let localPort;
166
166
  try {
167
167
  localPort = await (0, portscanner_1.findAPortNotInUse)(startPort, endPort);
@@ -174,6 +174,7 @@ async function allocateDevtoolsPort(adb, socketName, webviewDevtoolsPort = null)
174
174
  await adb.adbExec(['forward', `tcp:${localPort}`, `localabstract:${remotePort}`]);
175
175
  return localPort;
176
176
  }));
177
+ return [adb.adbHost ?? '127.0.0.1', port];
177
178
  }
178
179
  /**
179
180
  * This is a wrapper for Chrome Debugger Protocol data collection.
@@ -211,23 +212,24 @@ async function collectWebviewsDetails(adb, webviewsMapping, opts = {}) {
211
212
  const detailCollectors = [];
212
213
  for (const item of webviewsMapping) {
213
214
  detailCollectors.push((async () => {
214
- let localPort;
215
+ let port;
216
+ let host;
215
217
  try {
216
- localPort = await allocateDevtoolsPort(adb, item.proc, webviewDevtoolsPort);
218
+ [host, port] = await allocateDevtoolsChannel(adb, item.proc, webviewDevtoolsPort);
217
219
  if (enableWebviewDetailsCollection) {
218
- item.info = await cdpInfo(localPort);
220
+ item.info = await cdpInfo(host, port);
219
221
  }
220
222
  if (ensureWebviewsHavePages) {
221
- item.pages = await cdpList(localPort);
223
+ item.pages = await cdpList(host, port);
222
224
  }
223
225
  }
224
226
  catch (e) {
225
227
  logger_1.default.debug(e);
226
228
  }
227
229
  finally {
228
- if (localPort) {
230
+ if (port) {
229
231
  try {
230
- await adb.removePortForward(localPort);
232
+ await adb.removePortForward(port);
231
233
  }
232
234
  catch (e) {
233
235
  logger_1.default.debug(e);
@@ -240,16 +242,16 @@ async function collectWebviewsDetails(adb, webviewsMapping, opts = {}) {
240
242
  logger_1.default.debug(`CDP data collection completed`);
241
243
  }
242
244
  // https://chromedevtools.github.io/devtools-protocol/
243
- async function cdpList(localPort) {
245
+ async function cdpList(host, port) {
244
246
  return (await (0, axios_1.default)({
245
- url: `http://127.0.0.1:${localPort}/json/list`,
247
+ url: `http://${host}:${port}/json/list`,
246
248
  timeout: CDP_REQ_TIMEOUT,
247
249
  })).data;
248
250
  }
249
251
  // https://chromedevtools.github.io/devtools-protocol/
250
- async function cdpInfo(localPort) {
252
+ async function cdpInfo(host, port) {
251
253
  return (await (0, axios_1.default)({
252
- url: `http://127.0.0.1:${localPort}/json/version`,
254
+ url: `http://${host}:${port}/json/version`,
253
255
  timeout: CDP_REQ_TIMEOUT,
254
256
  })).data;
255
257
  }
@@ -1 +1 @@
1
- {"version":3,"file":"webview.js","sourceRoot":"","sources":["../../../lib/helpers/webview.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"webview.js","sourceRoot":"","sources":["../../../lib/helpers/webview.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import { AndroidDriver } from './driver';
2
2
  export type * from './commands';
3
3
  export { ANDROID_DRIVER_CONSTRAINTS as commonCapConstraints } from './constraints';
4
4
  export * from './driver';
5
+ export * as doctor from './doctor/checks';
5
6
  export { SETTINGS_HELPER_PKG_ID, default as androidHelpers } from './helpers/android';
6
7
  export type * from './helpers/types';
7
8
  export { CHROMIUM_WIN, NATIVE_WIN, WEBVIEW_BASE, WEBVIEW_WIN, default as webviewHelpers, } from './helpers/webview';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,aAAa,EAAC,MAAM,UAAU,CAAC;AACvC,mBAAmB,YAAY,CAAC;AAChC,OAAO,EAAC,0BAA0B,IAAI,oBAAoB,EAAC,MAAM,eAAe,CAAC;AACjF,cAAc,UAAU,CAAC;AACzB,OAAO,EAAC,sBAAsB,EAAE,OAAO,IAAI,cAAc,EAAC,MAAM,mBAAmB,CAAC;AACpF,mBAAmB,iBAAiB,CAAC;AACrC,OAAO,EACL,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,EACX,OAAO,IAAI,cAAc,GAC1B,MAAM,mBAAmB,CAAC;AAE3B,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,aAAa,EAAC,MAAM,UAAU,CAAC;AACvC,mBAAmB,YAAY,CAAC;AAChC,OAAO,EAAC,0BAA0B,IAAI,oBAAoB,EAAC,MAAM,eAAe,CAAC;AACjF,cAAc,UAAU,CAAC;AACzB,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAC,sBAAsB,EAAE,OAAO,IAAI,cAAc,EAAC,MAAM,mBAAmB,CAAC;AACpF,mBAAmB,iBAAiB,CAAC;AACrC,OAAO,EACL,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,EACX,OAAO,IAAI,cAAc,GAC1B,MAAM,mBAAmB,CAAC;AAE3B,eAAe,aAAa,CAAC"}
@@ -10,20 +10,33 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
10
10
  if (k2 === undefined) k2 = k;
11
11
  o[k2] = m[k];
12
12
  }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
13
18
  var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
19
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
20
  };
21
+ var __importStar = (this && this.__importStar) || function (mod) {
22
+ if (mod && mod.__esModule) return mod;
23
+ var result = {};
24
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
25
+ __setModuleDefault(result, mod);
26
+ return result;
27
+ };
16
28
  var __importDefault = (this && this.__importDefault) || function (mod) {
17
29
  return (mod && mod.__esModule) ? mod : { "default": mod };
18
30
  };
19
31
  Object.defineProperty(exports, "__esModule", { value: true });
20
- exports.webviewHelpers = exports.WEBVIEW_WIN = exports.WEBVIEW_BASE = exports.NATIVE_WIN = exports.CHROMIUM_WIN = exports.androidHelpers = exports.SETTINGS_HELPER_PKG_ID = exports.commonCapConstraints = void 0;
32
+ exports.webviewHelpers = exports.WEBVIEW_WIN = exports.WEBVIEW_BASE = exports.NATIVE_WIN = exports.CHROMIUM_WIN = exports.androidHelpers = exports.SETTINGS_HELPER_PKG_ID = exports.doctor = exports.commonCapConstraints = void 0;
21
33
  const source_map_support_1 = require("source-map-support");
22
34
  (0, source_map_support_1.install)();
23
35
  const driver_1 = require("./driver");
24
36
  var constraints_1 = require("./constraints");
25
37
  Object.defineProperty(exports, "commonCapConstraints", { enumerable: true, get: function () { return constraints_1.ANDROID_DRIVER_CONSTRAINTS; } });
26
38
  __exportStar(require("./driver"), exports);
39
+ exports.doctor = __importStar(require("./doctor/checks"));
27
40
  var android_1 = require("./helpers/android");
28
41
  Object.defineProperty(exports, "SETTINGS_HELPER_PKG_ID", { enumerable: true, get: function () { return android_1.SETTINGS_HELPER_PKG_ID; } });
29
42
  Object.defineProperty(exports, "androidHelpers", { enumerable: true, get: function () { return __importDefault(android_1).default; } });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../lib/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,2DAA2C;AAC3C,IAAA,4BAAO,GAAE,CAAC;AAEV,qCAAuC;AAEvC,6CAAiF;AAAzE,mHAAA,0BAA0B,OAAwB;AAC1D,2CAAyB;AACzB,6CAAoF;AAA5E,iHAAA,sBAAsB,OAAA;AAAE,0HAAA,OAAO,OAAkB;AAEzD,6CAM2B;AALzB,uGAAA,YAAY,OAAA;AACZ,qGAAA,UAAU,OAAA;AACV,uGAAA,YAAY,OAAA;AACZ,sGAAA,WAAW,OAAA;AACX,0HAAA,OAAO,OAAkB;AAG3B,kBAAe,sBAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../lib/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2DAA2C;AAC3C,IAAA,4BAAO,GAAE,CAAC;AAEV,qCAAuC;AAEvC,6CAAiF;AAAzE,mHAAA,0BAA0B,OAAwB;AAC1D,2CAAyB;AACzB,0DAA0C;AAC1C,6CAAoF;AAA5E,iHAAA,sBAAsB,OAAA;AAAE,0HAAA,OAAO,OAAkB;AAEzD,6CAM2B;AALzB,uGAAA,YAAY,OAAA;AACZ,qGAAA,UAAU,OAAA;AACV,uGAAA,YAAY,OAAA;AACZ,sGAAA,WAAW,OAAA;AACX,0HAAA,OAAO,OAAkB;AAG3B,kBAAe,sBAAa,CAAC"}
@@ -0,0 +1,251 @@
1
+ import {resolveExecutablePath} from './utils';
2
+ import {system, fs, logger, doctor} from '@appium/support';
3
+ import path from 'path';
4
+ import '@colors/colors';
5
+ import {getAndroidBinaryPath, getSdkRootFromEnv} from 'appium-adb';
6
+
7
+ const log = logger.getLogger('AndroidDoctor');
8
+
9
+ const JAVA_HOME_VAR_NAME = system.isWindows() ? '%JAVA_HOME%' : '$JAVA_HOME';
10
+ const ENVIRONMENT_VARS_TUTORIAL_URL = 'https://github.com/appium/java-client/blob/master/docs/environment.md';
11
+ const JAVA_HOME_TUTORIAL = 'https://docs.oracle.com/cd/E21454_01/html/821-2531/inst_jdk_javahome_t.html';
12
+ const ANDROID_SDK_LINK1 = 'https://developer.android.com/studio#cmdline-tools';
13
+ const ANDROID_SDK_LINK2 = 'https://developer.android.com/studio/intro/update#sdk-manager';
14
+ const BUNDLETOOL_RELEASES_LINK = 'https://github.com/google/bundletool/releases/';
15
+ const GSTREAMER_INSTALL_LINK = 'https://gstreamer.freedesktop.org/documentation/installing/index.html?gi-language=c';
16
+ const FFMPEG_INSTALL_LINK = 'https://www.ffmpeg.org/download.html';
17
+
18
+ /**
19
+ * @typedef EnvVarCheckOptions
20
+ * @property {boolean} [expectDir] If set to true then
21
+ * the path is expected to be a valid folder
22
+ * @property {boolean} [expectFile] If set to true then
23
+ * the path is expected to be a valid file
24
+ */
25
+
26
+ /** @satisfies {import('@appium/types').IDoctorCheck} */
27
+ class EnvVarAndPathCheck {
28
+ /**
29
+ * @param {string} varName
30
+ * @param {EnvVarCheckOptions} [opts={}]
31
+ */
32
+ constructor(varName, opts = {}) {
33
+ this.varName = varName;
34
+ this.opts = opts;
35
+ }
36
+
37
+ async diagnose() {
38
+ const varValue = process.env[this.varName];
39
+ if (!varValue) {
40
+ return doctor.nok(`${this.varName} environment variable is NOT set!`);
41
+ }
42
+
43
+ if (!await fs.exists(varValue)) {
44
+ let errMsg = `${this.varName} is set to '${varValue}' but this path does not exist!`;
45
+ if (system.isWindows() && varValue.includes('%')) {
46
+ errMsg += ` Consider replacing all references to other environment variables with absolute paths.`;
47
+ }
48
+ return doctor.nok(errMsg);
49
+ }
50
+
51
+ const stat = await fs.stat(varValue);
52
+ if (this.opts.expectDir && !stat.isDirectory()) {
53
+ return doctor.nok(`${this.varName} is expected to be a valid folder, got a file path instead`);
54
+ }
55
+ if (this.opts.expectFile && stat.isDirectory()) {
56
+ return doctor.nok(`${this.varName} is expected to be a valid file, got a folder path instead`);
57
+ }
58
+
59
+ return doctor.ok(`${this.varName} is set to: ${varValue}`);
60
+ }
61
+
62
+ async fix() {
63
+ return (
64
+ `Make sure the environment variable ${this.varName.bold} is properly configured for the Appium process. ` +
65
+ `Refer ${ENVIRONMENT_VARS_TUTORIAL_URL} for more details.`
66
+ );
67
+ }
68
+
69
+ hasAutofix() {
70
+ return false;
71
+ }
72
+
73
+ isOptional() {
74
+ return false;
75
+ }
76
+ }
77
+ export const androidHomeCheck = new EnvVarAndPathCheck('ANDROID_HOME', {expectDir: true});
78
+ export const javaHomeCheck = new EnvVarAndPathCheck('JAVA_HOME', {expectDir: true});
79
+
80
+ /** @satisfies {import('@appium/types').IDoctorCheck} */
81
+ export class JavaHomeValueCheck {
82
+ async diagnose() {
83
+ const envVar = process.env.JAVA_HOME;
84
+ if (!envVar) {
85
+ return doctor.nok(`${JAVA_HOME_VAR_NAME} environment variable must be set`);
86
+ }
87
+
88
+ const javaBinaryRelativePath = path.join('bin', `java${system.isWindows() ? '.exe' : ''}`);
89
+ const javaBinary = path.join(envVar, javaBinaryRelativePath);
90
+ if (!await fs.exists(javaBinary)) {
91
+ return doctor.nok(
92
+ `${JAVA_HOME_VAR_NAME} is set to an invalid value. ` +
93
+ `It must be pointing to a folder containing ${javaBinaryRelativePath}`
94
+ );
95
+ }
96
+ return doctor.ok(`'${javaBinaryRelativePath}' exists under '${envVar}'`);
97
+ }
98
+
99
+ async fix() {
100
+ return `Set ${JAVA_HOME_VAR_NAME} environment variable to the root folder path of your local JDK installation. ` +
101
+ `Read ${JAVA_HOME_TUTORIAL}`;
102
+ }
103
+
104
+ hasAutofix() {
105
+ return false;
106
+ }
107
+
108
+ isOptional() {
109
+ return false;
110
+ }
111
+ }
112
+ export const javaHomeValueCheck = new JavaHomeValueCheck();
113
+
114
+ /** @satisfies {import('@appium/types').IDoctorCheck} */
115
+ export class AndroidSdkCheck {
116
+ TOOL_NAMES = ['adb', 'emulator', `apkanalyzer${system.isWindows() ? '.bat' : ''}`];
117
+
118
+ async diagnose() {
119
+ const listOfTools = this.TOOL_NAMES.join(', ');
120
+ const sdkRoot = getSdkRootFromEnv();
121
+ if (!sdkRoot) {
122
+ return doctor.nok(
123
+ `${listOfTools} could not be found because ANDROID_HOME is NOT set!`
124
+ );
125
+ }
126
+
127
+ log.info(` Checking ${listOfTools}`);
128
+ const missingBinaries = [];
129
+ for (const binary of this.TOOL_NAMES) {
130
+ try {
131
+ log.info(` '${binary}' exists in ${await getAndroidBinaryPath(binary)}`);
132
+ } catch (e) {
133
+ missingBinaries.push(binary);
134
+ }
135
+ }
136
+
137
+ if (missingBinaries.length > 0) {
138
+ return doctor.nok(`${missingBinaries.join(', ')} could NOT be found in '${sdkRoot}'!`);
139
+ }
140
+
141
+ return doctor.ok(`${listOfTools} exist in '${sdkRoot}'`);
142
+ }
143
+
144
+ async fix() {
145
+ return (
146
+ `Manually install ${'Android SDK'.bold} and set ${'ANDROID_HOME'.bold}. ` +
147
+ `Read ${[ANDROID_SDK_LINK1, ANDROID_SDK_LINK2].join(' and ')}.`
148
+ );
149
+ }
150
+
151
+ hasAutofix() {
152
+ return false;
153
+ }
154
+
155
+ isOptional() {
156
+ return false;
157
+ }
158
+ }
159
+ export const androidSdkCheck = new AndroidSdkCheck();
160
+
161
+ /** @satisfies {import('@appium/types').IDoctorCheck} */
162
+ export class OptionalBundletoolCheck {
163
+ async diagnose() {
164
+ const bundletoolPath = await resolveExecutablePath('bundletool.jar');
165
+ return bundletoolPath
166
+ ? doctor.okOptional(`bundletool.jar is installed at: ${bundletoolPath}`)
167
+ : doctor.nokOptional('bundletool.jar cannot be found');
168
+ }
169
+
170
+ async fix() {
171
+ return (
172
+ `${'bundletool.jar'.bold} is used to handle Android App bundles. ` +
173
+ `Please download the binary from ${BUNDLETOOL_RELEASES_LINK} and store it ` +
174
+ `to any folder listed in the PATH environment variable. Folders that ` +
175
+ `are currently present in PATH: ${process.env.PATH}`
176
+ );
177
+ }
178
+
179
+ hasAutofix() {
180
+ return false;
181
+ }
182
+
183
+ isOptional() {
184
+ return true;
185
+ }
186
+ }
187
+ export const optionalBundletoolCheck = new OptionalBundletoolCheck();
188
+
189
+ /** @satisfies {import('@appium/types').IDoctorCheck} */
190
+ export class OptionalGstreamerCheck {
191
+ GSTREAMER_BINARY = `gst-launch-1.0${system.isWindows() ? '.exe' : ''}`;
192
+ GST_INSPECT_BINARY = `gst-inspect-1.0${system.isWindows() ? '.exe' : ''}`;
193
+
194
+ async diagnose() {
195
+ const gstreamerPath = await resolveExecutablePath(this.GSTREAMER_BINARY);
196
+ const gstInspectPath = await resolveExecutablePath(this.GST_INSPECT_BINARY);
197
+
198
+ return gstreamerPath && gstInspectPath
199
+ ? doctor.okOptional(
200
+ `${this.GSTREAMER_BINARY} and ${this.GST_INSPECT_BINARY} are installed at: ${gstreamerPath} and ${gstInspectPath}`
201
+ )
202
+ : doctor.nokOptional(`${this.GSTREAMER_BINARY} and/or ${this.GST_INSPECT_BINARY} cannot be found`);
203
+ }
204
+
205
+ async fix() {
206
+ return (
207
+ `${
208
+ `${this.GSTREAMER_BINARY} and ${this.GST_INSPECT_BINARY}`.bold
209
+ } are used to stream the screen of the device under test. ` +
210
+ `Please read ${GSTREAMER_INSTALL_LINK}.`
211
+ );
212
+ }
213
+
214
+ hasAutofix() {
215
+ return false;
216
+ }
217
+
218
+ isOptional() {
219
+ return true;
220
+ }
221
+ }
222
+ export const optionalGstreamerCheck = new OptionalGstreamerCheck();
223
+
224
+ /** @satisfies {import('@appium/types').IDoctorCheck} */
225
+ export class OptionalFfmpegCheck {
226
+ FFMPEG_BINARY = `ffmpeg${system.isWindows() ? '.exe' : ''}`;
227
+
228
+ async diagnose() {
229
+ const ffmpegPath = await resolveExecutablePath(this.FFMPEG_BINARY);
230
+
231
+ return ffmpegPath
232
+ ? doctor.okOptional(`${this.FFMPEG_BINARY} exists at '${ffmpegPath}'`)
233
+ : doctor.nokOptional(`${this.FFMPEG_BINARY} cannot be found`);
234
+ }
235
+
236
+ async fix() {
237
+ return (
238
+ `${`${this.FFMPEG_BINARY}`.bold} is used to capture screen recordings from the device under test. ` +
239
+ `Please read ${FFMPEG_INSTALL_LINK}.`
240
+ );
241
+ }
242
+
243
+ hasAutofix() {
244
+ return false;
245
+ }
246
+
247
+ isOptional() {
248
+ return true;
249
+ }
250
+ }
251
+ export const optionalFfmpegCheck = new OptionalFfmpegCheck();
@@ -0,0 +1,17 @@
1
+ import {fs} from '@appium/support';
2
+
3
+ /**
4
+ * Return an executable path of cmd
5
+ *
6
+ * @param {string} cmd Standard output by command
7
+ * @return {Promise<string?>} The full path of cmd. `null` if the cmd is not found.
8
+ */
9
+ export async function resolveExecutablePath(cmd) {
10
+ try {
11
+ const executablePath = await fs.which(cmd);
12
+ if (executablePath && (await fs.exists(executablePath))) {
13
+ return executablePath;
14
+ }
15
+ } catch (err) {}
16
+ return null;
17
+ }
@@ -226,15 +226,15 @@ async function webviewsFromProcs(
226
226
  * @param socketName - The remote Unix socket name
227
227
  * @param webviewDevtoolsPort - The local port number or null to apply
228
228
  * autodetection
229
- * @returns The local port number if the remote socket has been forwarded
230
- * successfully or `null` otherwise
229
+ * @returns The host name and the port number to connect to if the
230
+ * remote socket has been forwarded successfully
231
231
  * @throws {Error} If there was an error while allocating the local port
232
232
  */
233
- async function allocateDevtoolsPort(
233
+ async function allocateDevtoolsChannel(
234
234
  adb: any,
235
235
  socketName: string,
236
236
  webviewDevtoolsPort: number | null = null,
237
- ): Promise<number> {
237
+ ): Promise<[string, number]> {
238
238
  // socket names come with '@', but this should not be a part of the abstract
239
239
  // remote port, so remove it
240
240
  const remotePort = socketName.replace(/^@/, '');
@@ -252,7 +252,7 @@ async function allocateDevtoolsPort(
252
252
  `the starting port number`,
253
253
  );
254
254
  }
255
- return (await DEVTOOLS_PORT_ALLOCATION_GUARD(async () => {
255
+ const port = (await DEVTOOLS_PORT_ALLOCATION_GUARD(async () => {
256
256
  let localPort: number;
257
257
  try {
258
258
  localPort = await findAPortNotInUse(startPort, endPort);
@@ -266,6 +266,7 @@ async function allocateDevtoolsPort(
266
266
  await adb.adbExec(['forward', `tcp:${localPort}`, `localabstract:${remotePort}`]);
267
267
  return localPort;
268
268
  })) as number;
269
+ return [adb.adbHost ?? '127.0.0.1', port];
269
270
  }
270
271
 
271
272
  /**
@@ -322,21 +323,22 @@ async function collectWebviewsDetails(
322
323
  for (const item of webviewsMapping) {
323
324
  detailCollectors.push(
324
325
  (async () => {
325
- let localPort: number | undefined;
326
+ let port: number|undefined;
327
+ let host: string|undefined;
326
328
  try {
327
- localPort = await allocateDevtoolsPort(adb, item.proc, webviewDevtoolsPort);
329
+ [host, port] = await allocateDevtoolsChannel(adb, item.proc, webviewDevtoolsPort);
328
330
  if (enableWebviewDetailsCollection) {
329
- item.info = await cdpInfo(localPort);
331
+ item.info = await cdpInfo(host, port);
330
332
  }
331
333
  if (ensureWebviewsHavePages) {
332
- item.pages = await cdpList(localPort);
334
+ item.pages = await cdpList(host, port);
333
335
  }
334
336
  } catch (e) {
335
337
  logger.debug(e);
336
338
  } finally {
337
- if (localPort) {
339
+ if (port) {
338
340
  try {
339
- await adb.removePortForward(localPort);
341
+ await adb.removePortForward(port);
340
342
  } catch (e) {
341
343
  logger.debug(e);
342
344
  }
@@ -350,20 +352,20 @@ async function collectWebviewsDetails(
350
352
  }
351
353
 
352
354
  // https://chromedevtools.github.io/devtools-protocol/
353
- async function cdpList(localPort: number): Promise<object[]> {
355
+ async function cdpList(host: string, port: number): Promise<object[]> {
354
356
  return (
355
357
  await axios({
356
- url: `http://127.0.0.1:${localPort}/json/list`,
358
+ url: `http://${host}:${port}/json/list`,
357
359
  timeout: CDP_REQ_TIMEOUT,
358
360
  })
359
361
  ).data;
360
362
  }
361
363
 
362
364
  // https://chromedevtools.github.io/devtools-protocol/
363
- async function cdpInfo(localPort: number): Promise<object[]> {
365
+ async function cdpInfo(host: string, port: number): Promise<object[]> {
364
366
  return (
365
367
  await axios({
366
- url: `http://127.0.0.1:${localPort}/json/version`,
368
+ url: `http://${host}:${port}/json/version`,
367
369
  timeout: CDP_REQ_TIMEOUT,
368
370
  })
369
371
  ).data;
package/lib/index.ts CHANGED
@@ -5,6 +5,7 @@ import {AndroidDriver} from './driver';
5
5
  export type * from './commands';
6
6
  export {ANDROID_DRIVER_CONSTRAINTS as commonCapConstraints} from './constraints';
7
7
  export * from './driver';
8
+ export * as doctor from './doctor/checks';
8
9
  export {SETTINGS_HELPER_PKG_ID, default as androidHelpers} from './helpers/android';
9
10
  export type * from './helpers/types';
10
11
  export {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "appium-android-driver",
3
- "version": "7.4.0",
3
+ "version": "7.5.0",
4
4
  "description": "Android UiAutomator and Chrome support for Appium",
5
5
  "keywords": [
6
6
  "appium",
@@ -55,6 +55,8 @@
55
55
  "singleQuote": true
56
56
  },
57
57
  "dependencies": {
58
+ "@appium/support": "^4.2.0",
59
+ "@colors/colors": "^1.6.0",
58
60
  "appium-adb": "^11.0.1",
59
61
  "appium-chromedriver": "^5.5.1",
60
62
  "asyncbox": "^3.0.0",
@@ -75,7 +77,6 @@
75
77
  "devDependencies": {
76
78
  "@appium/eslint-config-appium": "^8.0.4",
77
79
  "@appium/eslint-config-appium-ts": "^0.x",
78
- "@appium/support": "^4.1.2",
79
80
  "@appium/test-support": "^3.0.20",
80
81
  "@appium/tsconfig": "^0.x",
81
82
  "@appium/types": "^0.x",