There is also http://code.google.com/p/android-scripting/ for running Python and other scripting languages on Android. I've used it in the past when I needed to use my phone as a fancy calculate and wrote some Python to perform the calculations.
I used it to hack together a small app for background data collection a while ago. The only problem was instability. I gave the script to family and friends to run on their phones and collect more data but it was a pain teaching them how to restart it when it died which it frequently did. Not sure if this has been resolved in the last 18 months.
I used it on my old htc espresso for a while now. Earlier this year I tried it on my friend's htc evo 3d and it didn't work. It seems that it didn't support arm11 devices. It is too bad since I was trying to convince him to try python :(. I don't know if it support arm11 devices now.
I don't understand exactly how this works. You have an Python API for controlling the UI, great, but... can you use the full Python capabilities and expect your app to be portable? If yes, How it works? Is the app compiled to Dalvik bytecode when ported to Android for example? Are you restricted to pure Python modules or something?
It works on Pygame for Android library which is the launcher. The code written is in python and cython with bindings to a few Android API's. The compiled code is python object code which runs on the launcher. It is not dalvik bytecode and not portable.
I have read a bit about this Python on Android, and it seems that uses Android's NDK, which allows to port C/C++ programs to Android. I wasn't aware that this was possible. I thought that only bytecode was allowed for security reasons.
It's free, and a fun little game. It feels non-native, but less so than some of the other apps out there. It interprets touch events smoothly enough, and runs well, though there isn't a lot going on so that's not a real indicator of performance.
The people who are wondering what is this project good for. Apart from the obvious ease of using OpenGL widgets to create your UI, it has other benefits too. For example: Imagine an interactive books app. This app is actually a store for interactive books. Using Kivy, you can update this app with both logic(code) and data(assets), thus introducing a new book. Initially your books may be low on animations but as you get better at it, you insert complex animations. All that without changing the base launcher code(well, except when the base launcher library is updated once or twice a year).