Sunday, August 12, 2018

Find a Way: Progress report 1

Find a Way prototype on
I decided to give the new game a working title of Find a Way. I think it's better than the original Cat and Mouse, because it suggests what your task is.

You can play the first prototype here:
It will be available for 30 days.

Right now, every time you launch the game, you get a random map created using a specified set of tiles. You can swap and rotate the tiles by selecting them and clicking another one or by clicking the arrow buttons that appear. To deselect a tile just click below the arrow buttons.

I'd like to implement drag-and-drop for tile swapping and a single tap for rotation, but it's more difficult than the current version, so I decided to leave it for later.

Let me know if you have any suggestions.

Saturday, August 4, 2018

A new project

cat & mouse
I more or less finished updating my metro apps and now the time has come to start thinking about something new to work on. I decided that I'd like to make a puzzle game, because it's fairly easy and it shouldn't take too much time. The game I'd like to clone is Cat & Mouse. Its rules are simple: you just have to create a 3x3 map using a set of 9 tiles and following a set of rules for each level. There are 48 levels in total but it shouldn't be too hard to come up with new ones, should I decide to do so. I already coded up a solver a couple of years ago when I had too much free time and nothing better to do. It can even make images of solutions and save them as jpg files. I'll keep you posted on the progress. Mind that it won't be blazingly fast.

Other than that, I'd like to refresh my Facebook Photo Gallery app on CodeCanyon, because the images in the description don't work anymore and the app itself got somewhat outdated. I'd like it to use Kotlin, WorkManger instead of SyncAdapters, Room and perhaps also Coroutines. I'll be upgrading all the items one by one when I won't be working on the game.

I also noticed that the Unity Ads API has changed and my Unity Ads Stats app won't be able to get the old access token that it needs, so I had to take it down from Google Play. Hopefully, I'll be able to fix it in the near future too.

As you can see, I'm not bored at all. In fact, I have a pretty busy time in front of me. Keep your fingers crossed so that I complete all of my projects. I'll be letting you know when I reach a milestone in any of them. Until the next time.

Tuesday, May 22, 2018


A couple of months have passed since my previous post, so I decided to let you know what I've been up to since then.

I had an interview at Facebook. I passed the phone screening and the online interview but I failed the on-site part. Apparently, they didn't like my approach towards the design question. The algorithmic part was much easier than I'd expected, but perhaps solving 150 tasks on LeetCode helped with it too. Let me know if you're interested in more details. I might write a separate post on it if you want me to.

I had a presentation about Kotlin Coroutines at the local Android Developers Group. It took me a lot of time to prepare but the result was quite satisfying and, as I've been told, people liked it and found it interesting. It reminded me that I like sharing my knowledge with others and I enjoy being challenged by public speaking gigs. Perhaps I'll do another one in the future. I only wish it didn't require so much preparation...

I went to Google I/O. I have to say it was quite an experience. Especially for someone going there from Europe. I wouldn't have gone there, had it not been for my current employer, Allegro, who paid for the trip and conference tickets. The talks were great, but you probably know it already, if you're half-interested in what Google is doing. The more exciting part was seeing all this from the first person perspective, going to the Shoreline Amphitheatre, riding a bus with Jake Wharton, chatting with other attendees, having a beer at a local pub in Mountain View, doing a trip of the Google buildings with a friend of mine who works there, and lots of small things like these. All in all, it was a fabulous adventure... not to mention the trip to LA we did with my workmates afterwards.

What I'm trying to do now is update my metro apps, because the number of active users exceeds 13k now and keeps growing. Then I might create a small game of some kind. I have a couple of ideas and my friend Tyna is constantly pushing me into going back to making games. You should check out her creations too: Hidden Paws and Sandmade. I don't have a lot of free time because of my five-month-old son but I should still be able to squeeze in an hour or two here and there.

I'll keep you posted on my progress and interesting events. Thank you for being so patient with me :)

Sunday, January 7, 2018

My new app: Unity Ads Stats

After finishing Blobby Volley multiplayer, I decided to go back to my Android roots and I made a simple app displaying Unity Ads statistics: revenue, impressions, CMP, fill rate, etc. It was a small two-month project, in which I had a chance to use Kotlin, Room, RxJava 2, Retrofit, MPAndroidChar, Facebook Audience Network, and adaptive icons. Check it out on Google Play Store. I hope it's as useful to you as it is to me.

Here are some screenshots, which also reveal my miserable Blobby Volley income, if you're interested. CPM is quite high though. If only I had more people playing...

