Device Window
Getting started.
The device window is where you work with a connected phone or emulator: it shows the device screen, you can click and swipe on it with the mouse, and with Recording on everything you do is added to the project as actions.
Working with MEmu, LDPlayer and MuMu emulators in ZennoDroid Pro and Lite is described in Device Window (Emulators).
Before the device is started, the window looks like this:
The device window before the start.
To get started, click Run device. If the project's Recording is on, two actions are added to the canvas: Select device and Run/restart device.
If the device fails to start, the reason appears under the button. Fix it and click the button again.
Window components.
This is the window you see once the device has started:
The window of a running device.

You can work with the screen directly: click, swipe, open apps — everything is passed on to the device. And if recording is on, your actions are also added to the canvas as the matching actions.
Control buttons.
| Button | Description |
|---|---|
| Back | Go to the previous screen. |
| Home | Return to the home screen. |
| Recent applications | Open the list of recent apps. |
| Refresh screen | Refresh the screen picture. The button is shown only while the picture is refreshed by hand: the Manually capture method is chosen, or the phone was started with Safe start → Manual refresh. |
| Actions (three dots) | Open the actions menu. |
The Cover part of image, Zoom in, Zoom out and Mouse movements record buttons have moved to the actions menu, under Other actions.
Current device.
A button with the name of the current device. Clicking it opens the Device Manager, where you can pick another device.
Proxy.
The button shows the proxy set on the device, or Without proxy. Clicking it opens the Set proxy window:
- Proxy address — the proxy string, for example
255.255.255.255:8080orprotocol://login:pass@IP:port. - Proxy type — the proxying method: Default (as set in the settings), Proxifier, Redsocks or Clash.
- Use the computer's Internet connection — route the phone's traffic through the computer (more). The checkbox is there for Redsocks and Clash only.
The OK button applies the proxy to the device.
Mouse coordinates.
While the cursor is over the device screen, its current coordinates (X, Y) are shown here.
You can use them in the Swipe Emulation and Touch Emulation actions.
Actions menu.
The Actions button with three dots opens a menu of frequently used device actions:

Items with a red dot on their icon are recorded into the project: if Recording is on, the action you perform is added to the canvas as the matching action. What exactly is added is shown in the table below.
Most items are available only while the device is running. Unlock the screen, Clear logcat, Run diagnostics... and Run command... also work with a device that is not started, as long as it is reachable over adb.
The menu's windows open one at a time: while one of them is open, the Actions button is unavailable. The device screen keeps working meanwhile.
Apps.
- Install APK... — opens the app installation window.
- Close all apps — removes every app from the recent apps.
The items under the Active app header work with the app open on the screen:
- Clear data — clears the app's data. ZennoDroid asks for confirmation first.
- Clear cache — clears only the app's cache.
- Close — closes the app.
- Uninstall — removes the app from the device, also after a confirmation.
- Back up... — saves the app's data to a file.
- Restore from a backup... — restores the app's data from a backup file.
- Get APK... — saves the app's APK to the computer: more.
- Info... — shows the app's ID, name and version.
Installing an APK.
- APK file — the app file on the computer:
.apk,.apks,.apkmor.xapk. - Cache — keep the file on the device: installing the same APK again won't copy it over again.
- With superuser privileges — install as root.
Backup and restore.
Both windows work with the app open on the screen: its ID is shown in the App line.
The Back up and Restore from a backup windows.
- Where the backup is kept — On the computer or On the device.
- Backup file — the path to the file.
- When backing up: Save the permissions, Save the linked account and Account type.
- When restoring: Restore the permissions, Restore the linked account and Use the ZennoBackup module.
These options repeat the options of the Actions with Application action.
Get APK.
The Get APK window.
The window saves the APK of the app open on the screen to the computer: its ID is shown in the App line. The Where to save on the computer field sets the file. At first it holds a file named after the app ID, in the folder the last APK was saved to, or in the Documents folder the first time.
If the app is installed from several APKs (split APK), they are saved as one .apks file, which can be installed back with Install APK.... The Get button saves the file, and a long transfer can be stopped with Stop.
Files.
- Send file... — copies files from the computer to the device. The window takes the File on the computer and Where to put the file on the device.
- Get file... — copies a file from the device to the computer. The window takes Which file to take from the device and Where to save on the computer.
- Device files... — opens the device's file manager.
Both transfer windows have a With superuser privileges checkbox. A long transfer can be stopped with Stop.
The Send file and Get file windows.
Device files.
The Device files window.

