@yume-chan/android-bin 0.0.0-20240714132542

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.
Files changed (76) hide show
  1. package/CHANGELOG.md +129 -0
  2. package/LICENSE +21 -0
  3. package/README.md +49 -0
  4. package/esm/am.d.ts +17 -0
  5. package/esm/am.d.ts.map +1 -0
  6. package/esm/am.js +42 -0
  7. package/esm/am.js.map +1 -0
  8. package/esm/bu.d.ts +28 -0
  9. package/esm/bu.d.ts.map +1 -0
  10. package/esm/bu.js +53 -0
  11. package/esm/bu.js.map +1 -0
  12. package/esm/bug-report.d.ts +99 -0
  13. package/esm/bug-report.d.ts.map +1 -0
  14. package/esm/bug-report.js +271 -0
  15. package/esm/bug-report.js.map +1 -0
  16. package/esm/cmd.d.ts +25 -0
  17. package/esm/cmd.d.ts.map +1 -0
  18. package/esm/cmd.js +81 -0
  19. package/esm/cmd.js.map +1 -0
  20. package/esm/demo-mode.d.ts +44 -0
  21. package/esm/demo-mode.d.ts.map +1 -0
  22. package/esm/demo-mode.js +179 -0
  23. package/esm/demo-mode.js.map +1 -0
  24. package/esm/dumpsys.d.ts +51 -0
  25. package/esm/dumpsys.d.ts.map +1 -0
  26. package/esm/dumpsys.js +114 -0
  27. package/esm/dumpsys.js.map +1 -0
  28. package/esm/index.d.ts +13 -0
  29. package/esm/index.d.ts.map +1 -0
  30. package/esm/index.js +14 -0
  31. package/esm/index.js.map +1 -0
  32. package/esm/intent.d.ts +11 -0
  33. package/esm/intent.d.ts.map +1 -0
  34. package/esm/intent.js +59 -0
  35. package/esm/intent.js.map +1 -0
  36. package/esm/logcat.d.ts +93 -0
  37. package/esm/logcat.d.ts.map +1 -0
  38. package/esm/logcat.js +300 -0
  39. package/esm/logcat.js.map +1 -0
  40. package/esm/overlay-display.d.ts +38 -0
  41. package/esm/overlay-display.d.ts.map +1 -0
  42. package/esm/overlay-display.js +51 -0
  43. package/esm/overlay-display.js.map +1 -0
  44. package/esm/pm.d.ts +211 -0
  45. package/esm/pm.d.ts.map +1 -0
  46. package/esm/pm.js +382 -0
  47. package/esm/pm.js.map +1 -0
  48. package/esm/settings.d.ts +27 -0
  49. package/esm/settings.d.ts.map +1 -0
  50. package/esm/settings.js +66 -0
  51. package/esm/settings.js.map +1 -0
  52. package/esm/string-format.d.ts +43 -0
  53. package/esm/string-format.d.ts.map +1 -0
  54. package/esm/string-format.js +152 -0
  55. package/esm/string-format.js.map +1 -0
  56. package/esm/utils.d.ts +4 -0
  57. package/esm/utils.d.ts.map +1 -0
  58. package/esm/utils.js +23 -0
  59. package/esm/utils.js.map +1 -0
  60. package/package.json +49 -0
  61. package/src/am.ts +71 -0
  62. package/src/bu.ts +80 -0
  63. package/src/bug-report.ts +348 -0
  64. package/src/cmd.ts +113 -0
  65. package/src/demo-mode.ts +232 -0
  66. package/src/dumpsys.ts +153 -0
  67. package/src/index.ts +14 -0
  68. package/src/intent.ts +73 -0
  69. package/src/logcat.ts +509 -0
  70. package/src/overlay-display.ts +112 -0
  71. package/src/pm.ts +674 -0
  72. package/src/settings.ts +128 -0
  73. package/src/string-format.ts +197 -0
  74. package/src/utils.ts +29 -0
  75. package/tsconfig.build.json +14 -0
  76. package/tsconfig.build.tsbuildinfo +1 -0