I'll probably not be taking up any new projects in the near future because a month ago I had a son born and he is quite skilled at consuming large amounts of time. I may come back to some of my older apps and try to polish them a little. We'll see.

Sunday, October 22, 2017

Blobby Volley - multiplayer is coming

Almost 80h of work after releasing the single player version, Blobby Volley multiplayer is coming to a close. I already have a playable, although somewhat rough and buggy, version implemented. I expect the final polishes to take another month.

To be honest, I'm getting a bit tired of working on the game already. I'd like to finally see some results and find out if people will like it. Hopefully, I'll be able to reach my goal soon enough.

Blobby Volley - main menu with multiplayer

In the meantime, I'd like to share with you some stats from the game, as I promised some time ago.

Blobby Volley - active users

There are around 770 players every month, almost 250 per week and more than 50 a day.

Blobby Volley - engagement

All players spend a total of 4h to even 8h in the game per day and they usually open Blobby Volley just once.

Blobby Volley - location

Most players come from India, Germany and Iran.

Blobby Volley - demographics

Most players are male - only one in five is a woman. I have some players who are more than 65 years old.

Blobby Volley - earnings

I earn around $5 per month on the game, which is a miserable amount and I hope that implementing multiplayer will improve it.

The stats come from Firebase and Unity Ads console.

Now keep your fingers crossed for Blobby Volley Online getting finished soon. I'll do my best to get the game polished in as little time as I can. I might release a beta version in the meantime, so you might want to sign up for the beta program on Google Play, if you haven't done it already.

Sunday, July 23, 2017

Blobby Volley is out on Google Play!

Blobby Volley, the game that I've been working on since March, has finally been published. You can find it on Google Play. Give it a shot and play it if you haven't done it yet.

The whole project took me 142.5h to complete but I didn't just rewrite the AndEngine version of the game. I added analytics, Unity Ads, better AI, a menu system, more options and other stuff. I'm planning to work on the multiplayer now. I already started reading the manuals.

I'm curious to see if people will like the new version of Blobby Volley and whether the new video ads will bring any revenue. I'll keep you posted on the stats.

If you have any feedback, make sure to post it in the comments or email me directly. I'll also be grateful for any honest ratings and comments on Google Play.

Happy playing!

Have you been able to see this screen yet?

Monday, July 10, 2017

How to reduce a Unity Android game size by 10MB

I'd been working on my Blobby Volley game remake for a while and I'd been wondering why the output apk file was so large. The game used to have a size of around 3MB when it was written using AndEngine. So how did it grow to more than 25MB in Unity? I might have added some additional code but the graphic assets and sounds were all the same. I decided to investigate it a bit further.

I took the generated apk file and I put it in the apk analyzer tool that's built into Android Studio. You can find it in "Build/Analyze APK...". The results were quite interesting and led me to some further steps. BTW, if you don't know how to handle Android Studio, you can just change the apk file's extension to zip, unzip the file and analyze its contents manually. It won't be as efficient but it'll do.

What I soon found out was that what took the most space in the apk file were not my graphic assets nor my code but the native libraries in the lib folder. They were split into two subfolders: x86 and armeabi-v7a each of roughly 10MB.

I started thinking if I could get rid of some of them and it turned out that I could. The answer was to build the project for each architecture (arm and x86) separately and then publish them both on Google Play. This way each version would be around 15MB in size and it would be distributed to appropriate, compatible devices automatically. Here's how I did it.

I went to the Build Settings (File/Build Settings...) and I found Other Settings/Configuration/Device Filter. It was set to FAT (ARMv7 + x86). I switched it to ARMv7, built it and then did the same for x86, saving it in a different file and incrementing the version name and version code beforehand (Other Settings/Identification/Version and Other Settings/Identification/BundleVersionCode).

Then I followed the official Multiple APK Support guideline to publish both apk files on Google Play. It was quite simple. I just published the first file the normal way. With the second file, I removed the first version form APKs to deactivate, so it moved to the APKs to retain section.

This way, I have two active apk files now, both with a different version name and version code and both targeted at different device architectures. When someone installs my game from Google Play, they get only the version compatible with their device, which is now 10MB lighter. Yes, it costs me a bit more work to create two separate apk files and then publish them on Google Play but I think it's worth the effort. I created a script that builds the two versions from the command line but it's a subject for a different post perhaps.

I hope my investigation will help you make your Unity Android game leaner too. If something is not clear for you, make sure to post your questions in the comments and I'll do my best to answer them.