UNPKG

droideer

Version:

The Puppeteer for Android - Control Android devices with familiar web automation syntax

378 lines (365 loc) 8.23 kB
import { AndroidDevice } from './Device.js'; import { ADB } from './utils/adb.js'; import { Page } from './Page.js'; import { AndroidElement } from './Element.js'; import { Gestures } from './Gestures.js'; import { Selector } from './Selector.js'; /** * Droideer - Android Automation Library * A Puppeteer-like automation library for Android devices */ export class Droideer { // Add this line to your class static VERSION = '0.1.0'; /** * Connect to an Android device * @param {string|null} deviceId - Specific device ID or null for default * @returns {Promise<AndroidDevice>} Connected device instance */ static async connect(deviceId = null) { return AndroidDevice.connect(deviceId); } /** * Launch an app and return a device instance * @param {Object} options - Launch options * @param {string} options.app - Package name of the app to launch * @param {string} options.deviceId - Device ID (optional) * @param {number} options.timeout - Launch timeout in ms (optional) * @returns {Promise<AndroidDevice>} Device instance with app launched */ static async launch(options = {}) { const device = await AndroidDevice.connect(options.deviceId); if (options.app) { await device.launch(options.app); } return device; } /** * Get a new page instance for an already connected device * @param {string|null} deviceId - Device ID or null for default * @returns {Promise<Page>} Page instance */ static async newPage(deviceId = null) { const device = await AndroidDevice.connect(deviceId); return device.page; } /** * List all connected Android devices * @returns {Promise<Array>} Array of device information */ static async devices() { const adb = new ADB(); return adb.getDevices(); } /** * Check if ADB is available and working * @returns {Promise<boolean>} True if ADB is available */ static async checkADB() { try { const adb = new ADB(); await adb.execute('version'); return true; } catch (error) { return false; } } /** * Get version information * @returns {Object} Version information */ static version() { return { droideer: '0.1.0', description: 'Android automation library with Puppeteer-like API' }; } // Add this: Simple version property for easy access static get versionString() { return '1.0.0'; } // Or even simpler: static property static VERSION = '1.0.0'; } // Key codes constants for easy reference export const KeyCodes = { UNKNOWN: 0, SOFT_LEFT: 1, SOFT_RIGHT: 2, HOME: 3, BACK: 4, CALL: 5, ENDCALL: 6, CLEAR: 28, A: 29, B: 30, C: 31, D: 32, E: 33, F: 34, G: 35, H: 36, I: 37, J: 38, K: 39, L: 40, M: 41, N: 42, O: 43, P: 44, Q: 45, R: 46, S: 47, T: 48, U: 49, V: 50, W: 51, X: 52, Y: 53, Z: 54, COMMA: 55, PERIOD: 56, ALT_LEFT: 57, ALT_RIGHT: 58, SHIFT_LEFT: 59, SHIFT_RIGHT: 60, TAB: 61, SPACE: 62, SYM: 63, EXPLORER: 64, ENVELOPE: 65, ENTER: 66, DEL: 67, GRAVE: 68, MINUS: 69, EQUALS: 70, LEFT_BRACKET: 71, RIGHT_BRACKET: 72, BACKSLASH: 73, SEMICOLON: 74, APOSTROPHE: 75, SLASH: 76, AT: 77, NUM: 78, HEADSETHOOK: 79, FOCUS: 80, PLUS: 81, MENU: 82, NOTIFICATION: 83, SEARCH: 84, MEDIA_PLAY_PAUSE: 85, MEDIA_STOP: 86, MEDIA_NEXT: 87, MEDIA_PREVIOUS: 88, MEDIA_REWIND: 89, MEDIA_FAST_FORWARD: 90, MUTE: 91, PAGE_UP: 92, PAGE_DOWN: 93, PICTSYMBOLS: 94, SWITCH_CHARSET: 95, BUTTON_A: 96, BUTTON_B: 97, BUTTON_C: 98, BUTTON_X: 99, BUTTON_Y: 100, BUTTON_Z: 101, BUTTON_L1: 102, BUTTON_R1: 103, BUTTON_L2: 104, BUTTON_R2: 105, BUTTON_THUMBL: 106, BUTTON_THUMBR: 107, BUTTON_START: 108, BUTTON_SELECT: 109, BUTTON_MODE: 110, ESCAPE: 111, FORWARD_DEL: 112, CTRL_LEFT: 113, CTRL_RIGHT: 114, CAPS_LOCK: 115, SCROLL_LOCK: 116, META_LEFT: 117, META_RIGHT: 118, FUNCTION: 119, SYSRQ: 120, BREAK: 121, MOVE_HOME: 122, MOVE_END: 123, INSERT: 124, FORWARD: 125, MEDIA_PLAY: 126, MEDIA_PAUSE: 127, MEDIA_CLOSE: 128, MEDIA_EJECT: 129, MEDIA_RECORD: 130, F1: 131, F2: 132, F3: 133, F4: 134, F5: 135, F6: 136, F7: 137, F8: 138, F9: 139, F10: 140, F11: 141, F12: 142, NUM_LOCK: 143, NUMPAD_0: 144, NUMPAD_1: 145, NUMPAD_2: 146, NUMPAD_3: 147, NUMPAD_4: 148, NUMPAD_5: 149, NUMPAD_6: 150, NUMPAD_7: 151, NUMPAD_8: 152, NUMPAD_9: 153, NUMPAD_DIVIDE: 154, NUMPAD_MULTIPLY: 155, NUMPAD_SUBTRACT: 156, NUMPAD_ADD: 157, NUMPAD_DOT: 158, NUMPAD_COMMA: 159, NUMPAD_ENTER: 160, NUMPAD_EQUALS: 161, NUMPAD_LEFT_PAREN: 162, NUMPAD_RIGHT_PAREN: 163, VOLUME_MUTE: 164, INFO: 165, CHANNEL_UP: 166, CHANNEL_DOWN: 167, ZOOM_IN: 168, ZOOM_OUT: 169, TV: 170, WINDOW: 171, GUIDE: 172, DVR: 173, BOOKMARK: 174, CAPTIONS: 175, SETTINGS: 176, TV_POWER: 177, TV_INPUT: 178, STB_POWER: 179, STB_INPUT: 180, AVR_POWER: 181, AVR_INPUT: 182, PROG_RED: 183, PROG_GREEN: 184, PROG_YELLOW: 185, PROG_BLUE: 186, APP_SWITCH: 187, BUTTON_1: 188, BUTTON_2: 189, BUTTON_3: 190, BUTTON_4: 191, BUTTON_5: 192, BUTTON_6: 193, BUTTON_7: 194, BUTTON_8: 195, BUTTON_9: 196, BUTTON_10: 197, BUTTON_11: 198, BUTTON_12: 199, BUTTON_13: 200, BUTTON_14: 201, BUTTON_15: 202, BUTTON_16: 203, LANGUAGE_SWITCH: 204, MANNER_MODE: 205, THREE_D_MODE: 206, CONTACTS: 207, CALENDAR: 208, MUSIC: 209, CALCULATOR: 210, ZENKAKU_HANKAKU: 211, EISU: 212, MUHENKAN: 213, HENKAN: 214, KATAKANA_HIRAGANA: 215, YEN: 216, RO: 217, KANA: 218, ASSIST: 219, BRIGHTNESS_DOWN: 220, BRIGHTNESS_UP: 221, MEDIA_AUDIO_TRACK: 222, SLEEP: 223, WAKEUP: 224, PAIRING: 225, MEDIA_TOP_MENU: 226, 11: 227, 12: 228, LAST_CHANNEL: 229, TV_DATA_SERVICE: 230, VOICE_ASSIST: 231, TV_RADIO_SERVICE: 232, TV_TELETEXT: 233, TV_NUMBER_ENTRY: 234, TV_TERRESTRIAL_ANALOG: 235, TV_TERRESTRIAL_DIGITAL: 236, TV_SATELLITE: 237, TV_SATELLITE_BS: 238, TV_SATELLITE_CS: 239, TV_SATELLITE_SERVICE: 240, TV_NETWORK: 241, TV_ANTENNA_CABLE: 242, TV_INPUT_HDMI_1: 243, TV_INPUT_HDMI_2: 244, TV_INPUT_HDMI_3: 245, TV_INPUT_HDMI_4: 246, TV_INPUT_COMPOSITE_1: 247, TV_INPUT_COMPOSITE_2: 248, TV_INPUT_COMPONENT_1: 249, TV_INPUT_COMPONENT_2: 250, TV_INPUT_VGA_1: 251, TV_AUDIO_DESCRIPTION: 252, TV_AUDIO_DESCRIPTION_MIX_UP: 253, TV_AUDIO_DESCRIPTION_MIX_DOWN: 254, TV_ZOOM_MODE: 255, TV_CONTENTS_MENU: 256, TV_MEDIA_CONTEXT_MENU: 257, TV_TIMER_PROGRAMMING: 258, HELP: 259, NAVIGATE_PREVIOUS: 260, NAVIGATE_NEXT: 261, NAVIGATE_IN: 262, NAVIGATE_OUT: 263, STEM_PRIMARY: 264, STEM_1: 265, STEM_2: 266, STEM_3: 267, DPAD_UP_LEFT: 268, DPAD_DOWN_LEFT: 269, DPAD_UP_RIGHT: 270, DPAD_DOWN_RIGHT: 271, MEDIA_SKIP_FORWARD: 272, MEDIA_SKIP_BACKWARD: 273, MEDIA_STEP_FORWARD: 274, MEDIA_STEP_BACKWARD: 275, SOFT_SLEEP: 276, CUT: 277, COPY: 278, PASTE: 279, SYSTEM_NAVIGATION_UP: 280, SYSTEM_NAVIGATION_DOWN: 281, SYSTEM_NAVIGATION_LEFT: 282, SYSTEM_NAVIGATION_RIGHT: 283, ALL_APPS: 284, REFRESH: 285, THUMBS_UP: 286, THUMBS_DOWN: 287, PROFILE_SWITCH: 288 }; // Export all classes for individual use export { AndroidDevice, ADB, Page, AndroidElement, Gestures, Selector }; // Default export export default Droideer;