Skip to content
All posts
April 7, 20266 min read

How We Test Software Across Multiple Platforms (Android, iOS, Web, Devices)

Same feature, different platform, different bugs. After testing across Android, iOS, Fire OS, browsers, and embedded devices, here's the testing strategy that actually scales across platform fragmentation.

TestingAndroidMobileDigital Signage
Share:

The same button. The same API call. The same expected behavior. Five different platforms. Five different bugs.

Multi-platform testing isn't about running the same test suite more times. It's about understanding that each platform is a different runtime with different constraints — and building a test strategy that respects that.

Here's what 13 years of cross-platform QA actually looks like.


Why "It Works on My Device" Breaks Down Fast

Consider a simple dropdown menu. It works fine on a Chrome desktop browser. But:

  • On Android (stock), the system keyboard pushes the layout up and the dropdown gets clipped
  • On Samsung One UI, the font override changes the dropdown item height and truncates long text
  • On Fire OS 7, the focus ring appears in a different position due to D-pad navigation support
  • On iPadOS, the popover behavior triggers instead of a bottom sheet
  • On a PWA installed to the home screen, the back gesture conflicts with the dropdown dismiss

Same component. Five platforms. Four separate bugs. And this is a dropdown.

[!NOTE] Platform fragmentation isn't a problem to solve — it's a condition to manage. The goal isn't to write code that runs identically everywhere. It's to build a testing strategy that catches the differences before users do.


Our Platform Coverage Matrix

For any feature, we test across three dimensions: OS, device form factor, and deployment context.

PlatformOS VersionsForm FactorContext
Android12, 13, 14 (latest 3)Phone, TabletApp Store, Sideload, Kiosk
Fire OS7, 8Fire Stick, Fire TabletSideload
iOS/iPadOS16, 17iPhone, iPadApp Store
WebChrome, Firefox, SafariDesktop, MobileBrowser, PWA
EmbeddedAndroid (custom ROM)Digital signage displaysWebView, Native

We don't test every combination — that's combinatorial explosion. We prioritize by:

  1. User volume — which platforms do most users actually run?
  2. Risk — which platforms have historically caused issues?
  3. Change surface — did the new code touch anything platform-specific?

Testing Android: The Fragmentation Problem

Android is where most teams struggle. The platform itself is stable. The OEM layer on top of it is not.

What OEM customizations break:

  • Fonts: Samsung, Xiaomi, and OPPO all allow users to change system fonts. If you're using system fonts in your app, test with a custom font selected.
  • Battery optimization: Aggressive battery management on Huawei, Xiaomi, and some Samsung builds kills background processes, breaks notification delivery, and interrupts long-running downloads.
  • Permission dialogs: The permission dialog UI is customized by OEMs. Some versions show the dialog twice. Some have an extra "Don't ask again" position that doesn't exist on stock Android.
  • Navigation gestures: Three-button navigation vs gesture navigation changes what swipe gestures are available to your app.

Minimum Android test matrix for each release:

code
Priority 1 (every release):
  - Stock Android (Pixel) — latest 2 OS versions
  - Samsung One UI — latest 2 OS versions  
  - Xiaomi/Redmi MIUI — one recent version

Priority 2 (major releases):
  - Budget Android (MediaTek chip) — performance validation
  - Android Tablet — layout validation
  - Fire OS device — if you target Amazon

[!TIP] Keep at least one budget Android device in your test lab. A Redmi A2 or similar. Your app will run on hardware like this in real deployments. Testing only on Pixel and Samsung flagship hides performance issues that budget users experience every day.


Testing Fire OS: The Forgotten Platform

Amazon's Fire OS forks Android and ships on its own update schedule. If you deploy to Fire TV Stick or Fire tablets, Fire OS is a separate test target.

