Sign in

Alex Zhukovich

@alexzh.com
49 followers 54 following 141 posts

Android Engineer & author at alexzh.com.

PostsRepliesMedia
Alex Zhukovich @alexzh.com · 28/08/2026
New article: Handling asynchronous images in Android screenshot tests You'll learn how to: • Inject fake images using coil-test • Create a custom JUnit rule to code avoid duplication • Use inspection mode Both approaches give you deterministic tests. alexzh.com/handling-as...
alexzh.com
Handling Asynchronous Images in Android Screenshot Tests
This article is based on a chapter from my book, Mastering Android Screenshot Testing. Modern applications frequently load images asynchronously, which is a common cause of unstable screenshot tests or confusion when you review newly generated screenshots. A test can pass locally and fail on CI, produce a different image
000
Alex Zhukovich @alexzh.com · 09/07/2026
Mastering Android Screenshot Testing gets a new release next week, with 4 new chapters covering testing across devices & configurations, testing animations, and addressing common challenges. The price increases on release. Buy now and get the next updates for free. leanpub.com/mastering-a...
leanpub.com
Mastering Android Screenshot Testing
This comprehensive guide explores automated screenshot testing in Android development. Learn the fundamental principles, frameworks, and best practices to catch visual regressions across devices and configurations before they reach production.
000
Alex Zhukovich @alexzh.com · 07/07/2026
A few days ago, I spilled water on my laptop. It never turned back on. Wrote about what happened, and the simple backup checklist I use now: alexzh.com/laptop-back...
alexzh.com
My laptop died last week, and here is what it took with it
Last week I spilled water on my laptop. This is the story of what I lost, what I learned, and the 3-2-1 backup system I wish I'd had a week earlier.
000
Alex Zhukovich @alexzh.com · 02/07/2026
Did you know there are multiple Floating Action Button components available in different sizes? • SmallFloatingActionButton • FloatingActionButton • MediumFloatingActionButton • LargeFloatingActionButton #AndroidDev #JetpackCompose
140
Alex Zhukovich @alexzh.com · 25/06/2026
1/ Your component screenshot tests are all green, but your app might still have visual issues. Both component and screen tests share the same goal, improving visual quality, but they serve different purposes: #AndroidDev #ScreenshotTesting #SoftwareQuality
140
Alex Zhukovich @alexzh.com · 23/06/2026
Did you know that buttons in Jetpack Compose have predefined constants for button height and icon size for these button sizes: • Extra small • Medium • Large • Extra large Knowing the button size, you can calculate the recommended font size based on the button height. #AndroidDev #JetpackCompose
140
Alex Zhukovich @alexzh.com · 16/06/2026
FlexBox component was added to Jetpack Compose. It's a container that lays out items in one of the following directions: • Row • Column • RowReverse • ColumnReverse You’ll need "foundation-layout:1.12.0-alpha03" to try it out. #AndroidDev #JetpackCompose
130
Alex Zhukovich @alexzh.com · 10/06/2026
A nice surprise this morning: my book Mastering Android Screenshot Testing is being featured on the Leanpub homepage 🎉 Thank you to everyone who grabbed an early copy. More chapters are on the way! The 10% launch discount is still available: leanpub.com/mastering-a...
010
Alex Zhukovich @alexzh.com · 10/06/2026
Grid component was added to Jetpack Compose. It lets you build two-dimensional layouts. You’ll need "foundation-layout:1.12.0-alpha03" to try it out. #AndroidDev #JetpackCompose
120
Alex Zhukovich @alexzh.com · 05/06/2026
Mastering Android Screenshot Testing is now available. 10 chapters (50% of the full book). Here's what's inside ⬇️ • Why and when to use screenshot testing • Framework comparison: Android Testify, ComposePreview Screenshot Testing, Dropshots, Paparazzi, Roborazzi, Shot
100
Alex Zhukovich @alexzh.com · 19/05/2026
2% threshold on a Pixel 10? That's 52,358 pixels. Many developers set this number in screenshot tests without understanding what it actually permits.
100
Alex Zhukovich @alexzh.com · 05/03/2026
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 ⬇️
100
Alex Zhukovich @alexzh.com · 20/02/2026
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.
010
Alex Zhukovich @alexzh.com · 18/02/2026
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
020
Alex Zhukovich @alexzh.com · 10/02/2026
"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.
000
Alex Zhukovich @alexzh.com · 29/01/2026
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 ⬇️
110
Alex Zhukovich @alexzh.com · 22/01/2026
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-...
alexzh.com
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.
030
Alex Zhukovich @alexzh.com · 20/01/2026
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
020
Alex Zhukovich @alexzh.com · 08/01/2026
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
020
Alex Zhukovich @alexzh.com · 05/12/2025
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 ⬇️).
100
Alex Zhukovich @alexzh.com · 02/12/2025
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
010
Alex Zhukovich @alexzh.com · 27/11/2025
"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.
100
Alex Zhukovich @alexzh.com · 20/11/2025
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
speakerdeck.com
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…
130
Alex Zhukovich @alexzh.com · 30/10/2025
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
120
Alex Zhukovich @alexzh.com · 24/10/2025
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?
010
Alex Zhukovich @alexzh.com · 23/10/2025
“We don’t have time for visual testing.” That’s what many Android developers say. Many developers think that creating visual tests is hard, as they require separate test cases, learning new frameworks and approaches, and dealing with flaky CI pipelines.
100
Alex Zhukovich @alexzh.com · 12/10/2025
I’ll be speaking at @droidcon.it in Turin about Android UI testing. Here’s what I’ll cover: • Getting started with natural language UI tests • A technical comparison between Journeys, Espresso, UiAutomator, and Compose UI Test Spoiler: There’s no one-size-fits-all solution.
010
Alex Zhukovich @alexzh.com · 25/09/2025
The ButtonGroup component from Material 3 Expressive replaces the SegmentedButtons component. It supports more shapes and includes overflow buttons for additional components that can't fit on the screen. #JetpackCompose
000
Alex Zhukovich @alexzh.com · 18/09/2025
Compose Multiplatform 1.9.0 is here! It now supports parameters for preview functions, including: • name • group • locale • widthDp • heightDp • showBackground • backgroundColor More details: github.com/JetBrains/c...
000
Alex Zhukovich @alexzh.com · 17/09/2025
Building global software isn't just about translation - it's about understanding cultural context. Here are 3 critical locale pitfalls to solve before shipping globally: 1. Currency formatting 2. Date interpretation 3. Number separators Details 🔽
100
Alex Zhukovich @alexzh.com · 05/09/2025
Thanks for joining my @droidconLisbon talk on visual testing for adaptive layouts! Here are the slides: speakerdeck.com/alexzhukovi...
speakerdeck.com
Mastering Adaptive Layouts: Visual Testing for Every Screen
Android’s device ecosystem has expanded beyond phones - from foldable devices and tablets to Android TVs. Building truly adaptive layouts needs more tha…
031
Alex Zhukovich @alexzh.com · 30/08/2025
Need to build list and detail screens in your Jetpack Compose project that adapt to different device types? Check out the ListDetailPaneScaffold component from the Material3 adaptive-layout dependency.
010
Alex Zhukovich @alexzh.com · 14/08/2025
Did you know you can control the tooltip's position relative to its anchor starting from "material3:1.5.0-alpha01"? Tooltips support the following positions: • Above • Below • Start • End
000
Alex Zhukovich @alexzh.com · 23/07/2025
Here is one more reason why you need visual tests which will verify your components and screens against system configuration options, like font scale. Remember: Not everyone uses the default font size.
000
Alex Zhukovich @alexzh.com · 13/07/2025
Did you know that Material 3 Expressive introduces many additional shapes that you can use in Jetpack Compose?
100
Alex Zhukovich @alexzh.com · 02/07/2025
Want to see how your UI adapts to different wallpapers? You can preview dynamic colors directly in Android Studio using the "wallpaper" parameter for preview annotation. Does your app support dynamic colors?
000
Alex Zhukovich @alexzh.com · 18/06/2025
Compose Multiplatform 1.8.2 is now available. With this update, you can use preview parameters for Compose Multiplatform previews. ⚠️ Currently, the multiple previews are rendered in IntelliJ IDEA 2025.1.2 (stable version) and not rendered in Android Studio.
000
Alex Zhukovich @alexzh.com · 17/06/2025
Are you looking for a simple way to give access to important actions and keep the UI clean? Then, try HorizontalFloatingToolbar. It was recently released as part of Material 3 Expressive components. ⚠️ Currently in alpha #AndroidDev #MaterialDesign #JetpackCompose
120
Alex Zhukovich @alexzh.com · 12/06/2025
Recently, Apple changed its design system, and Google introduced Material Design 3 Expressive components to expand its existing design system. Both of these situations lead to a redesign of your application. To ensure your UI looks as expected after the redesign, use visual tests.
110
Alex Zhukovich @alexzh.com · 05/06/2025
In Android Studio Narwhal, you can visually configure a preview for composable functions by clicking the gear icon next to your preview function.
000
Alex Zhukovich @alexzh.com · 03/06/2025
Ensure that your composable function is accessible. Do you have a preview for your UI? Then, verify it by selecting "Start UI Check Mode" for your preview in Android Studio. This feature works for Compose Multiplatform code, too. (tested it in Android Studio Narwhal).
000
Alex Zhukovich @alexzh.com · 30/05/2025
Did you know you can activate TalkBack to verify your application on an Android emulator using the "Device UI shortcut" menu in Android Studio?
010
Alex Zhukovich @alexzh.com · 29/04/2025
Starting with Jetpack Compose 1.8.0, you have access to additional text overflow options. Here are the available options: • Ellipsis • StartEllipsis • MiddleEllipsis
000
Alex Zhukovich @alexzh.com · 25/04/2025
Recently, Jetpack Compose 1.8.0 was released and it allows to adjust the text size to the size of the container. Jetpack Compose 1.8.0 is available as part of the BOM: 2025.04.01 implementation(platform("androidx.compose:compose-bom:2025.04.01"))
010
Alex Zhukovich @alexzh.com · 23/04/2025
Did you know you can change the color mode and font size from the "Running Devices" panel in Android Studio without accessing the settings? By using the "Device UI Shortcuts" feature, you can adjust: • Color mode • Navigation mode (gesture, buttons) • Font size • Display size
000
Alex Zhukovich @alexzh.com · 19/04/2025
I've just completed the "Visual Testing Tools and Services" section of my book on visual testing for Android projects. I'd love to hear from developers and QA engineers: What screenshot testing tools do you use alongside screenshot testing frameworks?
100
Alex Zhukovich @alexzh.com · 11/04/2025
Android Studio Narwhal now includes a "Generate Preview" with Gemini. My thoughts after playing with it: • It generates fake data for previews • It struggles with custom types • It needs modification, but it speeds up the process In the future, it might be a helpful tool for adding visual tests.
010
Alex Zhukovich @alexzh.com · 02/04/2025
Starting from Android Studio Narwhal, you can use the preview for common composable functions in Kotlin Multiplatform.
110
Alex Zhukovich @alexzh.com · 27/03/2025
Translation ≠ Localization. Here are 5 key factors to properly localize your app: 1. Never hardcode strings 2. Handle both RTL and LTR layouts 3. Use local number, date, and time formats 4. Design layouts that adapt to text length 5. Consider cultural meaning of colors and icons
010
Alex Zhukovich @alexzh.com · 21/03/2025
That's great news
020