Best Android logging and debugging tools beyond logcat
Seven free Android logging and debugging tools beyond plain logcat, from Android Studio and pidcat to Perfetto and bugreports, with honest trade-offs.
Android Emulator vs Genymotion: which virtual device to use
Android Emulator vs Genymotion compared on setup, Apple Silicon and x86 speed, cloud options, licensing and limits, with a verdict for each use case.
adb shell dumpsys batteryinfo vs dumpsys batterystats
what dumpsys battery and dumpsys batterystats each report, how the old batteryinfo name fits in, and which one to use when debugging battery drain in tests.
Inside the adb protocol: transports, services and port 5037
How adb really works: the smart socket on port 5037, host and local services, the sync protocol, and TLS pairing for Android 11 wireless debugging.
Why uiautomator2's init needs internet access to set up a device
A plain-language explainer on what uiautomator2 init downloads to an Android device, why it needs internet, and how to set up an offline farm.
Why Appium's Java client and Selenium versions have to match
Appium's Java client is built on one Selenium version. Mix them and you get NoSuchMethodError. Here is the Selenium 3 vs 4 W3C break and how to read the matrix.
Why Jetpack Compose elements don't show up in the UiAutomator tree
Why Compose nodes go missing in UiAutomator and Appium: the semantics tree, merged nodes, testTag and testTagsAsResourceId, with fixes you can apply today.
What is an Android device farm and how does it work?
An Android device farm is a rack of phones or emulators you control remotely. Here is how hosts, USB hubs, adb servers and STF-style tools fit together.
Using scrcpy to turn an Android phone into a webcam
A first-person look at using scrcpy plus OBS or v4l2loopback to turn a spare Android phone into a USB webcam, with the setup, breakages and honest verdict.
Using an Android phone as a PC microphone through scrcpy
How I route a phone mic into PC calls with scrcpy audio flags, a virtual cable, and what latency and quality limits to expect, as of October 2026.
UiObject vs UiObject2 in Android's UI Automator
UiObject or UiObject2? How the two UI Automator APIs differ on waits, gestures and stale elements, and which one to write new Android tests with.
UiAutomation vs AccessibilityService: what's the difference
UiAutomation runs with shell privileges from a test process, AccessibilityService runs as an installed app. Where each breaks and when to pick it.
TouchAction vs the W3C Actions API in Appium
Why Appium dropped TouchAction and MultiAction, and how to translate old tap, swipe and pinch code to the W3C Actions API, with Python and Java examples.
Testing Android apps on real carrier networks and SIMs
A practical walkthrough of testing an Android app on real SIMs and carrier networks: CGNAT, IPv6, handover, SMS OTP, geo-IP, plus what emulators miss.
Running uiautomator2 in Docker: Keep adb on the Host
How I run uiautomator2 Android automation in Docker by keeping one adb server on the host and pointing containers at it over TCP, plus three problems.
Root vs non-root Android automation: what you gain and lose
Root vs non-root Android automation explained: what root unlocks, what it breaks (Play Integrity, banking apps, OTA updates), and what adb can do without it.
Redirecting scrcpy's video stream into OBS or another app
Can scrcpy's video go straight into OBS? I compare piping --record output and v4l2 virtual cameras against plain window capture, and say which I'd use.
Making adb-pushed media files show up in the Android gallery
Why files pushed with adb push don't appear in the Android gallery, and how to trigger a MediaStore rescan with am broadcast or content call on any device.
Maestro vs Appium for Android UI testing
Maestro vs Appium for Android UI testing: YAML flows against WebDriver code, setup, flakiness, CI and where each breaks down, from an operator in Singapore.
Is UiSelector deprecated in Android's UI Automator?
UiSelector is not formally deprecated in androidx.test.uiautomator, but BySelector and UiObject2 are the modern path. Here is what that means for your tests.
Installing a test-only APK with adb install -t
Why adb install fails with INSTALL_FAILED_TEST_ONLY, what the testOnly manifest flag does, and how to install and update such an APK with adb install -t.
How to pull an APK file off an Android device with adb
Find an installed app's path with adb shell pm path, pull it to your computer with adb pull, and handle split APKs on newer Android. Includes scripts.
Host limits when running many Android phones: USB, power and adb
How USB controllers, hub tiers, power budgets, the adb server and scrcpy decode cost cap how many real Android phones one host can drive, with planning math.
Fixing scrcpy that won't connect or open on macOS
Fix scrcpy that won't connect or open on macOS: check adb first, clear Gatekeeper quarantine, repair codesign, and reinstall cleanly with Homebrew.
Fixing scrcpy keyboard and mouse input that doesn't work on OPPO phones
Fix scrcpy mirroring that works but keyboard and mouse do nothing on OPPO and ColorOS phones, using the permission toggle and HID or OTG modes.
Fixing INSTALL_FAILED_USER_RESTRICTED on Xiaomi and Redmi adb installs
Fix INSTALL_FAILED_USER_RESTRICTED on Xiaomi and Redmi: enable Install via USB, pass the Mi account and SIM check, and get adb install working again.
Fixing a greyed-out USB debugging toggle on Android
How to fix a greyed-out USB debugging toggle on Android: tap build number 7 times, check MDM and work profile limits, and clear OEM security settings.
Downgrading an installed Android app with adb install -d
How to fix INSTALL_FAILED_VERSION_DOWNGRADE with adb install -d, when it is safe on Android QA builds, and why it fails on production release builds.
Do you need both instrumented Android tests and Appium in one project?
Instrumented Android tests run in-process and Appium drives apps as a black box. Here's what each actually covers and when a project needs both.
Do you need a dedicated GPU to run scrcpy?
No, scrcpy does not need a dedicated GPU. Here is how it decodes video on the host CPU with FFmpeg and SDL, and when integrated graphics are enough.
Can one Android app control another through UI Automator?
Yes, but only as a test APK started over adb with shell privileges. How UI Automator crosses app boundaries, how it differs from Espresso, and where it stops.
Best way to stop an scrcpy recording programmatically on Windows
How to stop scrcpy --record from a script on Windows without corrupting the file: Ctrl+C events, time limits, taskkill, mkv and screenrecord compared.
Best scrcpy configuration for low-latency mobile gaming
Eight scrcpy setups for low-latency mobile gaming: USB, fps caps, bitrate, encoder, codec options, buffers and input. Plus what still lags versus native play.
Best open-source tools for running your own Android device farm
Open-source tools for running a self-hosted rack of real Android phones: STF forks, adb multiplexing, uiautomator2, scrcpy, and test scheduling compared.
Best adb GUI tools for managing Android devices from a desktop
Seven desktop tools that let you mirror, install apps, move files and read logcat on Android without typing adb commands, plus what each one needs installed.
Android RPA with adb and uiautomator2: a practical setup
A worked setup for scripting Android phones you own with adb and uiautomator2: selectors, retries, logging, keeping phones awake, and what breaks.
How to capture and read an Android bug report with adb
Capture an Android bug report with adb bugreport, unpack the zip, find crash and ANR sections, read battery data in Battery Historian, and redact it first.
Why Android UI tests are flaky, and the usual fixes
Android UI tests fail at random because of animations, idle sync, pop-ups, keyboards, network, sleep and shared devices. Here is why, and a fix for each.
What is adb? The client, server and adbd daemon explained
adb has three parts: a client you type commands into, a server on port 5037, and adbd running on the device. here's how they talk to each other.
adb logcat guide: filter logs by app, tag and priority
A practical walkthrough of adb logcat: filter by app with --pid, by tag and priority, switch buffers and output formats, then save logs to a file.
Espresso vs UI Automator: which Android test framework to use
Espresso vs UI Automator, compared: in-process views vs black-box automation, synchronisation, cross-app reach, and when to combine both in one suite.
Best scrcpy settings to fix lag and stuttering
Seven scrcpy flags that actually fix a laggy Android mirror: video codec, max-size, bit-rate, video-buffer, fps cap, render driver, and USB vs Wi-Fi.
adb shell input: tap, swipe, type text and send keyevents
A step-by-step guide to adb shell input: tap, swipe, type text, and keyevent syntax, escaping rules, coordinates vs density, and where it breaks at scale.
adb pm and am commands: install, launch and manage Android apps
How to use adb pm and am to install APKs, list packages, launch activities, grant permissions and clear app data on Android, one device or many.
adb authorization explained: RSA keys and the unauthorized error
why adb throws an unauthorized error the first time you plug in a device, what the RSA keypair in ~/.android/adbkey actually does, and how to fix it.
How to use ADB over Wi-Fi: wireless debugging and adb tcpip
Connect adb over Wi-Fi with Android 11+ wireless debugging or the legacy adb tcpip 5555 method, and fix the usual reasons adb connect fails or drops.
Emulator vs real device testing: what the emulator misses
What the Android emulator simulates well, what it can't reproduce (OEM builds, carrier networks, push timing, Play Integrity, performance) and when to use a real phone.
scrcpy guide: control and record Android from your desktop
Install scrcpy, learn the flags worth knowing, record headless for CI, run several Android phones at once and mirror a phone over Wi-Fi or an SSH tunnel.
uiautomator2 vs Appium: which to use for Android automation
uiautomator2 and Appium both drive Android through UiAutomator. How they compare on setup, speed, flakiness and language support, and which fits your team.