Key Fire OS differences:

  • No Google Play Services. Any feature relying on
    code
    play-services-*
    libraries silently fails. This includes location, push notifications via FCM, and any Google Maps integration.
  • Different WebView version. Fire OS ships an older Chromium build than current Android. Modern CSS features may not render correctly.
  • Remote control navigation. Fire TV navigates with D-pad. Every interactive element needs to be focusable and have a logical focus order.
  • Background app behavior. Fire OS aggressively kills background apps to manage the limited RAM on Stick devices.

We test Fire OS separately from Android, not as an Android variant. They share a codebase but they're different test targets.


Testing iOS/iPadOS: The High-Stakes Platform

iOS has less fragmentation than Android but has its own testing challenges.

What trips teams up:

  • Permission prompts are one-shot. iOS asks for camera/location/notifications permission once. If the user denies it, there's no second prompt. You must test the denied state explicitly.
  • iPadOS multi-window. The app may be displayed in split-screen, slide-over, or stage manager configurations. Your layouts need to handle arbitrary widths.
  • Safari's WebKit engine. PWAs and web content on iOS always run in WebKit, not Blink. CSS and JavaScript that works in Chrome may not work in Safari/WebKit.
  • TestFlight distribution lag. TestFlight builds take 15-30 minutes to process. Build your QA schedule around this.

Testing Web and PWA: The Rendering Engine Split

Web testing in 2026 effectively means three rendering engines: Blink (Chrome/Edge), WebKit (Safari/iOS Chrome), and Gecko (Firefox). Most teams test in Chrome and call it done. Then Safari users report broken layouts.

What breaks between engines:

FeatureChrome (Blink)Safari (WebKit)
code
gap
in Flexbox
Older Safari versions ❌
CSS
code
backdrop-filter
Requires
code
-webkit-
prefix
code
input type="date"
Native pickerDifferent native picker UI
Web NotificationsLimited support
code
requestFullscreen()
Requires user gesture, stricter

Minimum web test matrix:

  • Chrome (latest) on desktop and Android
  • Safari on macOS and iOS
  • Firefox (latest) on desktop

The Signage Platform: Different Rules Entirely

For digital signage, testing adds a third dimension beyond OS and browser: hardware capability.

Budget Android sticks (2GB RAM, Mali-G52 GPU) cannot handle the same CSS animations that run smoothly on a Pixel 7. Video codecs available vary by chip manufacturer. WebGL support differs.

Signage-specific test checklist:

  • Run content for 8 hours continuously — does memory leak?
  • Test on the cheapest hardware you support — does it stutter?
  • Kill and restart the player app — does it recover cleanly?
  • Disconnect and reconnect Wi-Fi — does it reconnect without manual intervention?
  • Simulate a network timeout mid-content-load — what does the fallback state look like?

Making It Manageable

You cannot test every combination for every release. You manage risk instead.

For every release:

  1. Run automated regression on Priority 1 devices
  2. Manual smoke test on the most recent OS change (if any)
  3. Test any feature that touched platform-specific code on all affected platforms

For major releases:

  1. Full manual pass on Priority 1 + Priority 2 devices
  2. Platform-specific deep-dive on any new feature

Ongoing:

  1. When a user reports a bug, add that device/OS to your matrix if it's not already there
  2. When a new OS version ships, test your critical flows before recommending the update to users

The goal is confidence, not exhaustion. A targeted, risk-based approach covers more real-world scenarios than a sprawling test matrix that nobody has time to execute.

Share:
S

Sudarshan Chaudhari

AI Systems Builder / Product Engineer

Bangkok, Thailand

Solo Android developer with 13+ years in QA, building Android apps, AI automation systems, and developer tools at SudarshanTechLabs.

Stay updated

Get new posts on Android, Kotlin, and solo dev straight to your inbox.

Newsletter preferences

Related Apps

MyFamilyTracker

Real-time family location sharing — Firebase Realtime DB for sub-second propagation, WorkManager + ForegroundService for OS-compliant background collection, geofencing via Google Maps API.

Building something? Available for Android dev and QA consulting.

Work with me

Comments — powered by Giscus