package/esm/logcat.js ADDED
@@ -0,0 +1,300 @@
1
+ // cspell: ignore logcat
2
+ // cspell: ignore usec
3
+ import { AdbCommandBase, AdbSubprocessNoneProtocol } from "@yume-chan/adb";
4
+ import { BufferedTransformStream, SplitStringStream, TextDecoderStream, WrapReadableStream, WritableStream, } from "@yume-chan/stream-extra";
5
+ import Struct, { decodeUtf8 } from "@yume-chan/struct";
6
+ // `adb logcat` is an alias to `adb shell logcat`
7
+ // so instead of adding to core library, it's implemented here
8
+ // https://cs.android.com/android/platform/superproject/+/master:system/logging/liblog/include/android/log.h;l=141;drc=82b5738732161dbaafb2e2f25cce19cd26b9157d
9
+ export var LogId;
10
+ (function (LogId) {
11
+ LogId[LogId["All"] = -1] = "All";
12
+ LogId[LogId["Main"] = 0] = "Main";
13
+ LogId[LogId["Radio"] = 1] = "Radio";
14
+ LogId[LogId["Events"] = 2] = "Events";
15
+ LogId[LogId["System"] = 3] = "System";
16
+ LogId[LogId["Crash"] = 4] = "Crash";
17
+ LogId[LogId["Stats"] = 5] = "Stats";
18
+ LogId[LogId["Security"] = 6] = "Security";
19
+ LogId[LogId["Kernel"] = 7] = "Kernel";
20
+ })(LogId || (LogId = {}));
21
+ // https://cs.android.com/android/platform/superproject/+/master:system/logging/liblog/include/android/log.h;l=73;drc=82b5738732161dbaafb2e2f25cce19cd26b9157d
22
+ export var AndroidLogPriority;
23
+ (function (AndroidLogPriority) {
24
+ AndroidLogPriority[AndroidLogPriority["Unknown"] = 0] = "Unknown";
25
+ AndroidLogPriority[AndroidLogPriority["Default"] = 1] = "Default";
26
+ AndroidLogPriority[AndroidLogPriority["Verbose"] = 2] = "Verbose";
27
+ AndroidLogPriority[AndroidLogPriority["Debug"] = 3] = "Debug";
28
+ AndroidLogPriority[AndroidLogPriority["Info"] = 4] = "Info";
29
+ AndroidLogPriority[AndroidLogPriority["Warn"] = 5] = "Warn";
30
+ AndroidLogPriority[AndroidLogPriority["Error"] = 6] = "Error";
31
+ AndroidLogPriority[AndroidLogPriority["Fatal"] = 7] = "Fatal";
32
+ AndroidLogPriority[AndroidLogPriority["Silent"] = 8] = "Silent";
33
+ })(AndroidLogPriority || (AndroidLogPriority = {}));
34
+ // https://cs.android.com/android/platform/superproject/+/master:system/logging/liblog/logprint.cpp;l=140;drc=8dbf3b2bb6b6d1652d9797e477b9abd03278bb79
35
+ export const AndroidLogPriorityToCharacter = {
36
+ [AndroidLogPriority.Unknown]: "?",
37
+ [AndroidLogPriority.Default]: "?",
38
+ [AndroidLogPriority.Verbose]: "V",
39
+ [AndroidLogPriority.Debug]: "D",
40
+ [AndroidLogPriority.Info]: "I",
41
+ [AndroidLogPriority.Warn]: "W",
42
+ [AndroidLogPriority.Error]: "E",
43
+ [AndroidLogPriority.Fatal]: "F",
44
+ [AndroidLogPriority.Silent]: "S",
45
+ };
46
+ export var LogcatFormat;
47
+ (function (LogcatFormat) {
48
+ LogcatFormat[LogcatFormat["Brief"] = 0] = "Brief";
49
+ LogcatFormat[LogcatFormat["Process"] = 1] = "Process";
50
+ LogcatFormat[LogcatFormat["Tag"] = 2] = "Tag";
51
+ LogcatFormat[LogcatFormat["Thread"] = 3] = "Thread";
52
+ LogcatFormat[LogcatFormat["Raw"] = 4] = "Raw";
53
+ LogcatFormat[LogcatFormat["Time"] = 5] = "Time";
54
+ LogcatFormat[LogcatFormat["ThreadTime"] = 6] = "ThreadTime";
55
+ LogcatFormat[LogcatFormat["Long"] = 7] = "Long";
56
+ })(LogcatFormat || (LogcatFormat = {}));
57
+ const NANOSECONDS_PER_SECOND = BigInt(1e9);
58
+ // https://cs.android.com/android/platform/superproject/+/master:system/logging/liblog/include/log/log_read.h;l=39;drc=82b5738732161dbaafb2e2f25cce19cd26b9157d
59
+ export const LoggerEntry = new Struct({ littleEndian: true })
60
+ .uint16("payloadSize")
61
+ .uint16("headerSize")
62
+ .int32("pid")
63
+ .uint32("tid")
64
+ .uint32("seconds")
65
+ .uint32("nanoseconds")
66
+ .uint32("logId")
67
+ .uint32("uid")
68
+ .extra({
69
+ get timestamp() {
70
+ return (BigInt(this.seconds) * NANOSECONDS_PER_SECOND +
71
+ BigInt(this.nanoseconds));
72
+ },
73
+ });
74
+ function padZero(number, length) {
75
+ return number.toString().padStart(length, "0");
76
+ }
77
+ function formatSeconds(seconds, modifiers) {
78
+ if (modifiers.monotonic) {
79
+ return padZero(seconds, 6);
80
+ }
81
+ if (modifiers.epoch) {
82
+ return padZero(seconds, 19);
83
+ }
84
+ const date = new Date(seconds * 1000);
85
+ const month = padZero(date.getMonth() + 1, 2);
86
+ const day = padZero(date.getDate(), 2);
87
+ const hour = padZero(date.getHours(), 2);
88
+ const minute = padZero(date.getMinutes(), 2);
89
+ const second = padZero(date.getSeconds(), 2);
90
+ const result = `${month}-${day} ${hour}:${minute}:${second}`;
91
+ if (modifiers.year) {
92
+ const year = padZero(date.getFullYear(), 4);
93
+ return `${year}-${result}`;
94
+ }
95
+ return result;
96
+ }
97
+ function formatNanoseconds(nanoseconds, modifiers) {
98
+ if (modifiers.nanoseconds) {
99
+ return padZero(nanoseconds, 9);
100
+ }
101
+ if (modifiers.microseconds) {
102
+ return padZero(nanoseconds / 1000, 6);
103
+ }
104
+ return padZero(nanoseconds / 1000000, 3);
105
+ }
106
+ function formatTimezone(seconds, modifiers) {
107
+ if (!modifiers.timezone || modifiers.monotonic || modifiers.epoch) {
108
+ return "";
109
+ }
110
+ const date = new Date(seconds * 1000);
111
+ const offset = date.getTimezoneOffset();
112
+ const sign = offset <= 0 ? "+" : "-";
113
+ const absolute = Math.abs(offset);
114
+ const hours = (absolute / 60) | 0;
115
+ const minutes = absolute % 60;
116
+ // prettier-ignore
117
+ return ` ${sign}${hours.toString().padStart(2, "0")}:${minutes.toString().padStart(2, "0")}`;
118
+ }
119
+ function formatTime(seconds, nanoseconds, modifiers) {
120
+ const secondsString = formatSeconds(seconds, modifiers);
121
+ const nanosecondsString = formatNanoseconds(nanoseconds, modifiers);
122
+ const zoneString = formatTimezone(seconds, modifiers);
123
+ return `${secondsString}.${nanosecondsString}${zoneString}`;
124
+ }
125
+ function formatUid(uid, modifiers, suffix) {
126
+ return modifiers.uid ? `${uid.toString().padStart(5)}${suffix}` : "";
127
+ }
128
+ function getFormatPrefix(entry, format, modifiers) {
129
+ // https://cs.android.com/android/platform/superproject/+/master:system/logging/liblog/logprint.cpp;l=1415;drc=8dbf3b2bb6b6d1652d9797e477b9abd03278bb79
130
+ switch (format) {
131
+ // TODO: implement other formats
132
+ case LogcatFormat.Tag:
133
+ // prettier-ignore
134
+ return `${AndroidLogPriorityToCharacter[entry.priority]}/${entry.tag.padEnd(8)}: `;
135
+ case LogcatFormat.Process:
136
+ // prettier-ignore
137
+ return `${AndroidLogPriorityToCharacter[entry.priority]}(${formatUid(entry.uid, modifiers, ":")}${entry.pid.toString().padStart(5)}) `;
138
+ case LogcatFormat.Thread:
139
+ // prettier-ignore
140
+ return `${AndroidLogPriorityToCharacter[entry.priority]}(${formatUid(entry.uid, modifiers, ":")}${entry.pid.toString().padStart(5)}:${entry.tid.toString().padStart(5)}) `;
141
+ case LogcatFormat.Raw:
142
+ return "";
143
+ case LogcatFormat.Time:
144
+ // prettier-ignore
145
+ return `${formatTime(entry.seconds, entry.nanoseconds, modifiers)} ${AndroidLogPriorityToCharacter[entry.priority]}/${entry.tag.padEnd(8)}(${formatUid(entry.uid, modifiers, ":")}${entry.pid.toString().padStart(5)}): `;
146
+ case LogcatFormat.ThreadTime:
147
+ // prettier-ignore
148
+ return `${formatTime(entry.seconds, entry.nanoseconds, modifiers)} ${formatUid(entry.uid, modifiers, " ")}${entry.pid.toString().padStart(5)} ${entry.tid.toString().padStart(5)} ${AndroidLogPriorityToCharacter[entry.priority]} ${entry.tag.toString().padEnd(8)}: `;
149
+ case LogcatFormat.Brief:
150
+ default:
151
+ // prettier-ignore
152
+ return `${AndroidLogPriorityToCharacter[entry.priority]}/${entry.tag.padEnd(8)}(${formatUid(entry.uid, modifiers, ":")}${entry.pid.toString().padStart(5)}): `;
153
+ }
154
+ }
155
+ function getFormatSuffix(entry, format) {
156
+ switch (format) {
157
+ case LogcatFormat.Process:
158
+ return ` (${entry.tag})`;
159
+ default:
160
+ return "";
161
+ }
162
+ }
163
+ function formatEntryWrapLine(entry, format, modifiers) {
164
+ const prefix = getFormatPrefix(entry, format, modifiers);
165
+ const suffix = getFormatSuffix(entry, format);
166
+ return (prefix + entry.message.replaceAll("\n", suffix + "\n" + prefix) + suffix);
167
+ }
168
+ function AndroidLogEntryToString(format = LogcatFormat.ThreadTime, modifiers = {}) {
169
+ switch (format) {
170
+ case LogcatFormat.Long:
171
+ // prettier-ignore
172
+ return `[ ${formatTime(this.seconds, this.nanoseconds, modifiers)} ${formatUid(this.uid, modifiers, ":")}${this.pid.toString().padStart(5)}:${this.tid.toString().padStart(5)} ${AndroidLogPriorityToCharacter[this.priority]}/${this.tag.padEnd(8)} ]\n${this.message}\n`;
173
+ default:
174
+ return formatEntryWrapLine(this, format, modifiers);
175
+ }
176
+ }
177
+ function findTagEnd(payload) {
178
+ for (const separator of [0, " ".charCodeAt(0), ":".charCodeAt(0)]) {
179
+ const index = payload.indexOf(separator);
180
+ if (index !== -1) {
181
+ return index;
182
+ }
183
+ }
184
+ const index = payload.findIndex((x) => x >= 0x7f);
185
+ if (index !== -1) {
186
+ return index;
187
+ }
188
+ return payload.length;
189
+ }
190
+ export async function deserializeAndroidLogEntry(stream) {
191
+ const entry = (await LoggerEntry.deserialize(stream));
192
+ if (entry.headerSize !== LoggerEntry.size) {
193
+ // Skip unknown fields
194
+ await stream.readExactly(entry.headerSize - LoggerEntry.size);
195
+ }
196
+ let payload = await stream.readExactly(entry.payloadSize);
197
+ // https://cs.android.com/android/platform/superproject/+/master:system/logging/logcat/logcat.cpp;l=193-194;drc=bbe77d66e7bee8bd1f0bc7e5492b5376b0207ef6
198
+ // TODO: payload for some log IDs are in binary format.
199
+ entry.priority = payload[0];
200
+ payload = payload.subarray(1);
201
+ const tagEnd = findTagEnd(payload);
202
+ entry.tag = decodeUtf8(payload.subarray(0, tagEnd));
203
+ entry.message =
204
+ tagEnd < payload.length - 1
205
+ ? decodeUtf8(payload.subarray(tagEnd + 1))
206
+ : "";
207
+ entry.toString = AndroidLogEntryToString;
208
+ return entry;
209
+ }
210
+ export class Logcat extends AdbCommandBase {
211
+ static logIdToName(id) {
212
+ return LogId[id];
213
+ }
214
+ static logNameToId(name) {
215
+ const key = name[0].toUpperCase() + name.substring(1);
216
+ return LogId[key];
217
+ }
218
+ static joinLogId(ids) {
219
+ return ids.map((id) => Logcat.logIdToName(id)).join(",");
220
+ }
221
+ static parseSize(value, multiplier) {
222
+ const MULTIPLIERS = ["", "Ki", "Mi", "Gi"];
223
+ return value * 1024 ** (MULTIPLIERS.indexOf(multiplier) || 0);
224
+ }
225
+ // TODO: logcat: Support output format before Android 10
226
+ // ref https://android-review.googlesource.com/c/platform/system/core/+/748128
227
+ static LOG_SIZE_REGEX_10 = /(.*): ring buffer is (.*) (.*)B \((.*) (.*)B consumed\), max entry is (.*) B, max payload is (.*) B/;
228
+ // Android 11 added `readable` part
229
+ // ref https://android-review.googlesource.com/c/platform/system/core/+/1390940
230
+ static LOG_SIZE_REGEX_11 = /(.*): ring buffer is (.*) (.*)B \((.*) (.*)B consumed, (.*) (.*)B readable\), max entry is (.*) B, max payload is (.*) B/;
231
+ async getLogSize(ids) {
232
+ const { stdout } = await this.adb.subprocess.spawn([
233
+ "logcat",
234
+ "-g",
235
+ ...(ids ? ["-b", Logcat.joinLogId(ids)] : []),
236
+ ]);
237
+ const result = [];
238
+ await stdout
239
+ .pipeThrough(new TextDecoderStream())
240
+ .pipeThrough(new SplitStringStream("\n"))
241
+ .pipeTo(new WritableStream({
242
+ write(chunk) {
243
+ let match = chunk.match(Logcat.LOG_SIZE_REGEX_11);
244
+ if (match) {
245
+ result.push({
246
+ id: Logcat.logNameToId(match[1]),
247
+ size: Logcat.parseSize(Number.parseInt(match[2], 10), match[3]),
248
+ readable: Logcat.parseSize(Number.parseInt(match[6], 10), match[7]),
249
+ consumed: Logcat.parseSize(Number.parseInt(match[4], 10), match[5]),
250
+ maxEntrySize: parseInt(match[8], 10),
251
+ maxPayloadSize: parseInt(match[9], 10),
252
+ });
253
+ return;
254
+ }
255
+ match = chunk.match(Logcat.LOG_SIZE_REGEX_10);
256
+ if (match) {
257
+ result.push({
258
+ id: Logcat.logNameToId(match[1]),
259
+ size: Logcat.parseSize(Number.parseInt(match[2], 10), match[3]),
260
+ consumed: Logcat.parseSize(Number.parseInt(match[4], 10), match[5]),
261
+ maxEntrySize: parseInt(match[6], 10),
262
+ maxPayloadSize: parseInt(match[7], 10),
263
+ });
264
+ }
265
+ },
266
+ }));
267
+ return result;
268
+ }
269
+ async clear(ids) {
270
+ const args = ["logcat", "-c"];
271
+ if (ids && ids.length > 0) {
272
+ args.push("-b", Logcat.joinLogId(ids));
273
+ }
274
+ await this.adb.subprocess.spawnAndWait(args);
275
+ }
276
+ binary(options) {
277
+ return new WrapReadableStream(async () => {
278
+ const args = ["logcat", "-B"];
279
+ if (options?.dump) {
280
+ args.push("-d");
281
+ }
282
+ if (options?.pid) {
283
+ args.push("--pid", options.pid.toString());
284
+ }
285
+ if (options?.ids) {
286
+ args.push("-b", Logcat.joinLogId(options.ids));
287
+ }
288
+ // TODO: make `spawn` return synchronously with streams pending
289
+ // so it's easier to chain them.
290
+ const { stdout } = await this.adb.subprocess.spawn(args, {
291
+ // PERF: None protocol is 150% faster then Shell protocol
292
+ protocols: [AdbSubprocessNoneProtocol],
293
+ });
294
+ return stdout;
295
+ }).pipeThrough(new BufferedTransformStream((stream) => {
296
+ return deserializeAndroidLogEntry(stream);
297
+ }));
298
+ }
299
+ }
300
+ //# sourceMappingURL=logcat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logcat.js","sourceRoot":"","sources":["../src/logcat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { Adb } from "@yume-chan/adb";
2
+ import { AdbCommandBase } from "@yume-chan/adb";
3
+ export interface OverlayDisplayDeviceMode {
4
+ width: number;
5
+ height: number;
6
+ density: number;
7
+ }
8
+ export interface OverlayDisplayDevice {
9
+ modes: OverlayDisplayDeviceMode[];
10
+ secure: boolean;
11
+ ownContentOnly: boolean;
12
+ showSystemDecorations: boolean;
13
+ }
14
+ export declare class OverlayDisplay extends AdbCommandBase {
15
+ #private;
16
+ static readonly SETTING_KEY = "overlay_display_devices";
17
+ static readonly SETTING_FORMAT: import("./string-format.js").Format<{
18
+ readonly modes: {
19
+ readonly width: number;
20
+ readonly height: number;
21
+ readonly density: number;
22
+ }[];
23
+ readonly flags: ("secure" | "own_content_only" | "show_system_decorations")[];
24
+ }[]>;
25
+ constructor(adb: Adb);
26
+ get(): Promise<{
27
+ modes: {
28
+ readonly width: number;
29
+ readonly height: number;
30
+ readonly density: number;
31
+ }[];
32
+ secure: boolean;
33
+ ownContentOnly: boolean;
34
+ showSystemDecorations: boolean;
35
+ }[]>;
36
+ set(devices: OverlayDisplayDevice[]): Promise<void>;
37
+ }
38
+ //# sourceMappingURL=overlay-display.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlay-display.d.ts","sourceRoot":"","sources":["../src/overlay-display.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAKhD,MAAM,WAAW,wBAAwB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACjC,KAAK,EAAE,wBAAwB,EAAE,CAAC;IAClC,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;IACxB,qBAAqB,EAAE,OAAO,CAAC;CAClC;AAED,qBAAa,cAAe,SAAQ,cAAc;;IAG9C,MAAM,CAAC,QAAQ,CAAC,WAAW,6BAA6B;IAExD,MAAM,CAAC,QAAQ,CAAC,cAAc;;;;;;;SAmC5B;gBAEU,GAAG,EAAE,GAAG;IAKd,GAAG;;;;;;;;;;IAiBH,GAAG,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CA4B5D"}
@@ -0,0 +1,51 @@
1
+ import { AdbCommandBase } from "@yume-chan/adb";
2
+ import { Settings } from "./settings.js";
3
+ import { p } from "./string-format.js";
4
+ export class OverlayDisplay extends AdbCommandBase {
5
+ #settings;
6
+ static SETTING_KEY = "overlay_display_devices";
7
+ static SETTING_FORMAT = p.separated(";", p.sequence({
8
+ name: "modes",
9
+ format: p.separated("|", p.sequence({ name: "width", format: p.digits() }, p.literal("x"), { name: "height", format: p.digits() }, p.literal("/"), { name: "density", format: p.digits() }), { min: 1 }),
10
+ }, {
11
+ name: "flags",
12
+ format: p.map(p.repeated(p.sequence(p.literal(","), {
13
+ name: "flag",
14
+ format: p.union(p.literal("secure"), p.literal("own_content_only"), p.literal("show_system_decorations")),
15
+ })), (value) => value.map((item) => item.flag), (value) => value.map((item) => ({ flag: item }))),
16
+ }));
17
+ constructor(adb) {
18
+ super(adb);
19
+ this.#settings = new Settings(adb);
20
+ }
21
+ async get() {
22
+ return OverlayDisplay.SETTING_FORMAT.parse({
23
+ value: await this.#settings.get("global", OverlayDisplay.SETTING_KEY),
24
+ position: 0,
25
+ }).map((device) => ({
26
+ modes: device.modes,
27
+ secure: device.flags.includes("secure"),
28
+ ownContentOnly: device.flags.includes("own_content_only"),
29
+ showSystemDecorations: device.flags.includes("show_system_decorations"),
30
+ }));
31
+ }
32
+ async set(devices) {
33
+ await this.#settings.put("global", OverlayDisplay.SETTING_KEY, OverlayDisplay.SETTING_FORMAT.stringify(devices.map((device) => {
34
+ const flags = [];
35
+ if (device.secure) {
36
+ flags.push("secure");
37
+ }
38
+ if (device.ownContentOnly) {
39
+ flags.push("own_content_only");
40
+ }
41
+ if (device.showSystemDecorations) {
42
+ flags.push("show_system_decorations");
43
+ }
44
+ return {
45
+ modes: device.modes,
46
+ flags,
47
+ };
48
+ })));
49
+ }
50
+ }
51
+ //# sourceMappingURL=overlay-display.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlay-display.js","sourceRoot":"","sources":["../src/overlay-display.ts"],"names":[],"mappings":"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"}
package/esm/pm.d.ts ADDED
@@ -0,0 +1,211 @@
1
+ import type { Adb } from "@yume-chan/adb";
2
+ import { AdbCommandBase } from "@yume-chan/adb";
3
+ import type { MaybeConsumable, ReadableStream } from "@yume-chan/stream-extra";
4
+ import type { IntentBuilder } from "./intent.js";
5
+ import type { SingleUserOrAll } from "./utils.js";
6
+ export declare enum PackageManagerInstallLocation {
7
+ Auto = 0,
8
+ InternalOnly = 1,
9
+ PreferExternal = 2
10
+ }
11
+ export declare enum PackageManagerInstallReason {
12
+ Unknown = 0,
13
+ AdminPolicy = 1,
14
+ DeviceRestore = 2,
15
+ DeviceSetup = 3,
16
+ UserRequest = 4
17
+ }
18
+ export interface PackageManagerInstallOptions {
19
+ /**
20
+ * `-R`
21
+ */
22
+ skipExisting: boolean;
23
+ /**
24
+ * `-i`
25
+ */
26
+ installerPackageName: string;
27
+ /**
28
+ * `-t`
29
+ */
30
+ allowTest: boolean;
31
+ /**
32
+ * `-f`
33
+ */
34
+ internalStorage: boolean;
35
+ /**
36
+ * `-d`
37
+ */
38
+ requestDowngrade: boolean;
39
+ /**
40
+ * `-g`
41
+ */
42
+ grantRuntimePermissions: boolean;
43
+ /**
44
+ * `--restrict-permissions`
45
+ */
46
+ restrictPermissions: boolean;
47
+ /**
48
+ * `--dont-kill`
49
+ */
50
+ doNotKill: boolean;
51
+ /**
52
+ * `--originating-uri`
53
+ */
54
+ originatingUri: string;
55
+ /**
56
+ * `--referrer`
57
+ */
58
+ refererUri: string;
59
+ /**
60
+ * `-p`
61
+ */
62
+ inheritFrom: string;
63
+ /**
64
+ * `--pkg`
65
+ */
66
+ packageName: string;
67
+ /**
68
+ * `--abi`
69
+ */
70
+ abi: string;
71
+ /**
72
+ * `--ephemeral`/`--instant`/`--instantapp`
73
+ */
74
+ instantApp: boolean;
75
+ /**
76
+ * `--full`
77
+ */
78
+ full: boolean;
79
+ /**
80
+ * `--preload`
81
+ */
82
+ preload: boolean;
83
+ /**
84
+ * `--user`
85
+ */
86
+ user: SingleUserOrAll;
87
+ /**
88
+ * `--install-location`
89
+ */
90
+ installLocation: PackageManagerInstallLocation;
91
+ /**
92
+ * `--install-reason`
93
+ */
94
+ installReason: PackageManagerInstallReason;
95
+ /**
96
+ * `--force-uuid`
97
+ */
98
+ forceUuid: string;
99
+ /**
100
+ * `--apex`
101
+ */
102
+ apex: boolean;
103
+ /**
104
+ * `--force-non-staged`
105
+ */
106
+ forceNonStaged: boolean;
107
+ /**
108
+ * `--staged`
109
+ */
110
+ staged: boolean;
111
+ /**
112
+ * `--force-queryable`
113
+ */
114
+ forceQueryable: boolean;
115
+ /**
116
+ * `--enable-rollback`
117
+ */
118
+ enableRollback: boolean;
119
+ /**
120
+ * `--staged-ready-timeout`
121
+ */
122
+ stagedReadyTimeout: number;
123
+ /**
124
+ * `--skip-verification`
125
+ */
126
+ skipVerification: boolean;
127
+ /**
128
+ * `--bypass-low-target-sdk-block`
129
+ */
130
+ bypassLowTargetSdkBlock: boolean;
131
+ }
132
+ export declare const PACKAGE_MANAGER_INSTALL_OPTIONS_MAP: Record<keyof PackageManagerInstallOptions, string>;
133
+ export interface PackageManagerListPackagesOptions {
134
+ listDisabled: boolean;
135
+ listEnabled: boolean;
136
+ showSourceDir: boolean;
137
+ showInstaller: boolean;
138
+ listSystem: boolean;
139
+ showUid: boolean;
140
+ listThirdParty: boolean;
141
+ showVersionCode: boolean;
142
+ listApexOnly: boolean;
143
+ user: SingleUserOrAll;
144
+ uid: number;
145
+ filter: string;
146
+ }
147
+ export declare const PACKAGE_MANAGER_LIST_PACKAGES_OPTIONS_MAP: Record<keyof PackageManagerListPackagesOptions, string>;
148
+ export interface PackageManagerListPackagesResult {
149
+ packageName: string;
150
+ sourceDir?: string | undefined;
151
+ versionCode?: number | undefined;
152
+ installer?: string | undefined;
153
+ uid?: number | undefined;
154
+ }
155
+ export interface PackageManagerUninstallOptions {
156
+ keepData: boolean;
157
+ user: SingleUserOrAll;
158
+ versionCode: number;
159
+ /**
160
+ * Only remove the specified splits, not the entire app
161
+ *
162
+ * On Android 10 and lower, only one split name can be specified.
163
+ */
164
+ splitNames: string[];
165
+ }
166
+ export interface PackageManagerResolveActivityOptions {
167
+ user?: SingleUserOrAll;
168
+ intent: IntentBuilder;
169
+ }
170
+ export declare class PackageManager extends AdbCommandBase {
171
+ #private;
172
+ constructor(adb: Adb);
173
+ /**
174
+ * Install the apk file.
175
+ *
176
+ * @param apks Path to the apk file. It must exist on the device. On Android 10 and lower, only one apk can be specified.
177
+ */
178
+ install(apks: string[], options?: Partial<PackageManagerInstallOptions>): Promise<string>;
179
+ pushAndInstallStream(stream: ReadableStream<MaybeConsumable<Uint8Array>>, options?: Partial<PackageManagerInstallOptions>): Promise<void>;
180
+ installStream(size: number, stream: ReadableStream<MaybeConsumable<Uint8Array>>, options?: Partial<PackageManagerInstallOptions>): Promise<void>;
181
+ static parsePackageListItem(line: string): PackageManagerListPackagesResult;
182
+ listPackages(options?: Partial<PackageManagerListPackagesOptions>): AsyncGenerator<PackageManagerListPackagesResult, void, void>;
183
+ uninstall(packageName: string, options?: Partial<PackageManagerUninstallOptions>): Promise<void>;
184
+ resolveActivity(options: PackageManagerResolveActivityOptions): Promise<string | undefined>;
185
+ /**
186
+ * Creates a new install session.
187
+ *
188
+ * Install sessions are used to install apps with multiple splits, but it can also be used to install a single apk.
189
+ *
190
+ * Install sessions was added in Android 5.0 (API level 21).
191
+ *
192
+ * @param options Options for the install session
193
+ * @returns ID of the new install session
194
+ */
195
+ sessionCreate(options?: Partial<PackageManagerInstallOptions>): Promise<number>;
196
+ sessionAddSplit(sessionId: number, splitName: string, path: string): Promise<void>;
197
+ sessionAddSplitStream(sessionId: number, splitName: string, size: number, stream: ReadableStream<MaybeConsumable<Uint8Array>>): Promise<void>;
198
+ sessionCommit(sessionId: number): Promise<void>;
199
+ sessionAbandon(sessionId: number): Promise<void>;
200
+ }
201
+ export declare class PackageManagerInstallSession {
202
+ #private;
203
+ static create(packageManager: PackageManager, options?: Partial<PackageManagerInstallOptions>): Promise<PackageManagerInstallSession>;
204
+ get id(): number;
205
+ constructor(packageManager: PackageManager, id: number);
206
+ addSplit(splitName: string, path: string): Promise<void>;
207
+ addSplitStream(splitName: string, size: number, stream: ReadableStream<MaybeConsumable<Uint8Array>>): Promise<void>;
208
+ commit(): Promise<void>;
209
+ abandon(): Promise<void>;
210
+ }
211
+ //# sourceMappingURL=pm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pm.d.ts","sourceRoot":"","sources":["../src/pm.ts"],"names":[],"mappings":"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"}