Karol Wrótniak

Android & Flutter Developer, Public Speaker, Writer, Open Source Maintainer · info@-remove-koral.dev

Experienced Mobile Developer with over 12 years of expertise in native Android and Flutter app development. Skilled in creating Gradle plugins and Bitrise steps. Engaged in various projects, especially focusing on testing. A speaker at conferences and meetups such as DevFest, Flutter Global Summit, Mobile DevOps Summit, JDD Conference, Linux Academy, and more. Actively involved as a lead of Google Developers Group Wrocław, Flutter Wrocław, and Bitrise User Group.



  • Android
  • Flutter
  • Kotlin
  • Dart
  • Java
  • C
  • Gradle
  • Firebase
  • Sqlite
  • git
  • Docker
  • Linux
  • Bash
  • Github
  • GRPC
  • Bitrise
  • OpenGL
  • JNI
  • Jira
  • Confluence

Android Device Cleaner

Tool for cleaning up Android devices on device farms.

Read more…

Android GIF Drawable

Views and Drawable for animated GIFs in Android.

Read more…

Android Gradle Localization Plugin

Gradle plugin for generating localized string resources

Read more…

Android Pitest Gradle Plugin

Gradle plugin for PIT Mutation Testing in Android projects

Read more…

Bitrise Step Device Farmer/OpenSTF Connect

Bitrise step for connecting to Device Farmer or OpenSTF farms

Read more…

Bitrise Step Flutter

Bitrise step for building Flutter projects

Read more…

Bitrise Step SonarQube Scanner

Bitrise step for running SonarQube Scanner CLI.

Read more…

Bitrise Step Trigger Bitrise Workflow

Bitrise step for triggering workflow on bitrise.io with specified parameters

Read more…

Device Farmer

A web application for debugging smartphones, smartwatches and other gadgets remotely, from the comfort of your browser.

Read more…


Container for various Quality Assurance utilities to be included in QA/testing variants of Android apps.

Read more…

JaCoCo Gradle TestKit Plugin

Gradle plugin for JaCoCo code coverage in tests using Gradle TestKit.

Read more…

Wait! There's more..

See all Open Source Contributions for more examples!

Public Speaking

A collection of talks on meetups, conferences and webinars most likely on CI/CD, testing, Android and Flutter development, but not only.

Conference - State Restoration of Flutter Apps - Flutter Global Summit 2024

Discover how to use the state restoration API in Flutter to save and restore the state of your app. Learn how to use this API to save user progress and make your app more user-friendly. I’ll also discuss the benefits of using state restoration and the best practices for implementing it in your Flutter apps. Don’t miss out on this great opportunity to learn how to build better apps with Flutter!

February 2024
October 2023

Webinar - State Restoration with Flutter - Flutter Forward GDG Ludhiana Edition

Introduction to internationalization & localization in Flutter

April 2023
October 2022

Webinar - How to work around missing Bitrise features? - BUG — Autumn Edition

Short talk about missing features on Bitrise CI platform

October 2021
July 2021

Webinar - Utility Workflows - Bitrise User Group #7 | WEBINAR

Introduction to Utility Workflows on Bitrise CI

March 2021

Webinar - Creating own steps - Bitrise User Group #1 | WEBINAR

Introduction to Bitrise step development

April 2020

Webinar - How to create Bitrise steps - GDG Bitrise User Group #2

Introduction to Bitrise step development

March 2020

Conference - Mysterious properties of GIFs - Linux Session #16

The secrets and hidden capabilities of GIF files

June 2019
November 2018
October 2018

Conference - Bitrise.io and OpenSTF - CI on a device farm - Linux Session #15

Brief introduction to Bitrise.io and OpenSTF

July 2018

Wait! There's more..

See all Public Speakings for more examples!



Writing articles, courses and books about Flutter and Android development.

August 2022 - Present


Organizing and coordinating events, workshops, and meetups that focus on Google technologies.

January 2018 - Present

Android & Flutter Developer

Developing and maintaining Android and Flutter applications and libraries.

Working with clients from all over the world, on projects like Giphy, Livechat, Nice To Fit You and many more.

Creating tools and plugins for the CI/CD process. Recruiting, mentoring and training new employees.

March 2011 - Present



Wroclaw University of Science and Technology

Master of Science
Computer Systems and Networks

