Purpose
Google Play requires all core APK application files to be 50mb or less. If your program is larger, you must split it into expansion file(s) delivered separately. Google Play hosts your expansion file(s) and may automatically transmit them to your customer along with the main APK, but they may not. If not you can host the expansion file yourself and download from your server, but that may cost additional money and have bandwidth issues depending on your hosting provider. If you want to download from Google Play, you must make a licensing check to retrieve the download URL. Marmalade does not currently support this, therefore you must step outside Marmalade and make native Java calls from within C++. If this sounds complicated, it is. Especially since there is no single source of documentation from which to figure out how to do this and you cannot use the debugger. This article attempts to set the record straight, or at least permanently wrong, on how to do this.
Intro
I am a marmalade C++ developer and we wanted to release our iPhone game Catch the Monkey to Android. The iPhone IPA build is 29mb, but the identical build for Android is a 78mb APK. This is because IPA files are compressed ZIPs and APKs are not (shame on you Google). Google Play limits APK file size to 50mb so I had to figure out how to use expansion files. This is relatively straightforward from a Java Android application written in Eclipse. It is much more convoluted going from C++ to Java to Google Play back to Java back to C++. It took me just over a week to make this rock solid.
Two thousand years ago a guy said we should treat people the way we want to be treated. He was promptly killed for saying outlandish things like this, but I try to follow his principles anyway. I wish someone would have documented how to do this, so here it is so no one else has to go through the week of hell I just had.