The file manager shows the device's folders and files with their size, permissions, owner, group, SELinux context and modification date. The buttons above the list open the root / and the /data and /sdcard folders. The star button adds the open folder to the favorites or removes it from them, and the arrow next to it opens the list of favorite folders.
Everything you can do with a file or folder is in its right-click menu:
- Open — open a folder. A file is handed to the device's apps: the app for this file type opens it, or the device screen offers a choice of apps.
- Get... — copy the file to the computer.
- New folder, Rename, Delete.
- Owner and group..., Permissions..., SELinux context... — change the owner and group, the permissions and the SELinux context.
The most frequent of these actions also have buttons at the bottom of the window. To send files to the device, drag them from Explorer into the window: they land in the open folder.
In the Permissions window the permissions are set with checkboxes or as a number:
Magisk / LSPosed.
Magisk:
- Open Magisk — opens the Magisk app, even when it is hidden under another name.
- Install module... — installs a Magisk module from a file On the computer or On the device. The module works after the device reboots.
- Modules... — opens the list of modules.
- Quick setup... — installs every Magisk module (
.zip) and app (.apk) from a folder on the computer, in the order of the file names.
In the Magisk quick setup window, choose the folder: ZennoDroid shows how many modules and APKs it holds and installs them with the Install button.
The Magisk quick setup window.
LSPosed:
- Open LSPosed — opens the LSPosed manager.
- Module settings... — turns an LSPosed module on for the chosen apps: more.
- Generate device... — picks the parameters of a new device by filters and applies them to the phone: more.
- Clear device profile — removes the parameters the ZennoDroid module spoofs, and the phone shows apps its own ones again. In code the ClearLSPosedSettings method does the same.
Magisk modules.
The Magisk modules window.

The table lists the installed modules with their name, ID, version and state. A module can be switched with Turn on and Turn off, removed with Delete, or brought back after removal with Restore. Changes take effect after a reboot, and until then the State column shows what will happen: Works after a reboot, Removed at the next reboot.
The Install... button opens a list of two items, Install Busybox and Install LSPosed. They install the modules that come with ZennoDroid, so you don't need to download them separately (see BusyBox and LSPosed). Working with modules needs root.
LSPosed module settings.
The LSPosed module settings window.

- Module — the module name, that is its package name, for example
com.zennolab.zennodroid. - Enable the module — turn the module on or off.
- The list of apps — check the apps to enable the module for. At the top are the apps already chosen and the app open on the screen. The Launchable apps only checkbox leaves only the apps that can be opened.
- The buttons in an app's row — copy its ID or name, open or close the app, and clear its data.
The Apply button sets up the module on the device right away. The Add to project button adds the LSPosed module settings action with the chosen values to the canvas, even if recording is off.
Device generator.
- Country, Manufacturer, Android version — filters. In each one you can check several values in the list or enter a regular expression.
- Add noise to the Canvas fingerprint.
- Generate GPU — spoof the GPU too. GPU Vendor limits the GPU manufacturer, an empty field means any.
The Apply button picks a device matching the filters and applies it to the phone. The Add to project button adds the Device Settings → Generate a device action with these filters to the canvas, also regardless of recording. The action puts the generated device into the GeneratedDevice variable.
Other actions.
- Take a screenshot — saves a picture of the device screen as PNG. ZennoDroid asks where to save the file and remembers the folder.
- Cover part of image — covers part of the screen picture. Used to test image search. The checkmark at the item shows whether a part is covered right now.
- Zoom in and Zoom out — zoom the picture in and out in the app open on the device.
- Mouse movements record — records the mouse movements over the device screen. While recording, the window shows a recording icon with the tooltip Recording mouse movements. Click to stop: clicking it stops the recording.
Device.
- Start and Stop — start and stop the device.
- Restart — close the current connection and start the device again, as the Start action does.
- Reboot — stop the device, closing all its connections, and reboot the phone. After the boot the device doesn't start by itself: click Start.
- Unlock the screen — wakes the device and puts the lock screen away. A PIN, password or pattern on it is entered by hand.
- Enable adb over Wi-Fi — Wi-Fi debugging stays on after a reboot too. Root is required. Switching it on restarts adb on the device, and the connection drops for a moment.
- Disable adb over Wi-Fi — Wi-Fi debugging stays off after a reboot too. Root and a USB connection are required. Switching it off also drops the connection for a moment.
- Change system language... — changes the phone's language without a reboot: more.
System language.
The Language field lists the languages in the phone's firmware, with their codes, for example ru-RU or en-US. On Android 10 and earlier the firmware doesn't give such a list, and the field has all languages. To find the one you need, start typing its code or name. When the window opens, the field holds the phone's current language.
The list of languages.

The Apply button changes the language right away, and the line above the buttons tells whether it is applied. The Add to project button adds the Device Settings → System language selection action with the chosen language to the canvas, even if recording is off.
On realme, OPPO and OnePlus phones the phone's region changes together with the language, and this needs root. Their list only has the languages of the regions present in the firmware.
Diagnostics.
- Device information... — the device type (RealPhone), state, name, title, index and address. The text can be copied with Copy to the clipboard.
- Clear logcat — clears the logcat log on the device.
- Run diagnostics... — collects logcat, dmesg and the latest tombstone into one ZIP archive. dmesg and the tombstone need root.
- Check the IP address — shows the device's external IP address and, for comparison, the computer's. The request doesn't come from an app, so a proxy turned on only for chosen apps may not apply to it. Best used when the proxy has no white list.
- Check the IP address in Chrome — opens the check address in Chrome and reads the page's answer: the IP address as apps see it. Then it closes the tab, and Chrome too if it wasn't running before the check.
- IP check addresses... — the services both checks ask.
- Safe start — starts a phone that doesn't grant root: more.
Besides the addresses themselves, the IP check shows what the check service reports about them: country, region, city, coordinates, provider, postal code and time zone, and sometimes the host name.
The IP check result (the data on the screenshot is hidden).

The IP check addresses window.
The addresses go one per line, http or https. The check asks them from the top down and shows the first answer with an IP address in it: JSON, as ipinfo.io gives, or plain text. An empty list means ipinfo.io. The Default button brings back the original list.
In project code the GetExternalIp and GetExternalIpInBrowser methods do the same.
Safe start.
Starts the phone without setting up the proxy and the input method and without installing APKs. This is for a phone that doesn't grant root: the screen is shown, and root can be enabled by hand. The item is available while the device is stopped and offers two image capture methods:
- H.264 capture — the picture comes as a video stream.
- Manual refresh — for especially hard cases: the picture is refreshed only with the Refresh screen button.
Run command.
The Run command window.

The Run command... item opens a window for adb shell commands. The device's answer appears in the Command output field, and the commands you run are kept in the Command history. Clicking a command in the history puts it into the field, double-clicking runs it at once, and the Remove from history button removes the ones you don't need.
- With superuser privileges — run the command as root.
- Do not check the connection — don't check the connection to the device before running the command.
Drag and drop.
You can drag files onto the device window straight from Explorer. If all the files are apps (.apk, .apks, .apkm, .xapk), the APK installation window opens, otherwise the window for sending files to the device.
What is recorded in the project.
| Menu item | Action in the project |
|---|---|
| Install APK... | Actions with Application → Install application |
| Close all apps | Actions with Application → Close application with an empty App name field |
| Clear data, Clear cache | Actions with Application → Application cleanup |
| Close | Actions with Application → Close application |
| Uninstall | Actions with Application → Uninstall application |
| Back up... | Actions with Application → Save application's data |
| Restore from a backup... | Actions with Application → Restore application's data |
| Get APK... | Actions with Application → Get APK of the application |
| Send file..., Get file... | Working with Files → Push file or Pull file |
| Clear device profile | C# Code: instance.DroidInstance.Settings.ClearLSPosedSettings(); |
| Take a screenshot | Image Processing: the screenshot is saved to the chosen file |
| Zoom in, Zoom out | Utils → Scaling |
| Start, Restart | Actions with Device → Run/restart device |
| Stop | Actions with Device → Stop device |
| Reboot | C# Code: instance.DroidInstance.Action.Reboot(); |
| Check the IP address | C# Code: return instance.DroidInstance.Proxy.GetExternalIp();, the answer goes to the ExternalIp variable |
| Check the IP address in Chrome | C# Code: return instance.DroidInstance.Proxy.GetExternalIpInBrowser();, the answer goes to the ExternalIp variable |
| Run command... | Utils → Console Command (ADB Shell), the answer goes to the AdbResult variable |
| Module settings... → Add to project | LSPosed Management → LSPosed module settings |
| Generate device... → Add to project | Device Settings → Generate a device, the result goes to the GeneratedDevice variable |
| Change system language... → Add to project | Device Settings → System language selection |
The last three items add the action with the Add to project button in their window, even if recording is off. The others are recorded only while Recording is on.
Context menu.
Right-click an element on the device screen to open the context menu. Its items depend on the element. For example, this is the menu on an input field:

