Introduction

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.

Measurement units

Let’s start with the units of measurement, from the smallest ones to the largest.

Seconds and milliseconds

The smallest unit used everyday is…


Originally published at The Droids On Roids Blog.

Do you want to develop an app like Giphy Cam? Learn what challenges you can expect during your GIF app development.

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.


The background

Android Jetpack’s Navigation component is the modern solution for navigating between screens in Android apps. It supports both activities and fragments (including dialogs). What is more, it allows to pass data to destinations.

Unfortunately there is a snag. If you read documentation carefully you’ll find the Proguard considerations section. So every time you use non-primitive argument types you have to remember to either annotate its classes with@Keep annotation or add corresponding -keepnames rules to Proguard/R8 configuration (of course if you don't obfuscate your code then this problem is irrelevant but most apps are obfuscated).

However, it’s not a perfect solution…


Setting up Android projects on Bitrise CI

Background

At Droids On Roids, we use Bitrise.io for continuous integration and continuous deployment of our mobile projects. In order to do its job efficiently, Bitrise needs to be configured properly. Let’s take a look at how we did that in one of our recent Android projects!

Disclaimer

Each project and development team may have different needs. There is no silver bullet that suits all the projects in the world. Workflows mentioned in this article are not meant to be copy-pasted but rather should be treated as examples and bases for customizations.

Kinds of workflows

We can divide…


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.

Background


You may think that CI (Continuous Integration) consists only of technical tasks like unit testing, code compilation or static code analysis. However, sometimes you may want to put a little bit of fun to boring build logs :) If you are familiar with Jenkins you may have heard of Chuck Norris plugin which among others adds funny facts/jokes about Chuck Norris to the builds.

Before I will show you how to add such functionality to Bitrise.io, let me explain, what Bitrise.io is.

What is Bitrise.io?

Bitrise is a Continuous Integration and Delivery (CI/CD) Platform as a Service (PaaS) with the main focus on…


Background

Bitrise.io is a Continuous Integration and Delivery (CI/CD) Platform as a Service (PaaS) with the main focus on mobile app development. Bitrise provides ready to use integrations with popular, widely used tools, like Gradle, Xamarin or Xcode. However, integrations for niche and/or brand new tools may not be available out of the box immediately. Usually, the fastest solution is to write an ad-hoc shell script. Nonetheless, scripts are also the hardest to reuse in multiple projects.

Moreover, shell scripts are often not suitable for complex actions. Is there a better way? Of course!


In this article, you will find 12 useful GDPR Use Cases for App Owners, Product Owners and everyone who wants to develop a mobile or 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!

Written by Krzysztof Werner & Karol Wrótniak

INTRODUCTION — BASICS ABOUT GDPR

What is GDPR?

The General Data Protection Regulation (GDPR) (EU) 2016/679 is a regulation in EU law on data protection and privacy. Its aim is to give explicit control over personal data to its subjects. The Regulation was adopted on April 27th, 2016 and it becomes enforceable from May 25th, 2018, after a two-year transition period.

So, May 25th, 2018 is a red-letter day for many companies. It’s a major change regarding data privacy.

Who is GDPR directed to?

Citizens of the entire EU, as well as Norway, Iceland, and Liechtenstein, will become the subjects of GDPR but the regulations…


This article shows a few tricks which can help you developing string resources for Android applications.

How can percents make code sick?

By default string resources are so-called formatted. It means that they can be potentially used for formatting. Here is a simple example:

Lint performs checks on formatted strings and will complain if it encounters string like this: %d of %d left. The error message in such case is Multiple substitutions specified in non-positional format; did you mean to add the formatted="false" attribute?.

One may think that adding formatted="false" attribute is a proper solution (in fact there is no other direct suggestions how to…


In this article, we’ll show how race conditions affect Android runtime permission system.

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.

Race condition & Time of check to time of use — what does it mean?

Firstly, we need to explain some basic terms.

Race condition occurs if multiple operations occur at the same time and their order affects the result. A textbook example is two threads incrementing the same…

Karol Wrótniak

Android Developer @ Droids On Roids

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store