Alex Zhukovich's Avatar

Alex Zhukovich

@alexzh.com

45
Followers
51
Following
117
Posts
19.11.2024
Joined
Posts Following

Latest posts by Alex Zhukovich @alexzh.com

Preview
Mastering Android Screenshot Testing This comprehensive guide explores automated visual testing in Android development. Learn the fundamental principles, frameworks, and best practices to catch visual regressions across devices and configurations before they reach production.

Early supporters get:
• All future updates at a reduced price
• Help decide which topics get covered in the remaining chapters

If you want to ship quality apps with confidence, join the waitlist: alexzh.com/books/maste...

05.03.2026 05:45 👍 0 🔁 0 💬 0 📌 0

The first release covers 10 chapters, which is 50% of the full book.

The remaining chapters will be shaped by feedback from Android developers, making the final version more practical and impactful.

05.03.2026 05:45 👍 0 🔁 0 💬 1 📌 0

Plus hands-on examples of screenshot testing a real app:

• Themes
• Localization
• Adaptive UIs
• Font sizes
• CI/CD integration
• Future trends
• AI-assisted screenshot testing

05.03.2026 05:45 👍 0 🔁 0 💬 1 📌 0

The book dives deep into:

• Why screenshot testing matters for mobile apps
• In-depth comparison of frameworks: Android Testify, Dropshots, Paparazzi, Roborazzi, Shot, and Compose Preview Screenshot Testing
• Practical use of ComposablePreviewScanner and AndroidUiTestingUtils

05.03.2026 05:45 👍 0 🔁 0 💬 1 📌 0
Post image

2.5 years: 1,000+ hours of writing, 2 full drafts, and over 50,000 words, and that's not even counting the code.

I'm writing a book on Android screenshot testing, and the first release is coming in April 2026.

Here's what it covers ⬇️

05.03.2026 05:45 👍 0 🔁 0 💬 1 📌 0

Just found out you can now generate widget previews using Jetpack Compose.

Override "providePreview" in your widget class.

⚠️ Android 15+ only (Glance 1.2.0-rc01).
For older versions, combine with XML (12+) or images as a fallback.

20.02.2026 06:04 👍 1 🔁 0 💬 0 📌 0
Post image

Your date formatter may work locally, but break elsewhere.

SimpleDateFormat(...) and DateTimeFormatter.ofLocalizedDate(...) do not guarantee the result your users expect.

Use DateFormat.getBestDateTimePattern() for the right locale pattern.

#AndroidDev

18.02.2026 05:45 👍 2 🔁 0 💬 0 📌 0
Post image

"Just display the number. What could go wrong?"
Localize your app into Arabic and find out.

Instead of using raw numbers in your UI, use NumberFormat.
Not only digits depend on the locale, but also decimal separators, thousand groupings, and many other formatting conventions.

10.02.2026 05:45 👍 0 🔁 0 💬 0 📌 0
Preview
How to fix the Compose preview naming problem If you use PreviewParameterProvider, you've probably struggled with index-based names like "uiState 0" and "uiState 1." Starting with ui-tooling-preview:1.10.0, you can finally add custom display names to your preview states.

Full guide: alexzh.com/how-to-fix-...

29.01.2026 07:27 👍 0 🔁 0 💬 0 📌 0

Starting with ui-tooling-preview:1.10.0, you can override "getDisplayName()" in your PreviewParameterProvider to replace index-based naming with meaningful labels.

It takes less than 5 minutes to set up, but it removes the confusion every time you open the preview panel.

29.01.2026 07:27 👍 0 🔁 0 💬 1 📌 0
Post image

Last week I published a short article about a small but annoying problem with PreviewParameterProvider in Jetpack Compose.

If you've ever used PreviewParameterProvider, you know the pain: your previews have names like "uiState 0", "uiState 1", "uiState 2".

Here's how to fit ⬇️

29.01.2026 07:27 👍 1 🔁 0 💬 1 📌 0
Preview
How to fix the Compose preview naming problem If you use PreviewParameterProvider, you've probably struggled with index-based names like "uiState 0" and "uiState 1." Starting with ui-tooling-preview:1.10.0, you can finally add custom display names to your preview states.

If you use PreviewParameterProvider in Jetpack Compose, you know the frustration of seeing index-based preview names, like uiState 1.

Good news: ui-tooling-preview:1.10.0 finally lets you add custom names to your preview states.

Here's how to use it:
alexzh.com/how-to-fix-...

22.01.2026 06:55 👍 3 🔁 0 💬 0 📌 0
Post image

How many preview functions do you use per component or screen in Jetpack Compose?

If it's more than two, consider using PreviewParameterProvider.

Less code. Same coverage.

#AndroidDev #JetpackCompose

20.01.2026 05:45 👍 2 🔁 0 💬 0 📌 0

Screenshot testing is no longer optional.

Most devs never check out your branch; instead, they read the diff and approve.

Now AI writes code faster than humans can review. As a result, more and more UI bugs go to production.

Catch them before your users do.

#AndroidDev

08.01.2026 08:06 👍 2 🔁 0 💬 0 📌 0
Preview
Compose Material 3  |  Jetpack  |  Android Developers

Recommended website to download Material Icons: fonts.google.com/icons

Link to official update: developer.android.com/jetpack/and...

