@skrillex1224/android-toolkit 1.0.3 → 1.0.6
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/README.md +7 -8
- package/browser.d.ts +12 -0
- package/dist/browser.js +21 -4
- package/dist/browser.js.map +3 -3
- package/dist/index.cjs +376 -370
- package/dist/index.cjs.map +4 -4
- package/dist/index.js +375 -369
- package/dist/index.js.map +4 -4
- package/index.d.ts +11 -7
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -16,7 +16,7 @@ await Launch.run(async ({ ctx, kit }) => {
|
|
|
16
16
|
await ApifyKit.runStep('输入并发送', ctx, async () => {
|
|
17
17
|
await DeviceInput.click(ctx, { id: 'input_text' });
|
|
18
18
|
await DeviceInput.fill(ctx, { id: 'input_text' }, ctx.query);
|
|
19
|
-
await DeviceInput.
|
|
19
|
+
await DeviceInput.click(ctx, { id: 'action_send' });
|
|
20
20
|
});
|
|
21
21
|
await Mutation.waitForStable(ctx, { id: 'message_list' });
|
|
22
22
|
const screenshotBase64 = await Share.captureScreen(ctx);
|
|
@@ -35,7 +35,7 @@ await Launch.run(async ({ ctx, kit }) => {
|
|
|
35
35
|
| `DeviceInput` | View-tree-backed click/fill/press/scroll APIs using ADB input. |
|
|
36
36
|
| `Mutation` | Playwright-like stable wait semantics over matched ViewNode subtrees. |
|
|
37
37
|
| `Share` | Sprite screenshot and clipboard share-link polling. |
|
|
38
|
-
| `
|
|
38
|
+
| `DeviceSQLite` | Root ADB-backed private SQLite snapshot queries. |
|
|
39
39
|
| `Constants` | Native-useful actor metadata and codes. |
|
|
40
40
|
| `Errors` | `CrawlerError` and error serialization. |
|
|
41
41
|
|
|
@@ -46,9 +46,8 @@ The toolkit does not install or discover runtime tools.
|
|
|
46
46
|
Required environment:
|
|
47
47
|
|
|
48
48
|
- `ANDROID_TOOLKIT_ADB_PATH`
|
|
49
|
-
- `ANDROID_TOOLKIT_FRIDA_PATH`
|
|
50
49
|
|
|
51
|
-
Device initialization, Appium Settings, UnicodeIME, and
|
|
50
|
+
Device initialization, Appium Settings, UnicodeIME, and root ADB access belong
|
|
52
51
|
to manager/cluster runtime. Runtime checks fail clearly when prerequisites are missing.
|
|
53
52
|
|
|
54
53
|
## Boundaries
|
|
@@ -58,14 +57,14 @@ Included:
|
|
|
58
57
|
- ADB command execution, app launch, key input, screenshot, activity checks.
|
|
59
58
|
- View-tree parsing with a real XML parser.
|
|
60
59
|
- View selector operations: `id`, `text`, `textContains`, `contentDesc`.
|
|
61
|
-
-
|
|
62
|
-
SQLite queries or clipboard probing inside `Share`.
|
|
60
|
+
- Root ADB-backed SQLite queries through `DeviceSQLite.query()` only.
|
|
63
61
|
|
|
64
62
|
Excluded:
|
|
65
63
|
|
|
66
|
-
- Public generic
|
|
64
|
+
- Public generic process injection or app hook execution.
|
|
65
|
+
- App hook clipboard helpers.
|
|
67
66
|
- WebView event recorder.
|
|
68
|
-
-
|
|
67
|
+
- App hook UI traversal/click helpers.
|
|
69
68
|
- Package name and activity truth. Backend/runtime input owns those values.
|
|
70
69
|
- Actor-specific DB schemas, message parsing, product parsing, and success criteria.
|
|
71
70
|
|
package/browser.d.ts
CHANGED
|
@@ -29,3 +29,15 @@ export namespace Errors {
|
|
|
29
29
|
}): CrawlerError;
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
|
+
|
|
33
|
+
export interface BrowserAndroidToolkit {
|
|
34
|
+
Constants: typeof Constants;
|
|
35
|
+
Errors: typeof Errors;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export function useAndroidToolKit(): BrowserAndroidToolkit;
|
|
39
|
+
export namespace useAndroidToolKit {
|
|
40
|
+
const Mode: {
|
|
41
|
+
default: 'default';
|
|
42
|
+
};
|
|
43
|
+
}
|
package/dist/browser.js
CHANGED
|
@@ -8,6 +8,7 @@ var __export = (target, all) => {
|
|
|
8
8
|
var constants_exports = {};
|
|
9
9
|
__export(constants_exports, {
|
|
10
10
|
ActorInfo: () => ActorInfo,
|
|
11
|
+
AppiumSettings: () => AppiumSettings,
|
|
11
12
|
Code: () => Code,
|
|
12
13
|
Status: () => Status,
|
|
13
14
|
UnicodeIme: () => UnicodeIme
|
|
@@ -24,7 +25,7 @@ var Code = Object.freeze({
|
|
|
24
25
|
ContentUnavailable: 30010003,
|
|
25
26
|
SourceExtractionFailed: 30010004,
|
|
26
27
|
AutomationFailed: 30010005,
|
|
27
|
-
|
|
28
|
+
DataAccessUnavailable: 30010008,
|
|
28
29
|
AppNotInstalled: 30010009
|
|
29
30
|
});
|
|
30
31
|
var Status = Object.freeze({
|
|
@@ -34,7 +35,12 @@ var Status = Object.freeze({
|
|
|
34
35
|
var UnicodeIme = Object.freeze({
|
|
35
36
|
packageName: "io.appium.settings",
|
|
36
37
|
component: "io.appium.settings/.UnicodeIME",
|
|
37
|
-
|
|
38
|
+
inputAction: "ADB_INPUT_TEXT"
|
|
39
|
+
});
|
|
40
|
+
var AppiumSettings = Object.freeze({
|
|
41
|
+
packageName: "io.appium.settings",
|
|
42
|
+
clipboardReceiver: "io.appium.settings/.receivers.ClipboardReceiver",
|
|
43
|
+
clipboardGetAction: "io.appium.settings.clipboard.get"
|
|
38
44
|
});
|
|
39
45
|
var normalizeShare = (share) => {
|
|
40
46
|
const source = share && typeof share === "object" ? share : {};
|
|
@@ -100,8 +106,19 @@ function serializeError(error) {
|
|
|
100
106
|
context: error.context || void 0
|
|
101
107
|
};
|
|
102
108
|
}
|
|
109
|
+
|
|
110
|
+
// entrys/browser.js
|
|
111
|
+
var ToolkitMode = Object.freeze({
|
|
112
|
+
default: "default"
|
|
113
|
+
});
|
|
114
|
+
var useAndroidToolKit = () => {
|
|
115
|
+
return {
|
|
116
|
+
Constants: constants_exports,
|
|
117
|
+
Errors: errors_exports
|
|
118
|
+
};
|
|
119
|
+
};
|
|
120
|
+
useAndroidToolKit.Mode = ToolkitMode;
|
|
103
121
|
export {
|
|
104
|
-
|
|
105
|
-
errors_exports as Errors
|
|
122
|
+
useAndroidToolKit
|
|
106
123
|
};
|
|
107
124
|
//# sourceMappingURL=browser.js.map
|
package/dist/browser.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/constants.js", "../src/errors.js"],
|
|
4
|
-
"sourcesContent": ["export const Code = Object.freeze({\n Success: 0,\n UnknownError: -1,\n NotLogin: 30000001,\n Timeout: 30000003,\n InitialTimeout: 30000004,\n OverallTimeout: 30000005,\n InvalidRequest: 30010001,\n AdbUnavailable: 30010002,\n ContentUnavailable: 30010003,\n SourceExtractionFailed: 30010004,\n AutomationFailed: 30010005,\n
|
|
5
|
-
"mappings": ";;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,IAAM,OAAO,OAAO,OAAO;AAAA,EAC9B,SAAS;AAAA,EACT,cAAc;AAAA,EACd,UAAU;AAAA,EACV,SAAS;AAAA,EACT,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,oBAAoB;AAAA,EACpB,wBAAwB;AAAA,EACxB,kBAAkB;AAAA,EAClB,
|
|
3
|
+
"sources": ["../src/constants.js", "../src/errors.js", "../entrys/browser.js"],
|
|
4
|
+
"sourcesContent": ["export const Code = Object.freeze({\n Success: 0,\n UnknownError: -1,\n NotLogin: 30000001,\n Timeout: 30000003,\n InitialTimeout: 30000004,\n OverallTimeout: 30000005,\n InvalidRequest: 30010001,\n AdbUnavailable: 30010002,\n ContentUnavailable: 30010003,\n SourceExtractionFailed: 30010004,\n AutomationFailed: 30010005,\n DataAccessUnavailable: 30010008,\n AppNotInstalled: 30010009,\n});\n\nexport const Status = Object.freeze({\n Success: 'SUCCESS',\n Failed: 'FAILED',\n});\n\nexport const UnicodeIme = Object.freeze({\n packageName: 'io.appium.settings',\n component: 'io.appium.settings/.UnicodeIME',\n inputAction: 'ADB_INPUT_TEXT',\n});\n\nexport const AppiumSettings = Object.freeze({\n packageName: 'io.appium.settings',\n clipboardReceiver: 'io.appium.settings/.receivers.ClipboardReceiver',\n clipboardGetAction: 'io.appium.settings.clipboard.get',\n});\n\nconst normalizeShare = (share) => {\n const source = share && typeof share === 'object' ? share : {};\n return {\n mode: 'clipboard',\n prefix: String(source.prefix || '').trim(),\n xurl: Array.isArray(source.xurl) ? source.xurl : [],\n };\n};\n\nconst createActorInfo = (info) => {\n const key = String(info.key || '').trim();\n return Object.freeze({\n key,\n name: String(info.name || key),\n icon: String(info.icon || `https://static.heartbitai.com/general/actors/${key}.png`),\n share: Object.freeze(normalizeShare(info.share)),\n });\n};\n\nexport const ActorInfo = Object.freeze({\n 'doubao.android': createActorInfo({\n key: 'doubao.android',\n name: '\u8C46\u5305 Android',\n share: {\n prefix: 'https://www.doubao.com/thread/',\n xurl: [],\n },\n }),\n});\n", "import { Code } from './constants.js';\n\nexport class CrawlerError extends Error {\n constructor(input = {}, options = {}) {\n const payload = typeof input === 'string' ? { message: input } : input;\n super(payload.message || 'Android crawler error', options);\n this.name = 'CrawlerError';\n this.code = payload.code || Code.UnknownError;\n this.context = payload.context || {};\n }\n\n static isCrawlerError(error) {\n return error instanceof CrawlerError || error?.name === 'CrawlerError';\n }\n\n static from(error, fallback = {}) {\n if (CrawlerError.isCrawlerError(error)) return error;\n return new CrawlerError({\n message: error?.message || String(error),\n code: fallback.code || Code.UnknownError,\n context: fallback.context || {},\n });\n }\n}\n\nexport function serializeError(error) {\n if (!error) return { message: '' };\n return {\n name: error.name || 'Error',\n message: error.message || String(error),\n stack: error.stack || '',\n code: error.code || '',\n context: error.context || undefined,\n };\n}\n", "import * as Constants from '../src/constants.js';\nimport * as Errors from '../src/errors.js';\n\nconst ToolkitMode = Object.freeze({\n default: 'default',\n});\n\nexport const useAndroidToolKit = () => {\n return {\n Constants,\n Errors,\n };\n};\n\nuseAndroidToolKit.Mode = ToolkitMode;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|