Mar 10, 2014

Report : What content makes up an Android Game?

Lately, I’ve been seeing a lot more extended-content apps showing up in my Android game playing habits.That is, games which boast a 1.2mb download, and then require me to wait an extra 20 minutes while it brings down a brand new 1gb file after launching the game. Besides the un-announced hefty download (which, by itself has caused me to un-install a number of apps w/o ever playing them), while the games are manually downloading this content, I’m stuck with a useless phone; If i exit their app, I have to do the whole damn thing over again. Which again, leads to a quick un-install.

I've written games with 1GB of content, and most of these titles I'm playing should not, in any form, be that large when it comes to their data. What it the hell is going on with these things?

In standard engineer fashion, I decided to start understanding what the hell was going into developing these games, specifically where the content footprints for these applications was coming from. It would be extremely useful to have a global httparchive for android apps; that type of high-level analysis of the ecosystem would be extremely useful, especially in the context of what data is the most bloated.

But sadly, for the Android ecosystem, that does not exist.

So, I wrote my own.

My test comprised of:
  • Grabbing the top 60 games from Android’s Free, Paid, and Grossing categories.
  • Opening each one, extracting the contents, and keeping track of the file type, and size
    • In the case of Unity or flash games, disassembling the packages properly.
  • Logging and making sense of all this data

And here’s what I found.

Large Disclaimer : This test is not an official statement by Google, Google Play, or any of the content developers. This analysis and content is based on my own research. Also remember that content sizes mentioned only analyzes data provided directly in Google play APK files, and does not include any content that may be downloaded by the application post distribution, outside of OBB files.

1. If you want a top free game, stay around 40mb.

Regardless of your medium, it’s pretty easy to draw correlations between app sizes and conversion rates. For instance, a user may browse away from a website if it takes too long to load (perhaps a function of the 2.5mb of assets it uses?), or perhaps a user can’t download your app while off wi-fi, because the size of your app will incur network charges. Based on my tests, you may be able to see a similar trend for Mobile App marketplaces.

From the look of things, there seems to be a self-selecting market size for apps, that in general there seems to be a specific selected limit for the size of an application, against it’s purchase price:

Free Apps seem to sit comfortably around 40mb; Which makes sense, I suppose, 40mb on a 3G network would take around 3 minutes to load (est 0.21mb/sec on 3G). Keeping your app as small as possible makes it quick and easy to install for users, of coruse decreasing the amount of friction around acquiring a user. 

At the complete other end of the spectrum, paid apps tend to, by their nature, define a different sort of engagement for their customers. Paying more money up-front lends itself to a larger content option; that is, higher visual quality requires more content, which manifests itself in a higher asset footprint. I suppose the fact that the user has already purchased the content means they are invested in it, and are willing to spend the time to wait for the content to magically appear on their device. What's even crazier is that the Median for the top-paid is about 74MB. Wow.

2. Expansion files are for the premium birds

Android’s APK Expansion files are a nice feature for developers looking to bring their content to Android w/o trying to cram every bit into the restrictions imposed by the base-level APK. These extra files (typically containing the .OBB extension) files were intended to be used by developers to reduce the initial download time for an app, and then bring in additional content as needed. In reality, they are now, generally being used to move past the upper limits of what the maximum APK size should be. In the chart below, you can see the breakdown of the number of apps using OBBs for their data content.

1/ 60
5/ 60
16 / 60

These numbers makes sense. Normally the user-developer purchase contract for a premium game is along the lines of “I like your game, will pay for it, and am willing to wait for it to download.” As such, these tend to charge a bit more money, and as a result, have a higher asset footprint, meaning they will need to store more asset data, and more OBBs show up.

3. APK content is mostly images.

When you've written seven or so game engines for various companies, you start to see a trend that regardless of your game type, the dominant asset footprint seems to always comes from textures. And it doesn't seem to matter if your app is free, or paid, the breakdown in assets seems pretty consistent:

