Node module for managing and controlling the Android Devices.
English | 简体中文
npm i @wtto00/android-tools
import 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
, andarch
will be ignored. If you don't pass apackage
, theapiLevel
parameter 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. |