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.

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.

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