Items for input fields:
- Remove text.
Clears the input field.
If recording is on, the Keyboard Emulation action with this content is added to the project:{AndroidKeys.CLEAR}. - Paste text from the Windows Clipboard.
Pastes the text from the computer's clipboard into the field. If the clipboard is empty, nothing happens.
If recording is on, the Keyboard Emulation action with this text is added to the project. If the action right before it is a keyboard emulation too, the text is appended to that one: for example, Remove text followed by Paste text from the Windows Clipboard give one action with the content{AndroidKeys.CLEAR}text. - Set the value from profile.
Puts a value from the project's Profile into the field.
If recording is on, the Set Value action with the macro of the chosen profile field is added to the project. - Set Variable Value.
Puts the value of a project variable into the field. The item appears only if the project has at least one variable.
If recording is on, the Set Value action with the macro of the chosen variable is added to the project.
Items for any element:
- Inspect element.
Opens the Element Properties window for a closer look. The chosen element is also highlighted in the Element Tree window. - Follow the cursor.
While the item is on, the element under the cursor is highlighted and its properties go to the Element Properties window. To turn the highlighting off, choose the item again.
Example.

- To the action designer.
Sends the element to the Action Designer. - XPath search.
Opens the Action Designer in xPath mode: it already holds the XPath of the chosen element, and the element itself is outlined on the device screen.
The XPath search result in the Action Designer.

- This is a CAPTCHA!.
Marks the element as a captcha and at once adds its recognition action to the project, even if recording is off. The action puts the answer into a new numberedRecognitionResultvariable, for exampleRecognitionResult0. By default the captcha is entered by hand: a window with the element's picture opens, where you type the answer and press Enter. The recognition module can be changed in the action itself (for example, to CapMonster.Cloud).
The manual captcha input window.

- Stick to the CAPTCHA.
Appears when the project already has a captcha marked with This is a CAPTCHA!. Adds one more picture to it: several separate pictures are joined into one and recognized together. - CAPTCHA recognition result.
Also appears only when the project has a captcha. Enters the captcha answer into the chosen element and, if Recording is on, adds the Set Value action with the answer variable. - Create text presence check.
Opens the Checking for text presence window with the element's text. The OK button adds an action checking this text to the project, even if recording is off. The action puts the check result into a new variable.
- Search by picture.
Opens the Search by picture window with a screenshot: in it you select the picture and set the match accuracy, the color mode and the search area. If the picture is found, click Yes and then Add to project: an action clicking the picture is added to the project. If recording is off, ZennoDroid asks whether to add the action anyway. More in Search by picture.
The Search by picture window.

- Search by the pixel color.
Opens the Pixel search window, already with the color of the pixel under the cursor. Here you set the allowed color deviation and the search area, and the found pixel is outlined on the screen. If the pixel is found, click Yes: the tap settings, the offset and the Test and Add to project buttons appear. The action clicking the pixel is added to the project even if recording is off.
The Pixel search window.
- Get the pixel color.
Copies the color of the pixel under the cursor to the clipboard as#RRGGBB. Nothing is added to the project.