Article based on my master thesis: Combined Bayesian Classifiers Applied to Spam Filtering Problem

2006 - 2011


A collection of articles and blogposts I wrote on various topics, mostly on Android and Flutter development, but not only.

Concurrency with Coroutines in Android

Module 1 of 3 in Concurrency & Networking in Android Learning Path Module outcomes: Understand the role concurrency plays in software Learn how to manage multiple different tasks by using coroutines Able to deal with unexpected issues when running code in the background Covered concepts: Coroutines Threads and blocking Main Thread vs Background Threads Error Handling
June 5, 2024

Utilize Control Flow in Kotlin

Module 2 of 6 in Learn the Kotlin Language Learning Path Module outcomes: Branch code based on variable state using by either if or when statements Conditionally setup variables Use the various looping constructs to perform repetitive tasks Covered concepts: If / When keywords Branching logic For / repeat loops Break / continue in loops Null operators Elvis operator
May 22, 2024

Kotlin Coroutines: Fundamentals - Video Tutorial

Video tutorial for beginner Android developers who want to learn about threading, what coroutines are, and how to launch a coroutine in Android. Covered concepts: Blocking & Non-Blocking calls Synchronous vs. Asynchronous code Threads Main or UI Thread Posting data to the UI Kotlin Coroutines Coroutine Builders Dispatchers Jobs Suspending functions Coroutine contexts Coroutine scopes Nested coroutines
February 14, 2024

How to Provide Accessibility in your Android App | Part 3: Semantic Properties and Screen Orientation

Learn about various semantic properties and supporting many screen orientations. Check out how to create TalkBack-friendly composables.
February 7, 2024

Flutter vs. Kotlin: Choose the Best Fit for Your Project – Developers’ Guide

Choosing between Kotlin and Flutter? Every project requires a unique approach. Dive into our guide to learn about the strengths and weaknesses of each, and gain insight into when to choose Kotlin, Flutter, or Kotlin Multiplatform for your development needs.
December 21, 2023

Flutter Networking Tutorial: Getting Started

In today’s world, smartphones are the primary hub for many activities: entertainment, banking, photography and videography and shopping, among others. To do many of the things their users request, the apps on your smartphone need internet access.
November 21, 2023

How to Provide Accessibility in Your Native Android App with Jetpack Compose | Part 2

Learn how to manage text size, scaling, focus order, labeling, and content descriptions to ensure your Android app is perfectly accessible.
August 24, 2023

How to Provide Accessibility in Your Native Android App with Jetpack Compose | Part 1

In this article, you’ll learn how to create accessible mobile apps for Android OS. It’s quite important nowadays. There are more and more users for who accessibility matters. Additionally, more and more laws require app owners to support accessibility.
July 15, 2023

SSL Certificate Pinning in Flutter

By default, the server identity checking bases on the chain of trust. The system or browser has a list of trusted root CAs (Certificate Authorities). Those CAs, in turn trust the intermediate CAs, which finally trust the owner of the domain. The clients accept every trusted certificate. Including those issued in the future. Yet, we can configure the application to trust only given certificates. The latter is a certificate pinning.
March 23, 2023

State Restoration of Flutter App

Android and iOS can interrupt app processes to optimize resource usage. The system can kill apps in the background to gain more memory and CPU for the foreground. A killed app will start from scratch when a user brings it back. However, the user expects to see the same app state as when they left it instead of starting over again. In this tutorial, you’ll see how to preserve the state of Flutter apps when the system decides to kill them.
March 15, 2023

Flutter for Windows Desktop: Getting Started

Developers often use Flutter to develop mobile apps. Starting from version 2.10, it supports Windows as a target platform. Let’s check how to develop the production-level Windows apps with Flutter. In this tutorial, you’ll learn how to set up a development environment and create a simple calculator app. We’ll focus on key concepts and basic business logic operations.
August 12, 2022

Edge Cases in App & Backend Development. Part 4 – Dates & Time

You may think that dealing with dates and time is easy. We have a minute that lasts 60 seconds, an hour with 60 minutes, a day with 24 hours, a week with 7 days, a month with 28 to 31 days, and so on. Surely no rocket science is required here… Well, nothing could be further from the truth! We will show the traps and pitfalls related to date and time that you may encounter during application and backend development.
April 26, 2021

