In case anyone else didn't know.
"be aware that while Kivy will run in Python 3.3+, packaging support is not yet complete. If you plan to create mobile apps for Android or iOS, you should use Python 2.7 for now."
The major ones that come up are:
- Relatively large APKs, minimum size is about 7MB due to the size of the included python interpreter.
- Non-native widgets, Kivy draws its own widgets using OpenGL. They're quite customisable, but of course you never get behaviour quite like the native ones.
- App startup time. This is down to about a second on newer devices, but on older ones (or if the app does inefficient things before starting up) can be quite a bit longer, especially on the first run when some unpacking is performed.
I've seen some nice examples recently of apps that do a good job with Kivy itself (e.g. demonstrating more themeing than most and using android api functionality), like Kognitivo [1] and Barly [2]. I think these do a good job of showing what Kivy can do in practice. Used the right way it's also very performant for e.g. games (the low level graphics api is a cython layer over opengl), especially with the ability to add your own cython and use libraries like chipmunk. A good example for this is Boardz [3], which uses the Kivent game engine for Kivy [4].
[1] https://play.google.com/store/apps/details?id=org.kognitivo....
[2] https://play.google.com/store/apps/details?id=org.topbanana....
[3] https://play.google.com/store/apps/details?id=org.chozabu.bo...
And this can make the application entirely unusable for some users. I'm thinking in particular about accessibility for blind users, who need to use a screen reader, though other disabilities are also impacted. Basically, to be accessible, an application's UI components need to implement the platforms' accessibility APIs. Most non-native widgets don't do this, because it's a lot of work that most developers just don't even think about. As far as I can tell from a quick scan of the source, that currently includes Kivy. So beware that if you use Kivy and its non-native widgets, you'll be locking some users, admittedly a small minority, out of your app. Probably OK for a game; not so much for an application that's going to be used in a job or education.