Node module for managing and controlling the Android Devices.
English | 简体中文
npm i @wtto00/android-toolsimport Android from '@wtto00/android-tools';
const options = {
// adb: "platform-tools/adb",
// avdmanager: "cmdline-tools/bin/avdmanager",
// sdkmanager: "cmdline-tools/bin/sdkmanager",
// emulator: "emulator/emulator",
};
const android = new Android(options);Andorid Options
| field | type | required | default | note |
|---|---|---|---|---|
| adb | string | false | ${process.env.ANDROID_HOME}/platform-tools/adb or adb in PATH |
The location of the adb executable file relative to ANDROID_HOME |
| avdmanager | string | false | ${process.env.ANDROID_HOME}/cmdline-tools/bin/avdmanager or avdmanager in PATH |
The location of the avdmanager executable file relative to ANDROID_HOME |
| sdkmanager | string | false | ${process.env.ANDROID_HOME}/cmdline-tools/bin/sdkmanager or sdkmanager in PATH |
The location of the sdkmanager executable file relative to ANDROID_HOME |
| emulator | string | false | ${process.env.ANDROID_HOME}/emulator/emulator or emulator in PATH |
The location of the emulator executable file relative to ANDROID_HOME |
Start the emulator using the AVD supplied through with avdName.
android
.start({
avd: 'android-avd-name',
verbose: true
// ...
})
.then((res) => {
console.log(`emulatorId: ${res.id}`);
})
.catch((err) => {
console.log(err);
});| field | type | required | default | note |
|---|---|---|---|---|
| avd | string | true | - | use a specific android virtual device |
| verbose | boolean | true | - | enable specific debug messages |
| noWindow | boolean | false | - | disable graphical window display |
| noSnapshot | boolean | false | - | perform a full boot and do not auto-save, but qemu vmload and vmsave operate on snapstorage |
| noSnapstorage | boolean | false | - | do not mount a snapshot storage file (this disables all snapshot functionality) |
| noSnapshotUpdateTime | boolean | false | - | do not try to correct snapshot time on restore |
| noSnapshotSave | boolean | false | - | do not auto-save to snapshot on exit: abandon changed state |
| noSnapshotLoad | boolean | false | - | do not auto-start from snapshot: perform a full boot |
| cameraBack | "emulated" "virtualscene" "videoplayback" "none" "webcam" |
false | - | set emulation mode for a camera facing back |
| cameraFront | 'emulated' 'webcam' 'none' |
false | - | set emulation mode for a camera facing front |
| gpu | 'auto' 'auto-no-window' 'host' 'swiftshader_indirect' 'angle_indirect' 'guest' |
false | 'auto' | set hardware OpenGLES emulation mode |
| nocache | boolean | false | - | disable the cache partition |
| noaudio | boolean | false | - | disable audio support |
| noBootAnim | boolean | false | - | disable animation for faster boot |
| lowram | boolean | false | - | device is a low ram device |
| restartWhenStalled | boolean | false | - | Allows restarting guest when it is stalled. |
| waitForDebugger | boolean | false | - | Pause on launch and wait for a debugger process to attach before resuming |
| httpProxy | string | false | - | make TCP connections through a HTTP/HTTPS proxy |
| cores | number | false | - | Set number of CPU cores to emulator |
| wipeData | boolean | false | - | reset the user data image (copy it from initdata) |
| noPassiveGps | boolean | false | - | disable passive gps updates |
Waiting for the simulator device to become available.
android
.waitForDevice('emulator-id')
.then(() => {
console.log('available');
})
.catch((err) => {
console.log(err);
});| field | type | required | default | note |
|---|---|---|---|---|
| emulatorId | string | true | - | ID of emulator device |
Ensure device has been started and ready.
android
.ensureReady('emulator-id')
.then(() => {
console.log('ready');
})
.catch((err) => {
console.log(err);
});| field | type | required | default | note |
|---|---|---|---|---|
| emulatorId | string | true | - | ID of emulator device |
Create a AVD based upon image.
android
.createAVD({
name: avdName,
package: 'android-image-name',
force: false
})
.then(() => {
console.log('has been created');
})
.catch((err) => {
console.log(err);
});| field | type | required | default | note |
|---|---|---|---|---|
| apiLevel | number | false | - | API level of the platform system image - e.g. 23 for Android Marshmallow, 29 for Android 10. |
| target | 'default' 'google_apis' 'playstore' 'android-wear' 'android-wear-cn' 'android-tv' 'google-tv' 'aosp_atd ' 'google_atd' |
false | 'default' | Target of the system image . |
| arch | 'x86_64' 'x86' 'arm64-v8a' 'armeabi-v7a' |
false | Current system CPU architecture | CPU architecture of the system image |
| package | string | false | - | Package path of the system image for this AVD (e.g. 'system-images;android-19;google_apis;x86'). |
| name | string | false | - | Name of the new AVD. |
| force | boolean | false | - | Forces creation (overwrites an existing AVD) |
- If you pass a
package, the parametersapiLevel,target, andarchwill be ignored. If you don't pass apackage, theapiLevelparameter is required.
Check if a specific AVD has been created on this machine.
android
.hasAVD('android-avd-name')
.then((res) => {
console.log(res ? 'has been created' : 'not exist');
})
.catch((err) => {
console.log(err);
});| field | type | required | default | note |
|---|---|---|---|---|
| emulatorId | string | true | - | Name of AVD |
Stop a certain emulator.
android
.stop('emulator-id')
.then(() => {
console.log('has sent stop command');
})
.catch((err) => {
console.log(err);
});| field | type | required | default | note |
|---|---|---|---|---|
| emulatorId | string | true | - | ID of emulator device |
Wait until the device is stopped.
android
.waitForStop('emulator-id')
.then(() => {
console.log('has been stopped');
})
.catch((err) => {
console.log(err);
});| field | type | required | default | note |
|---|---|---|---|---|
| emulatorId | string | true | - | ID of emulator device |
Check the package specified with packageName is installed or not.
android
.isInstalled('emulator-id', 'com.android.webview')
.then((res) => {
console.log(res ? 'installed' : 'not installed');
})
.catch((err) => {
console.log(err);
});| field | type | required | default | note |
|---|---|---|---|---|
| emulatorId | string | true | - | ID of emulator device |
| packageName | string | true | - | Package name of App |
Install an APK located by absolute URI apkPath onto device with emulatorId.
android
.install('emulator-id', '/path/to/apk', { r: true })
.then(() => {
console.log('installed');
})
.catch((err) => {
console.log(err);
});| field | type | required | default | note |
|---|---|---|---|---|
| emulatorId | string | true | - | ID of emulator device |
| apkPath | string | true | - | Absolute path of apk file |
| options | object | false | - | The parameters for "adb install": -lrtsdg |
adb shell input keyevent.
android
.inputKeyEvent('emulator-id', 82)
.then(() => {
console.log('has send key');
})
.catch((err) => {
console.log(err);
});| field | type | required | default | note |
|---|---|---|---|---|
| emulatorId | string | true | - | ID of emulator device |
| key | number | true | - | key number,seeAndroid Document |
List connected devices
android
.devices()
.then((res) => {
res.forEach((item) => {
console.log(`name: ${item.name}, status: ${item.status}`);
});
})
.catch((err) => {
console.log(err);
});List packages installed on the emulator with emulatorId.
android
.listPackages('emulator-id')
.then((res) => {
res.forEach((item) => {
console.log(item);
});
})
.catch((err) => {
console.log(err);
});| field | type | required | default | note |
|---|---|---|---|---|
| emulatorId | string | true | - | ID of emulator device |
List the available device list for creating emulators in the current system.
android
.listDevices()
.then((res) => {
res.forEach((item) => {
console.log(`id: ${item.id}, Name: ${item.Name}, OEM: ${item.OEM}, Tag: ${item.Tag}`);
});
})
.catch((err) => {
console.log(err);
});List all AVDs created on this machine.
android
.listAVDs()
.then((res) => {
res.forEach((item) => {
console.log(`Name: ${item.Name}, Path: ${item.Path}, Target: ${item.Target}, Sdcard: ${item.Sdcard}`);
});
})
.catch((err) => {
console.log(err);
});List available Android targets.
android
.listTargets()
.then((res) => {
res.forEach((item) => {
console.log(`id: ${item.id}, Name: ${item.Name}, Type: ${item.Type}, API level: ${item['API level']}`);
});
})
.catch((err) => {
console.log(err);
});List available android images on this machine.
android
.listImages()
.then((res) => {
res.forEach((item) => {
console.log(
`name: ${item.name}, type: ${item.type}, sdk: ${item.sdk}, target: ${item.target}, arch: ${item.arch}`
);
});
})
.catch((err) => {
console.log(err);
});List installed android images on this machine.
android
.listInstalledImages()
.then((res) => {
res.forEach((item) => {
console.log(
`name: ${item.name}, type: ${item.type}, sdk: ${item.sdk}, target: ${item.target}, arch: ${item.arch}`
);
});
})
.catch((err) => {
console.log(err);
});Use adb to execute commands.
android
.adb('emulator-id', 'shell pm list packages')
.then((res) => {
console.log(res.output);
})
.catch((err) => {
console.log(err);
});| field | type | required | default | note |
|---|---|---|---|---|
| cmd | string | true | - | The command to be executed. |
Use avdmanager to execute commands.
android
.avdmanager('list avd')
.then((res) => {
console.log(res.output);
})
.catch((err) => {
console.log(err);
});| field | type | required | default | note |
|---|---|---|---|---|
| cmd | string | true | - | The command to be executed. |
Use sdkmanager to execute commands.
android
.sdkmanager('--list')
.then((res) => {
console.log(res.output);
})
.catch((err) => {
console.log(err);
});| field | type | required | default | note |
|---|---|---|---|---|
| cmd | string | true | - | The command to be executed. |
Use emulator to execute commands.
android
.emulator('--help')
.then((res) => {
console.log(res.output);
})
.catch((err) => {
console.log(err);
});| field | type | required | default | note |
|---|---|---|---|---|
| cmd | string | true | - | The command to be executed. |