appium-android-driver 14.2.0 → 14.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
## [14.2.1](https://github.com/appium/appium-android-driver/compare/v14.2.0...v14.2.1) (2026-09-26)
|
|
2
|
+
|
|
3
|
+
### Bug Fixes
|
|
4
|
+
|
|
5
|
+
* preserve literal paths in Android file actions ([#1100](https://github.com/appium/appium-android-driver/issues/1100)) ([de47b29](https://github.com/appium/appium-android-driver/commit/de47b293d9b978cfbaf6e7268909a06faab85d08))
|
|
6
|
+
|
|
1
7
|
## [14.2.0](https://github.com/appium/appium-android-driver/compare/v14.1.0...v14.2.0) (2026-09-10)
|
|
2
8
|
|
|
3
9
|
### Features
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-actions.d.ts","sourceRoot":"","sources":["../../../lib/commands/file-actions.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,cAAc,CAAC;AAOhD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAwCvF;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"file-actions.d.ts","sourceRoot":"","sources":["../../../lib/commands/file-actions.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,cAAc,CAAC;AAOhD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAwCvF;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA+DpH;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAYzF;AAED;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOhG"}
|
|
@@ -30,10 +30,10 @@ export async function pullFile(remotePath) {
|
|
|
30
30
|
this.log.debug(`Parsed package identifier '${packageId}' from '${remotePath}'. Will get the data from '${pathInContainer}'`);
|
|
31
31
|
tmpDestination = `/data/local/tmp/${path.posix.basename(pathInContainer)}`;
|
|
32
32
|
try {
|
|
33
|
-
await this.adb.shell(['run-as', packageId, `chmod 777 '${escapePath(pathInContainer)}'`]);
|
|
33
|
+
await this.adb.shell(['run-as', util.quote(packageId), `chmod 777 '${escapePath(pathInContainer)}'`]);
|
|
34
34
|
await this.adb.shell([
|
|
35
35
|
'run-as',
|
|
36
|
-
packageId,
|
|
36
|
+
util.quote(packageId),
|
|
37
37
|
`cp -f '${escapePath(pathInContainer)}' '${escapePath(tmpDestination)}'`,
|
|
38
38
|
]);
|
|
39
39
|
}
|
|
@@ -53,7 +53,7 @@ export async function pullFile(remotePath) {
|
|
|
53
53
|
await fs.unlink(localFile);
|
|
54
54
|
}
|
|
55
55
|
if (tmpDestination) {
|
|
56
|
-
await this.adb.shell(['rm', '-f', tmpDestination]);
|
|
56
|
+
await this.adb.shell(['rm', '-f', util.quote(tmpDestination)]);
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
59
|
}
|
|
@@ -98,13 +98,17 @@ export async function pushFile(remotePath, base64Data) {
|
|
|
98
98
|
`Will put the data into '${pathInContainer}'`);
|
|
99
99
|
tmpDestination = `/data/local/tmp/${path.posix.basename(pathInContainer)}`;
|
|
100
100
|
try {
|
|
101
|
-
await this.adb.shell([
|
|
102
|
-
|
|
103
|
-
|
|
101
|
+
await this.adb.shell([
|
|
102
|
+
'run-as',
|
|
103
|
+
util.quote(packageId),
|
|
104
|
+
`mkdir -p '${escapePath(path.posix.dirname(pathInContainer))}'`,
|
|
105
|
+
]);
|
|
106
|
+
await this.adb.shell(['run-as', util.quote(packageId), `touch '${escapePath(pathInContainer)}'`]);
|
|
107
|
+
await this.adb.shell(['run-as', util.quote(packageId), `chmod 777 '${escapePath(pathInContainer)}'`]);
|
|
104
108
|
await this.adb.push(localFile, tmpDestination);
|
|
105
109
|
await this.adb.shell([
|
|
106
110
|
'run-as',
|
|
107
|
-
packageId,
|
|
111
|
+
util.quote(packageId),
|
|
108
112
|
`cp -f '${escapePath(tmpDestination)}' '${escapePath(pathInContainer)}'`,
|
|
109
113
|
]);
|
|
110
114
|
}
|
|
@@ -127,7 +131,7 @@ export async function pushFile(remotePath, base64Data) {
|
|
|
127
131
|
await fs.unlink(localFile);
|
|
128
132
|
}
|
|
129
133
|
if (tmpDestination) {
|
|
130
|
-
await this.adb.shell(['rm', '-f', tmpDestination]);
|
|
134
|
+
await this.adb.shell(['rm', '-f', util.quote(tmpDestination)]);
|
|
131
135
|
}
|
|
132
136
|
}
|
|
133
137
|
}
|
|
@@ -184,7 +188,7 @@ async function deleteFileOrFolder(adb, remotePath) {
|
|
|
184
188
|
}
|
|
185
189
|
if (pkgId) {
|
|
186
190
|
try {
|
|
187
|
-
await adb.shell(['run-as', pkgId, 'ls']);
|
|
191
|
+
await adb.shell(['run-as', util.quote(pkgId), 'ls']);
|
|
188
192
|
}
|
|
189
193
|
catch (e) {
|
|
190
194
|
throw this.log.errorWithException(`Cannot access the container of '${pkgId}' application. ` +
|
|
@@ -204,10 +208,10 @@ async function deleteFileOrFolder(adb, remotePath) {
|
|
|
204
208
|
throw this.log.errorWithException(`The item at '${dstPath}' is not a folder`);
|
|
205
209
|
}
|
|
206
210
|
if (pkgId) {
|
|
207
|
-
await adb.shell(['run-as', pkgId, `rm -f${expectsFile ? '' : 'r'} '${escapePath(dstPath)}'`]);
|
|
211
|
+
await adb.shell(['run-as', util.quote(pkgId), `rm -f${expectsFile ? '' : 'r'} '${escapePath(dstPath)}'`]);
|
|
208
212
|
}
|
|
209
213
|
else {
|
|
210
|
-
await adb.shell(['rm', `-f${expectsFile ? '' : 'r'}`, dstPath]);
|
|
214
|
+
await adb.shell(['rm', `-f${expectsFile ? '' : 'r'}`, util.quote(dstPath)]);
|
|
211
215
|
}
|
|
212
216
|
if (await isPresent(dstPath, pkgId)) {
|
|
213
217
|
throw this.log.errorWithException(`The item at '${dstPath}' still exists after being deleted. Is it writable?`);
|
|
@@ -257,7 +261,7 @@ async function scanMedia(remotePath) {
|
|
|
257
261
|
* so they are safe to be passed as arguments of shell commands
|
|
258
262
|
*/
|
|
259
263
|
function escapePath(p) {
|
|
260
|
-
return p.replace(/'/g,
|
|
264
|
+
return p.replace(/'/g, `'"'"'`);
|
|
261
265
|
}
|
|
262
266
|
/**
|
|
263
267
|
* Factory providing filesystem test functions using ADB
|
|
@@ -266,7 +270,7 @@ function createFSTests(adb) {
|
|
|
266
270
|
const performRemoteFsCheck = async (p, op, runAs) => {
|
|
267
271
|
const passFlag = '__PASS__';
|
|
268
272
|
const checkCmd = `[ -${op} '${escapePath(p)}' ] && echo ${passFlag}`;
|
|
269
|
-
const fullCmd = runAs ? `run-as ${runAs} ${checkCmd}` : checkCmd;
|
|
273
|
+
const fullCmd = runAs ? `run-as ${util.quote(runAs)} ${checkCmd}` : checkCmd;
|
|
270
274
|
try {
|
|
271
275
|
return (await adb.shell([fullCmd])).includes(passFlag);
|
|
272
276
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-actions.js","sourceRoot":"","sources":["../../../lib/commands/file-actions.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAC,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAC,MAAM,iBAAiB,CAAC;AAEvD,OAAO,EAAC,MAAM,EAAC,MAAM,kBAAkB,CAAC;AAIxC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAClC,kCAAkC;AAClC,MAAM,sBAAsB,GAAG,IAAI,MAAM,CAAC,IAAI,qBAAqB,cAAc,CAAC,CAAC;AACnF,MAAM,2BAA2B,GAAG,+CAA+C,CAAC;AAEpF;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAsB,UAAkB;IACpE,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,MAAM,CAAC,oBAAoB,CACnC,0EAA0E,UAAU,oBAAoB,CACzG,CAAC;IACJ,CAAC;IACD,IAAI,cAAc,GAAkB,IAAI,CAAC;IACzC,IAAI,UAAU,CAAC,UAAU,CAAC,qBAAqB,CAAC,EAAE,CAAC;QACjD,MAAM,CAAC,SAAS,EAAE,eAAe,CAAC,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;QACpE,IAAI,CAAC,GAAG,CAAC,KAAK,CACZ,8BAA8B,SAAS,WAAW,UAAU,8BAA8B,eAAe,GAAG,CAC7G,CAAC;QACF,cAAc,GAAG,mBAAmB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;QAC3E,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,cAAc,UAAU,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"file-actions.js","sourceRoot":"","sources":["../../../lib/commands/file-actions.ts"],"names":[],"mappings":"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"}
|
|
@@ -40,10 +40,10 @@ export async function pullFile(this: AndroidDriver, remotePath: string): Promise
|
|
|
40
40
|
);
|
|
41
41
|
tmpDestination = `/data/local/tmp/${path.posix.basename(pathInContainer)}`;
|
|
42
42
|
try {
|
|
43
|
-
await this.adb.shell(['run-as', packageId, `chmod 777 '${escapePath(pathInContainer)}'`]);
|
|
43
|
+
await this.adb.shell(['run-as', util.quote(packageId), `chmod 777 '${escapePath(pathInContainer)}'`]);
|
|
44
44
|
await this.adb.shell([
|
|
45
45
|
'run-as',
|
|
46
|
-
packageId,
|
|
46
|
+
util.quote(packageId),
|
|
47
47
|
`cp -f '${escapePath(pathInContainer)}' '${escapePath(tmpDestination)}'`,
|
|
48
48
|
]);
|
|
49
49
|
} catch (e) {
|
|
@@ -63,7 +63,7 @@ export async function pullFile(this: AndroidDriver, remotePath: string): Promise
|
|
|
63
63
|
await fs.unlink(localFile);
|
|
64
64
|
}
|
|
65
65
|
if (tmpDestination) {
|
|
66
|
-
await this.adb.shell(['rm', '-f', tmpDestination]);
|
|
66
|
+
await this.adb.shell(['rm', '-f', util.quote(tmpDestination)]);
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
69
|
}
|
|
@@ -112,13 +112,17 @@ export async function pushFile(this: AndroidDriver, remotePath: string, base64Da
|
|
|
112
112
|
);
|
|
113
113
|
tmpDestination = `/data/local/tmp/${path.posix.basename(pathInContainer)}`;
|
|
114
114
|
try {
|
|
115
|
-
await this.adb.shell([
|
|
116
|
-
|
|
117
|
-
|
|
115
|
+
await this.adb.shell([
|
|
116
|
+
'run-as',
|
|
117
|
+
util.quote(packageId),
|
|
118
|
+
`mkdir -p '${escapePath(path.posix.dirname(pathInContainer))}'`,
|
|
119
|
+
]);
|
|
120
|
+
await this.adb.shell(['run-as', util.quote(packageId), `touch '${escapePath(pathInContainer)}'`]);
|
|
121
|
+
await this.adb.shell(['run-as', util.quote(packageId), `chmod 777 '${escapePath(pathInContainer)}'`]);
|
|
118
122
|
await this.adb.push(localFile, tmpDestination);
|
|
119
123
|
await this.adb.shell([
|
|
120
124
|
'run-as',
|
|
121
|
-
packageId,
|
|
125
|
+
util.quote(packageId),
|
|
122
126
|
`cp -f '${escapePath(tmpDestination)}' '${escapePath(pathInContainer)}'`,
|
|
123
127
|
]);
|
|
124
128
|
} catch (e) {
|
|
@@ -141,7 +145,7 @@ export async function pushFile(this: AndroidDriver, remotePath: string, base64Da
|
|
|
141
145
|
await fs.unlink(localFile);
|
|
142
146
|
}
|
|
143
147
|
if (tmpDestination) {
|
|
144
|
-
await this.adb.shell(['rm', '-f', tmpDestination]);
|
|
148
|
+
await this.adb.shell(['rm', '-f', util.quote(tmpDestination)]);
|
|
145
149
|
}
|
|
146
150
|
}
|
|
147
151
|
}
|
|
@@ -205,7 +209,7 @@ async function deleteFileOrFolder(this: AndroidDriver, adb: ADB, remotePath: str
|
|
|
205
209
|
|
|
206
210
|
if (pkgId) {
|
|
207
211
|
try {
|
|
208
|
-
await adb.shell(['run-as', pkgId, 'ls']);
|
|
212
|
+
await adb.shell(['run-as', util.quote(pkgId), 'ls']);
|
|
209
213
|
} catch (e) {
|
|
210
214
|
throw this.log.errorWithException(
|
|
211
215
|
`Cannot access the container of '${pkgId}' application. ` +
|
|
@@ -228,9 +232,9 @@ async function deleteFileOrFolder(this: AndroidDriver, adb: ADB, remotePath: str
|
|
|
228
232
|
}
|
|
229
233
|
|
|
230
234
|
if (pkgId) {
|
|
231
|
-
await adb.shell(['run-as', pkgId, `rm -f${expectsFile ? '' : 'r'} '${escapePath(dstPath)}'`]);
|
|
235
|
+
await adb.shell(['run-as', util.quote(pkgId), `rm -f${expectsFile ? '' : 'r'} '${escapePath(dstPath)}'`]);
|
|
232
236
|
} else {
|
|
233
|
-
await adb.shell(['rm', `-f${expectsFile ? '' : 'r'}`, dstPath]);
|
|
237
|
+
await adb.shell(['rm', `-f${expectsFile ? '' : 'r'}`, util.quote(dstPath)]);
|
|
234
238
|
}
|
|
235
239
|
if (await isPresent(dstPath, pkgId)) {
|
|
236
240
|
throw this.log.errorWithException(`The item at '${dstPath}' still exists after being deleted. Is it writable?`);
|
|
@@ -284,7 +288,7 @@ async function scanMedia(this: AndroidDriver, remotePath: string): Promise<void>
|
|
|
284
288
|
* so they are safe to be passed as arguments of shell commands
|
|
285
289
|
*/
|
|
286
290
|
function escapePath(p: string): string {
|
|
287
|
-
return p.replace(/'/g,
|
|
291
|
+
return p.replace(/'/g, `'"'"'`);
|
|
288
292
|
}
|
|
289
293
|
|
|
290
294
|
/**
|
|
@@ -294,7 +298,7 @@ function createFSTests(adb: ADB) {
|
|
|
294
298
|
const performRemoteFsCheck = async (p: string, op: 'd' | 'f' | 'e', runAs?: string): Promise<boolean> => {
|
|
295
299
|
const passFlag = '__PASS__';
|
|
296
300
|
const checkCmd = `[ -${op} '${escapePath(p)}' ] && echo ${passFlag}`;
|
|
297
|
-
const fullCmd = runAs ? `run-as ${runAs} ${checkCmd}` : checkCmd;
|
|
301
|
+
const fullCmd = runAs ? `run-as ${util.quote(runAs)} ${checkCmd}` : checkCmd;
|
|
298
302
|
try {
|
|
299
303
|
return (await adb.shell([fullCmd])).includes(passFlag);
|
|
300
304
|
} catch {
|