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.
Let’s start with the units of measurement, from the smallest ones to the largest.
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.
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
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!
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.
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.
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.
Bitrise is a Continuous Integration and Delivery (CI/CD) Platform as a Service (PaaS) with the main focus on…
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! …
Written by Krzysztof Werner & Karol Wrótniak
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.
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.
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.
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…
Android Developer @ Droids On Roids