Like it or not, Amazon is going to be selling a lot more Kindle Fire Android tablets. From a developer’s point of view this is a pain – we simply don’t need more stuff to manage, be that platforms (i.e. new OS like Windows Phone) or app stores (like non-Google-Play Android stores). Amazon’s motivation and business plan is as clear as day and they will have some degree of success. Here’s some of the things I’ve noted
Submission
You need to create some extra graphic material for each app. This isn’t just app store candy, this is burned into the APK that Amazon distributes when end users acquire your app from the Amazon store and is used for the carousel to give a nice hi-res icon. So, beware, this isn’t just a ‘company logo’ – it’s your app icon so if you have multiple products, you need to make discrete artwork for each app you upload. Whatever you put in your AndroidManifest.xml for android:icon is basically ignored in the Amazon Kindle Fire world.
Approval
Amazon does test your app, just like Apple does, but I expect not as thoroughly. It takes, perhaps, a couple of weeks to get through the process, particularly for your first app. Google does things the other way around; upload is unfettered and they randomly check apps for content rating, etc. some time later. Perhaps this is part of the secret of Google Play’s success, 700,000 apps in their catalogue at the time of writing.
The APK
The APK that Amazon distributes is not the one you submitted to them for distribution. The Mozilla team noted this and, understandably, got upset and pulled Firefox from the Amazon app store. Here’s some of the fiddling that Amazon does with your APK product prior to distribution:
- Change the APK name – they change it completely – adding spaces in the file name and burn the version number into the filename
- Add some license agreement texts (e.g. GPL and LGPL) – don’t know why or whether this is done for every app.
- A digital signature in a file named
kiwi
. - Add some ID (probably for DRM) in a file name that starts
com.amazon.content.id...
- Add some DRM code into your app. Well, quite a lot of extra DRM and logging code. They inject calls to com.amazon.Kiwi.onActivityResult, com.amazon.Kiwi.onCreate, com.amazon.Kiwi.onCreaateDialog, com.amazon.Kiwi.onDestroy, com.amazon.Kiwi.onPause, com.amazon.Kiwi.onResume, com.amazon.Kiwi.onStart, com.amazon.Kiwi.onStop, etc. into your product, your software. Most of these calls end up in com.amazon.Kiwi.preProcess which does logging of calls and parameters using, ultimately, android.util.log. A lot of the classes that Amazon stuffs into your product under the com.amazon.android.* package tree is obfurscated – which is even more unnerving. One now gets the feeling that this is now not your product, it’s more like Amazon’s product. Apparently the apps require Amazon’s appstore APK to be installed in order to function. So you’re, technically, not going to be able to use a back up tool to copy an APK off of a Kindle Fire and use it on, say, your Nexus 7 (although that isn’t true of the reverse). There’s some more detail here.
- Somewhere in there they must put the hi-res icon for the carousel. I couldn’t find out where. Or perhaps it comes down as a side download from the Amazon app store.
Whilst this is all rather creepy, I can’t ignore the potential market of people trapped in the prison of the Amazon Kindle Fire world. At the low price, many, many people will be tempted by Kindle Fire this Christmas and I want some of their business :-).