Sign in

Oliver Spryn
I’m connecting people with technology, seamlessly. Since 2008, I’ve been a software architect and a leading engineer, delivering smart and intuitive software.

The handguide for a manual setup

Almost as easy as a brew install

I recently switched my shell from Bash to Zsh, and after installing my new favorite extensions (Powerlevel10k and Meslo Nerd Font), I realized I was missing a key component from Bash: Git completion.

Since we don’t all have the luxury of running brew install bash-completion and following the associated directions, I’ll discuss how I manually installed the shell scripts necessary to support Git completion in Zsh.

By Sai Kiran Anagani on Unsplash

Finding the Dependencies

The Git community maintains all the shell completion scripts in their repository on GitHub. Navigating to this folder reveals scripts for a variety of shells, including Bash and Zsh.

95% and above coverage ratio is not a pipe dream

The journey begins at the start of your project

Sometimes, you have to say it straight: Google does not build Android with unit testing in mind. Even as recently as API 30, the platform continues to evolve in this unfortunate direction, making critical components of your app increasingly challenging to test. Thus, if you want to build an app with 95% or higher code coverage, then the burden lies with the app developer to make this a reality.

Yet is it such a burden to achieve such a respectable amount of code coverage? …

A thorough guide to setting up a more secure development flow on your machine

Photo by Georg Bommeli on Unsplash

Git is full of useful commands, powerful capabilities, and often overlooked features. One of its hidden gems is its ability to sign commits and tags with a key. For this job, Git turns to GPG, a widely-adopted and open-source program designed for tasks such as this.

The team behind GPG, or the GNU Privacy Guard, describes it as a program that “allows you to encrypt and sign your data and communications.” This tool is useful for securing and cryptographically validating data sent via messaging applications, emails, and version-control systems, such as Git. …

Tips for a hands-off setup experience

A 100% command-line based solution to a working emulator

Photo by Irina Nalbandian on Unsplash

When it comes to setting up the Android emulator on a computer, most online tutorials start with “Download Android Studio.” Subsequent steps explain how to use the interface to pick the API and device profile before finally creating the AVD.

Point and click solutions often work well for the visual user or in cases where a one-time setup is all that is necessary to bootstrap a configuration for later use. Unfortunately, running UI tests on a CI or setting up a host of CIs for your team’s use, caters neither to the visual user nor to the prospect of doing…

For the times when there’s no app for that

Demystifying the three-step process by learning by example

Photo by James Hammond on Unsplash

You can find a Gradle plugin to do just about anything with Java. If you have ever worked on any modern Java application with this build tool, then you are no doubt accustomed to importing and applying plugins to the top of your .gradle files before you can build.

However, in some cases, you’ll encounter a missing link that cannot be adequately addressed by anything on the web. I have encountered this situation several times and was surprised how easy it was to mend this discrepancy.

The Blueprint

There are a few concepts I’ll discuss which do not readily appear in the…

Leveraging the open library to take it further

Extending Jetpack’s ability to navigate anywhere

New York City from the space
New York City from the space
Photo by NASA on Unsplash

With the introduction of Android Jetpack, developers now have a marvelous new set of libraries which offer an unprecedented level of simplicity and reusability. Before Jetpack’s debut, fragment and activity-based navigation often proved to be complicated, fragile, and nearly unique to each app on the market. Google has heard our pleas for help and given us the Navigation Component.

Current State of the Navigation Component

Since the preliminary release of the navigation component in May 2018, much of its functionality has improved, changed, and expanded. As of November 2020, the current state of this library offers native support for these destination types:

  • Fragments
  • Activities
  • DialogFragments


When Groovy becomes your Swiss army knife

Optimize your build times and gain back precious minutes

Gradle is a powerful build tool that reigns as the dominant choice among Android developers. Despite its popularity, the complexity of fine-tuned optimizations can sometimes baffle newer engineers.

One circumstance had me and my team at UPMC Enterprises scratching our heads for weeks. We needed to conditionally include or exclude entire plugins and their associated configurations from our build based on the selected type or product flavor.

By Maximilian Weisbecker on Unsplash

Establishing a Use Case from Experience

Anyone who uses Gradle should know that most builds include at least one plugin. For Android, at least, it is common to see these plugins applied at the top of a configuration file:

Oliver Spryn

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