As an Android developer, I have to fiddle with Gradle from time to time, but I never quite managed to get to a point where my thoughts resulted to a working Gradle configuration. My experience was always a frustrating process of extreme Googling ,trying things out and asking questions to the Gradle forums (which most of the times got answered). Publishing a library to Maven is not a trivial task, even though the situation has become as lot easier than what it used to be.

In my case, I had an Android Studio project that contained a pure Java module…


Google keeps changing the way apps can access shared files by adding and lifting restrictions to existing APIs to the point they had to write this.

The following is a simplified guide about the storage options of an app and how they differentiate between Android versions.

TLDR: not much have actually changed if you’re making a camera app. If you have a gallery or file app, then you have to do some refactoring.

In Android, an app has access to:

  1. private folders that only the app can see: getFilesDir(), getCacheDir() .
    /data/user/0/<package_name>/files
    /data/user/0/c<package_name>/files
  2. app-specific folders that other apps can see…


If you haven’t played the game (or seen the ending), you better stop right here, as the following contain spoilers.

After finishing Half-Life:Alyx, the role of G-Man became clear to me and all pieces simply fell in place. This theory may not explain every bit of the Half-Life plot, but it will let us understand the basic concept behind it. If you are expecting a 100% realistic answer you may be disappointed, as this theory has a more abstract approach. If you’re familiar with David Lynch, you’ll feel right at home. The quotes below are from G-Man at the ending…


I have been a happy PSVR user for more than 1 year and due to Alyx, I got the Valve Index. Alyx and the Index live in the PC space and playing with it reminded me of the difference between console and PC gaming in terms of tweaking and out of the box experience.

Alyx was built to work with a variety of VR headsets and different setups in terms of computing power. It comes as no surprise that it has various graphic options to tweak, on top of those provided by Steam VR such as “render resolution” and “motion…


Too good to be true right? TLDR: limiting the game’s framerate and enabling vsync effectively disables buffer queueing and thus input lag. Read the guide here.

The problem: No tearing VS lag

When playing games on PC, two are the most common problems: input lag, which is the delay between hitting a button and seeing the result on screen and tearing, which is when the image is split vertically. Tearing is caused by the fact that the GPU renders frames in a different rate that the rate they are scanned and sent to the monitor.

The oldest solution that solves…


That’s Silent Beast :)

My PC and my Macbook are the center of my digital-life (besides the mobile phone I use as my daily driver). I use my PC mainly for Android development, a bit of Unity development, gaming, photo-video editing and a lot of other smaller tasks. My previous PC managed to last 10 years after several minor upgrades to memory, adding SSD and GPU upgrades. However, it was time to move forward. From all the tasks mentioned, it may surprise you that building on Android Studio is one of the heaviest! It requires a lot of memory and a really fast CPU.


Resizing a bitmap is a quite common task. Let’s say you want to create a thumbnail from a source image; you will have to resize it to quite a smaller size. However, if you try to do that using the provided tools, you’ll end up with aliasing artifacts.

Android’s Bitmap class provides many methods that can downscale an image. Under the hood, it uses a Canvas and a Paint object that has bilinear filtering enabled. However, when scaling down an image, bilinear filtering is not enough to prevent aliasing.

In the images below, an image with `2880 x 2160` resolution…


Our efforts towards optimizing real-time video processing in Android.

If you targeting Android 4.3+ and you want to take advantage of the hardware video encoder, then you have to use MediaCodec for encoding video/audio frames into H.264/aac packets and MediaMuxer to write them in an mp4 format to disk. Grafika shows a plethora of scenarios where these 2 components are used. However, there is performance issue involved that we’ll discuss here.

One performance issue we faced on Horizon for Android was that MediaMuxer’s writeSampleData, would ocassionaly block for a couple of milliseconds to several seconds. The problem appeared on older devices and when writing to the SD card. …

Petros Douvantzis

Android & former iOS developer https://horizon.camera/

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