Textures regularly comprise of over 50% of your asset package (for known extensions…). What I didn't expect, however, is how much overhead is generated by code files. It represents more than all the sounds, text, and font files combined! Digging deeper, it appears that this is due to shipping multiple .SO files in a given APK, one for each architecture (x86, ARM, Mips, etc).

4. Game developers LOVE random extensions

So I lied a little in that last section. The real asset breakdown, according to my analysis, looks a lot more like this:
That massive ‘unknown’ section comes from file extensions that I didn't recognize, or couldn't determine the content type for.  In my analysis of 161,225 files from 180 APK files yielded 326 unique extensions.
What the hell are game developers doing?

Sure, there’s lots of file types : Code, Text, Sounds, Textures, Levels, Physics, Videos, Meshes, Animations; Even if you had 5 variations of each of these file types, that’d still amount to about 50 file types. Where the hell is 326 files coming from? Are some developers just renaming their PNG files after their initials for no reason?

Sadly, this content skews my results in an fashion; For all I know, these could be binary files that are processing Human Genomes, or they could be Texture data..

5. Developers LOVE PNG files
When you look at the breakdown of the image types, you end up looking at a graph that looks like this:

There’s a couple striking things from this graph:
  1. Even with the explosion of middleware out there, the number of GPU specific textures is still in the minority. (Entirely opposite from other gaming consoles.)
  2. There’s way too many goddamn PNGs
  3. There’s not a lot of love for WebP

Note, this explosion of PNG files does not simply come from the fact that Android requires .PNG files for their icon formats. No no, these numbers are from developers using PNG files for their games. I estimate that there's dominant reasons for this:

  1. PNG files are required for icons on android platform
  2. 2D games tend to default to PNGs for their spritesheet content.
  3. PNG natively supports alpha, which is easy for developers to understand.

To be fair, PNG holds some nice properties. It can be lossless, compressed with GZIP, most editors 
support exporting, Alpha support, and its’ decompression speed is pretty fast. But, as I’ve talked about before, PNG is a less than ideal option. As a game developer, I’d work my best to put everything in a GPU format. Sadly in mobile, that’s not an easy thing to do, since there’s a massive fragmentation across devices for supported texture formats. But really, there’s no reason to leave it all in uncompressed PNG data. Come on man, that’s just mean.

In Conclusion

As a developer, this type of information is quite useful to me. It gives me a sense of what type of decisions developers are making out in the ’real world’ ™. I’m really surprised about how much overhead is coming from code files


You can find Colt McAnlis here:



  1. amazing article!

  2. Halo Teman, lama saya cari-cari akhirnya ketemu di blog ini.
    Konten yg sangat menarik, Jadi senang berkunjung di sini, Makasih ya sob.
    Salam best Friend :
    Jual Plat Stainless,
    jual Plat Aluminium,
    Lisati Indonesia,
    Lia Property Indonesia

  3. Android Game Download: Tekken 3 APK iso - Tekken 5 APK iso - Tekke 6 APK iso Fighting Gama Download

  4. I like your post, Thanks for sharing this such informative blog.

    The only game where your earn while you Play.
    Movie based Trivia game.

    Download here: Quizambo - earn Money & play this game


  5. Nice blog very useful content and Thanks for sharing.....

  6. The blog is really nice one and full of information. Nomao Camera App For iPad Download

  7. Dealing with PNG is much difficult. It takes a lot of effort to manage it.
    jersey boys schedule
    jersey boys tour dates

  8. Very nice post.really I apperciate your blog.Thanks for sharing.keep sharing more blogs.


  9. nice article.thank you for sharing post.
    web programming tutorial

  10. This is the best Games blog.Thank you for providing this information. Your all posts are very informative . thanks for sharing it. Best of luck From Team Rally Racing

  11. PNGs are simple and lighter. Also the coding for it is pretty straight forward.
    Manchester park and ride
    cheap park and ride Manchester