Skip to main content

Karol Wrótniak

Experienced Android & Flutter Developer, Public Speaker, and Technical Writer sharing insights on mobile development, Open Source maintenance, and modern CI/CD workflows.

Recent Writing

View all writing
May 13, 2026

Bypassing User Isolation on Android with a Screen Reader

(opens in a new window)
How a missing security check in Android's NotificationManagerService let accessibility services leak private notifications across user profiles, and how the fix closed the gap.
AndroidSecurityAccessibilitya11yVulnerability
Read article
April 23, 2026

A Practical Guide to Flutter Accessibility – Part 2: Hiding Noise, Exposing Actions

(opens in a new window)
A practical guide to advanced Flutter accessibility patterns, covering ExcludeSemantics, BlockSemantics, customSemanticsActions, and live regions.
FlutterAccessibilitya11yTutorial
Read article
February 19, 2026

When Zero‑Width Isn’t Zero - Pagedout #8

(opens in a new window)
A seemingly harmless zero-width character turned into a real security risk hiding in plain sight.
cybersecuritycvejavascriptnodejssecurity
Read article
January 28, 2026

When Zero‑Width Isn’t Zero: How I Found and Fixed a Vulnerability

(opens in a new window)
A seemingly harmless zero-width character turned into a real security risk hiding in plain sight.
cybersecuritycvejavascriptnodejssecurity
Read article
November 7, 2025

A Practical Guide to Flutter Accessibility – Part 1: The Basics

(opens in a new window)
A practical guide to Flutter accessibility, covering the basics of the Semantics widget, MergeSemantics, and testing tools for Android and iOS.
FlutterAccessibilitya11yTutorial
Read article
October 1, 2025

How to Create an IoT App in Kotlin Multiplatform

(opens in a new window)
In this article, you’ll build a small multiplatform app for Android and iOS that blinks an LED on an IoT device. You’ll use Kotlin Multiplatform (KMP) for shared logic, Compose Multiplatform for the UI, and the Kable library for Bluetooth communication.
IoTKotlinSwiftKMPComposeBluno
Read article
February 22, 2025

Deep Diving Into AI_devs 3: What I Learned And How You Can Benefit

(opens in a new window)
AI_devs 3 course review.
AILLM
Read article
September 19, 2024

10 Ways AI Can Speed Up your Mobile App Development | Guide for Developers

(opens in a new window)
See how AI tools like GitHub Copilot and Stable Diffusion can streamline mobile app development by automating code generation, enhancing testing, and optimizing performance.
AITips&TricksGenAI
Read article

Recent Talks

View all talks
Conference
March 2026 Over 15% of the world's population lives with disabilities, and the upcoming European Accessibility Act (EAA) imposes new legal obligations on us. How can we prepare modern mobile applications for this?
accessibilityjetpack composeandroideaaa11y
Event link (opens in a new window)
Conference
December 2025 Discover how to optimize Android applications using JNI. Learn to configure NDK, invoke native code, and avoid common pitfalls based on the android-gif-drawable case study.
AndroidJNINDKPerformanceC++Kotlin
Event link (opens in a new window)
Conference
October 2025 This talk provides a practical, live-demo walkthrough of Android application reverse engineering, showing how easily developers' assumptions about code security can be broken.
AndroidReverse EngineeringMobileCybersecurity
Event link (opens in a new window)
Conference
June 2025 See how AI tools can help build a practical pseudolocale generator.
l10npseudolocalizationi18nFlutter
Event link (opens in a new window)
Conference
April 2025 What to keep in mind when writing code and why small letters can kill.
triviabest practicesunicodetextdiacriticserrors
Event link (opens in a new window)
Conference
December 2024 Learn about trivia and common pitfalls related to date and time
triviabest practicestimedate
Event link (opens in a new window)

Open Source

View all projects

Android Animation Disabler

(opens in a new window)
Tool for disabling animations on Android devices before automated UI testing.
KotlinAndroidCIGradleQATesting

Android Device Cleaner

(opens in a new window)
Tool for cleaning up Android devices on device farms.
KotlinAndroidCIQA

Android GIF Drawable

(opens in a new window)
Views and Drawable for animated GIFs in Android.
JavaAndroidGIFLibraryNDK

Android Gradle AOSP AAPT plugin

(opens in a new window)
Gradle plugin for setting AAPT options based on environment variables defined by AOSP build system
GroovyAndroidAOSPGradle

Android Gradle Localization Plugin

(opens in a new window)
Gradle plugin for generating localized string resources
Localizationl10ni18nGradlePluginGroovyAndroid

Android Pitest Gradle Plugin

(opens in a new window)
Gradle plugin for PIT Mutation Testing in Android projects
PitestMutation testingTestingGradlePlugin

Bitrise Step Build Info Jira Comment

(opens in a new window)
Creates comments for all tasks from pull request merge commits. It uses the commit message to determine which tasks should be commented.
BitriseStepJiraCI

Bitrise Step Device Farmer/OpenSTF Connect

(opens in a new window)
Bitrise step for connecting to Device Farmer or OpenSTF farms
BitriseStepDeviceFarmerOpenSTFCIgoTestingAndroidQA

Bitrise Step Flutter

(opens in a new window)
Bitrise step for building Flutter projects
BitriseStepFlutterCIgo

Bitrise Step Parse Composer Results

(opens in a new window)
Bitrise step for parsing Composer results
BitriseStepComposerCIgo

Bitrise Step Publish Composer Results

(opens in a new window)
Bitrise step for publishing Composer results
BitriseStepComposerCI

Bitrise Step Publish Spoon results

(opens in a new window)
Bitrise step for publishing Spoon test results
BitriseStepSpoonCIQATesting

Bitrise Step SonarQube Scanner

(opens in a new window)
Bitrise step for running SonarQube Scanner CLI.
BitriseStepSonarCI

Bitrise Step Trigger Bitrise Workflow

(opens in a new window)
Bitrise step for triggering workflow on bitrise.io with specified parameters
BitriseStepCIgo

Bitrise Step Update Jira Issue Field

(opens in a new window)
Bitrise step for updating JIRA issue fields
BitriseStepJiraCIgo

Bitrise Step VPNC Connect

(opens in a new window)
Bitrise step for connecting to Cisco VPN
BitriseStepVPNCCI

Device Farmer

(opens in a new window)
A web application for debugging smartphones, smartwatches and other gadgets remotely, from the comfort of your browser.
AndroidQATesting

FoQA

(opens in a new window)
Container for various Quality Assurance utilities to be included in QA/testing variants of Android apps.
AndroidQALibraryTesting

HipChat Gerrit Hooks

(opens in a new window)
Gerrit hooks sending notifications to HipChat.
GerritHipChatCIPython

JaCoCo Gradle TestKit Plugin

(opens in a new window)
Gradle plugin for JaCoCo code coverage in tests using Gradle TestKit.
JaCoCoTestingGradlePlugin

jspoon

(opens in a new window)
An HTML scrapper for Java/Kotlin, based on CSS selectors.
AndroidJavaHTMLScraping

MockWebServer path dispatcher

(opens in a new window)
A helper for dispatching MockWebServer responses.
AndroidQATestingLibraryKotlin

Plural Lint

(opens in a new window)
A developer tool to check plural translations in your project.
DartFlutterLinti18nl10n

Public Suffix License

(opens in a new window)
Source of Mozilla Public License 2.0 for tools generating libraries list
AndroidKotlinPublic SuffixLibrary

Shipkit

(opens in a new window)
Set of Gradle plugins and tools that streamline Java and Android projects release process
ReleaseGradlePlugin