How to Submit an App on Google Play? Guide & Checklist for Non-Developers

Publishing your Android app on Google Play is not only exciting but also a crucial element of your application development process that influences its final success. Will your app be submitted, will it be popular, and will people download and install it? All this and more depends on how fruitful your release will be.
January 22, 2021

Internationalizing and Localizing a Flutter App | How to Develop an App with Flutter – Part 7

Are you interested in internationalizing and localizing your Flutter app? If yes, you’re in the right place. In this article, we will make our Smoge app multilingual. More precisely, we will explain how to easily localize and internationalize your Flutter app, making it accessible to users in different locales.
December 16, 2020

GIF App Development – How to Develop GIF Encoding

In this article, we’ll briefly list libraries that can help you with GIF file encoding which is an important part of GIF-maker app development process. Note that projects are constantly evolving, some get deprecated, other new ones appear.
September 2, 2020

GIF App Development – Challenges & Tips

In this article, we’ll discuss animated GIFs creation on Android platform. If you want to develop an app like Giphy Cam or GIF Maker & GIF Editor & Video Maker, it’s worth knowing what challenges you can expect during a GIF maker app development, and how to face them.
July 6, 2020

Flutter Project Setup | How to Develop an App with Flutter – Part 2

Whether you want to work at Flutter development company or be a freelancer, this knowledge will help you to become a Flutter developer. Before we start writing the code of our app, we have to set up the environment.
February 18, 2020

How to Distribute Android Libraries

Even the best library is barely usable if potential users cannot get it easily. That’s why every library should be distributed. In this article, I show you how and where you can publish your libraries in the most efficient way.
April 12, 2019

How to Create Bitrise Step in Go – Flutter Example

In this article, we will show you how to create & publish your own Bitrise step, using the example of Flutter. We will focus on programming in Go, which is the main language used by Bitrise.
May 7, 2018

Android Strings XML Tips & Tricks

This article shows a few tricks which can help you when developing string resources for Android applications.
January 17, 2018

Edge Cases to Keep in Mind. Part 3 – Time of Check to Time of Use Race Conditions in Android UI

If you are a developer you’ve probably heard about race conditions. They are often associated with concurrent background operations performed in the fractions of seconds. However, certain race conditions may also appear in UI and last for the infinite time. In this article, we’ll show how race conditions affect Android runtime permission system.
December 14, 2017

Edge Cases to Keep in Mind. Part 3 – Time of Check to Time of Use Race Conditions in Android UI

In this article, you will find 12 useful GDPR Use Cases for App Owners, Product Owners and everyone who wants to develop a mobile app. You will also read about the basics of GDPR – What it is, Who it’s directed to, How high penalties are and – the most important question – What does it mean for App Owners? Let’s check if your app is GDPR-compliant!
December 14, 2017

Testing Android Apps with Pseudolocalization

The length of translated text is likely to be different from the original. Depending on the source and destination language, it may vary significantly. Moreover, the same text translated to some languages may use acronyms, while in others there may be fully expanded phrases. Let’s check how to test such cases without the need to know all the languages in the world.
October 20, 2017

Edge Cases to Keep in Mind. Part 2 – Files

Did you know, that there may be a File which exists and doesn’t exist at the same time? Are you aware, that you can delete a file and still use it? Discover these & other files edge cases in software development.
September 27, 2017

Edge Cases to Keep in Mind. Part 1 – Text

No matter if you are a software developer, a copywriter or you’re just writing an e-mail, text has many traps you need to be aware of. Some may cause numerous issues, from bugs in your app through visual artefacts to even victims! Let’s take a look at how we can avoid them.
July 29, 2017

Android Gradle configurations

There are several ways to declare dependencies in Gradle. What is the difference between them? Which one should you use? Check out this article to find out!
September 1, 2015

Combined Bayesian Classifiers Applied to Spam Filtering Problem

This paper explores the design of effective spam filters using combined Näive Bayes classifiers. We discuss various tokenization methods for extracting valuable features from emails, creating diverse training sets for individual Bayesian classifiers. Through computer experiments on our spam dataset, we compare different fusion methods based on class labels and supports to determine the best approach for ensemble evaluation and establish our final proposition.
July 6, 2012

Wait! There's more..

See all Articles for more examples!

Nifty tech tag lists from Wouter Beeftink