3 / 66 · 09 Mobile & Cross-Platform Testing · The Device Fragmentation Reality← prev⊞ allnext →☰ Read as one page
1.3The Android Fragmentation Challenge
Android fragmentation is the dominant challenge in mobile testing. Unlike iOS, where Apple controls both hardware and software, Android runs on thousands of devices from hundreds of manufacturers, each with their own customizations.
Android Version Distribution (Approximate, 2026)
| Android Version | API Level | Market Share | Notable Differences |
|---|---|---|---|
| Android 15 | 35 | ~20% | Predictive back, per-app language |
| Android 14 | 34 | ~30% | Foreground service types, photo picker |
| Android 13 | 33 | ~20% | Notification permission, themed icons |
| Android 12 | 31-32 | ~15% | Material You, approximate location |
| Android 11 | 30 | ~10% | Scoped storage enforcement, one-time permissions |
| Android 10 | 29 | ~5% | Dark theme, gesture navigation |
Manufacturer Customizations
The stock Android experience is not what most users see. Samsung, Xiaomi, Huawei, and other manufacturers layer custom UIs on top of Android:
| Manufacturer | Custom UI | Market Impact | Testing Consideration |
|---|---|---|---|
| Samsung (One UI) | ~30% of Android devices | Custom gestures, split-screen, edge panels | Test multi-window and edge panel interactions |
| Xiaomi (MIUI/HyperOS) | ~15% global | Aggressive battery optimization kills background apps | Test background task survival |
| Huawei (EMUI/HarmonyOS) | ~5% global (growing in China) | No Google Play Services in newer models | Test without Google APIs, use HMS |
| Oppo/OnePlus (ColorOS/OxygenOS) | ~10% global | Custom notification handling | Test notification delivery edge cases |
| Google (Pixel) | ~3% global | Stock Android, fastest updates | Good baseline reference device |
The WebView Problem
On Android, web content in native apps renders through a WebView component that is tied to the system Chrome version. Different Chrome versions on different Android versions produce different rendering results. This means a web page that looks perfect in Chrome on your development machine may render differently inside a WebView on a Samsung Galaxy A54 running Android 12.
# Check WebView version programmatically
def get_webview_version(driver):
"""Get the WebView engine version on the current device."""
info = driver.execute_script("return navigator.userAgent")
# Parse Chrome version from user agent
# Example: "Chrome/120.0.6099.230"
import re
match = re.search(r'Chrome/(\d+\.\d+\.\d+\.\d+)', info)
return match.group(1) if match else "unknown"