05.12.2025 05:45 👍 0 🔁 0 💬 0 📌 0

Do you use the "material-icons" library for Jetpack Compose?

Important news: Google team will no longer publish updates for this library, as it's not the recommended way for displaying Material Icons in Compose.

Recommended way: Downloading a Vector Drawable XML from the official website (link ⬇️).

05.12.2025 05:45 👍 0 🔁 0 💬 1 📌 0
Post image

Compose Preview Screenshot Testing forces moving your previews into the "screenshotTest" source set, which leads to code duplication or losing your previews.

Instead, reuse your preview functions in the screenshotTest source set.

Previews + screenshot tests. No duplication.

#AndroidDev

02.12.2025 07:43 👍 1 🔁 0 💬 0 📌 0
Preview
Not all UI tests are the same The article explores different types of UI testing, such as end-to-end testing, UI testing with fake data, pixel perfection testing, and accessibility testing. The article also includes information on how to get started with UI testing in any project.

Want to dive deeper into each test type? I wrote a detailed breakdown of UI testing types with practical examples: alexzh.com/not-all-ui-...

27.11.2025 07:14 👍 0 🔁 0 💬 0 📌 0

When you match the right type of tests to the right job, your E2E suite shrinks dramatically—and execution time stops being a problem.

Stop asking "how do we make E2E faster?" Start asking "should this even be an E2E test?"

What percentage of your UI tests are currently E2E?

27.11.2025 07:14 👍 0 🔁 0 💬 1 📌 0

The only way to make your UI tests fast and reliable is to replace most of your E2E tests with different test types:

• E2E tests → Verify production environment integrations
• UI tests with fake data → Verify state handling (loading, success, error)
• Screenshot tests → Verify the pixel perfectness

27.11.2025 07:14 👍 0 🔁 0 💬 1 📌 0

Most teams believe end-to-end tests are the only UI testing strategy available. So they focus on improving infrastructure or switching to a "better" framework.

But E2E tests were never designed to test everything. They verify one thing: how your app talks to the production environment.

27.11.2025 07:14 👍 0 🔁 0 💬 1 📌 0

"How do we make our E2E tests fast and stable?"

I've answered this question after every UI testing talk I've ever given, and my response always surprises people.

27.11.2025 07:14 👍 0 🔁 0 💬 1 📌 0
Preview
Visual Testing for Android This comprehensive guide explores automated visual testing in Android development. Learn the fundamental principles, frameworks, and best practices to catch visual regressions across devices and configurations before they reach production.

But, there's a crucial point: your tests might pass even if your UI is broken.

That's why I'm writing a book on Visual Testing for Android.

Join the waitlist to find out when it launches and to access early bird pricing: alexzh.com/android-vis...

20.11.2025 06:47 👍 0 🔁 0 💬 0 📌 0
Preview
The Complete Android UI Testing Landscape: From Journey to Traditional Approaches Don't know where to start with Android UI testing? The new AI-powered Journey tests offer a low-code entry point that gets you testing immediately. I…

Thank you to everyone who attended my talk at @droidcon.it about tools and frameworks for E2E and UI tests with fake data, including:

• Android Journey
• Maestro
• Espresso
• Compose UI Test
• Kaspresso

Slides from my talk:
speakerdeck.com/alexzhukovi...

#DroidconIt #AndroidDev

20.11.2025 06:47 👍 3 🔁 0 💬 1 📌 0

3/3 I realized this after spending some time improving my layout for the medium layout and checking it on a single device. We should design layouts based on screen sizes, not device types.

Does your application support foldable devices?

30.10.2025 08:39 👍 1 🔁 0 💬 0 📌 0

2/3 Here's the problem:
Google's window size classes aren't device categories—they're viewport measurements. The Pixel 9 Pro Fold jumps straight from compact to expanded, never using medium.

On the other side, Samsung's Z Fold 5 uses medium.

Same device category, but different screen sizes.

30.10.2025 08:39 👍 0 🔁 0 💬 1 📌 0
Post image

1/3 Foldable devices always use the medium window size class.

I believed this too. Then I opened my app on a Pixel 9 Pro Fold and was surprised that the "foldable" layout was skipped, and the "tablet" layout appeared on the screen.

#AndroidDev #KMP #MaterialDesign

30.10.2025 08:39 👍 2 🔁 0 💬 1 📌 0
Video thumbnail

Did you know that the OutputTransformation API lets you format text fields in Jetpack Compose in real time?

Here's how to improve entering a card number. You can also use it for phone numbers, dates, postcodes, and more.

Do you already use OutputTransformation in your project?

24.10.2025 04:30 👍 1 🔁 0 💬 0 📌 0
Preview
Mobile development with Alex A blog about Android development & testing, Best Practices, Tips and Tricks

Your preview functions can be used not only for development but also as a tool to releasing apps without pixel imperfections.

Want to dive deeper into visual testing? Subscribe to my newsletter. Plus, you’ll be the first to know when my book on visual testing is released!

alexzh.com/

#AndroidDev

23.10.2025 04:30 👍 1 🔁 0 💬 0 📌 0

You now need only to make minor adjustments to implement visual tests.

Start strategically:
• Convert your design system and/or common components first
• Add preview functions for the most critical screens
• Gradually expand coverage to less critical screens

23.10.2025 04:30 👍 0 🔁 0 💬 1 📌 0