Game Development, Graphics Programming, GPU, Computer Science

I packaged my game for Android. Overall it was mostly painless – especially since I already had some experience with Android on my cross-platform (C++ GLES2 SDL2 CMake) project (in which I had to do everything “from scratch”). UE4 did most of the work for me, but I still did run into a few Android-specific issues that I had to debug.

I had to package my XML files as part of the .pak file – otherwise even my Windows package would crash. Instead of StaticLoadObject() I used ConstructorHelpers::FObjectFinder() – I didn’t verify it but I think this was required to mark the referenced uasset as used so that it will be included in the package. I fixed a few C++ compiler errors that I got with the Android NDK compiler (that I hadn’t got with Visual Studio 2015). I updated the splash screen. I’m able to see my UE_LOG() messages over USB with (adb logcat) or (adb logcat -s UE4 -s Debug).

The final issue I ran into was that one of my textures was too big. I posted a question late at night when I ran into the issue, and then the next night after work I figured it out and answered my own question ( https://answers.unrealengine.com/questions/443479/android-process-has-died.html ). Most GLES2 devices (including my Kindle Fire) have a max texture size of 2048×2048, so I had to resize my game’s board texture size to 2048×1642. Unfortunately, (adb logcat -s UE4 -s Debug) didn’t print any helpful error messages about this. libEGL gave a message (E/libEGL (11423): called unimplemented OpenGL ES API), and I guessed the large texture was a likely reason.

I didn’t implement tablet-specific controls yet, but I did try connecting a bluetooth keyboard. The keyboard works just like it does on Windows desktop except that for some reason the Esc key doesn’t work (weird!). Tablet controls are of course on my TODO list.

I’m glad I tried this now rather than later because when new Android-specific errors arise, then it will be easier to debug. I’ll close with some photos of the game running on my Kindle Fire: