Many months ago I got a new Google phone (specifically the HTC Hero) and wanted to immediately programming an application for it. But back then I was stuck in vi/emacs or GTFO mode that I have previously discussed and found developing Android apps in vi to be completely unreasonable. So while I’ve gotten over that whole mentality, I thought that the app I had in mind was just simple enough that learning the whole Android framework would be a bit too much. With that, I did a random walk across the internet and stumbled across the solution to my problem: Google App Inventor.
App Inventor aims to be something like Visual Basic was for beginning programmers: it provides a very simple interface and programming language that lets you build apps extremely quickly. It’s currently in a private beta, so I signed up a while ago and after about two to three weeks I finally got access. In the general case, users install the App Inventor app on their phone and then access a web interface that lets them design the UI and event handlers for their application. The UI designer is a web page that looks like this:
So like I’ve said: it’s basically Visual Basic for the Android. You have all the UI components on the left and you can customize their properties in a straightforward manner. For programming the event handlers (e.g., what to do when a button is clicked), they have a Java Web Start app called the Blocks Editor that lets you write these blocks of code in their own programming language, using the Open Blocks Library. Here’s a screenshot of what that looks like:
The app I ended up designing was basically a phone app that talks to Active Cloud DB – in a nutshell, the user can get or put values in the phone and the operation will be performed against our App Engine app. Interestingly, the simplified App Inventor interface almost prevented me from writing this app – it was only do-able because App Inventor had a component that talks to App Engine (specifically, the TinyWebDB component).
App Inventor isn’t that complicated, so unlike other programming languages, there’s a lot less to learn. With that, here’s my report on it after a week of messing around with it:
- App Inventor is really easy to learn, and this is greatly helped by pretty cool tutorials that introduce all of the main components that App Inventor supports. The more complex tutorials are actually really cool too – they’re apps I would want to use, which is orders-of-magnitude beyond how most programming languages or environments sell themselves.
- In line with the previous note, most of the documentation is also nicely done. Users are neatly led up the difficulty curve of what App Inventor offers and does so with each example building on the last in just the right way.
- The mailing list is very active – it looks like most questions get answered in a timely manner and since the framework is pretty simple, it means that the questions asked tend to be simple as well. This has the added benefit that any users who have actually written an app with it can answer a majority of the questions answered on the list without too much trouble.
- When App Inventor works, it really works great. The interfaces appear to have exactly what you need to build you app and nothing else cluttering up the screen, and once again, the interfaces gain a lot of simplicity from App Inventor being equally simplistic.
- I keep saying App Inventor’s greatest strength is its simplicity – this may also be its greatest weakness. The main concern I see from reading the mailing list and talking to people about it is that the components it sets out appear to constrain you to a certain style of applications – what I have hilariously heard referred to as “fart apps”, where you basically have a picture and then when you shake the phone it makes some kind of sound. The popular versions of these apps I’ve seen are a lightsaber app that makes the whoosh sound when you shake it and a beer app that makes a drinking sound when you tilt it. The only counter-argument I can think of to this is that with enough creativity you can make simple apps that are outside of this domain (like my Active Phone DB app), but again, since the framework is very simple, it’s hard to get too far away from these types of apps.
- I almost gave up on App Inventor before I began – it requires Java to play nicely in my browser, and as I am on 64-bit Ubuntu Lucid (what I would believe to be a very common version of Linux), it just doesn’t work. I’ve got OpenJDK installed since Ubuntu doesn’t like SunJDK and Ubuntu definitely makes it a pain in the ass to install SunJDK on it and (not necessarily Ubuntu’s fault) getting any kind of Java to work in Chrome or Firefox was completely impossible (that is, without likely destroying the state of my very necessary work computer). I only got it to work by abandoning my Linux box and using a Mac I had around, which worked perfectly – I was up and going in a matter of minutes. Unfortunately, the state of Java’s future on the Mac is looking grim, so it is not clear whether future users of App Inventor on the Mac will be able to use it as easily as I did. The fact that App Inventor is in Beta does not look like it will be able to help – Java’s been around for a long time now and if Web Start isn’t supported in Linux out-of-the-box, it likely won’t in the future. And if Apple is going to abandon Java, it isn’t clear that it will retain a first-class experience for future users (in fact, it probably won’t).
- I certainly didn’t try to install App Inventor on Windows, and it looks like that was a good idea – the mailing list is plagued with people having problems installing it there. This has a bit more hope than on Linux – I think that this is really due to the ‘Beta’ tag, and that it will be a lot easier to sort this out and solidify it for the true release.
- A bit buggy – random error messages show up and disappear too fast for me to write down, but App Inventor still seems to work. Again, once it gets out of Beta this should be fixed, so no big worries here.
- Your apps must all share a single screen – again, keeps things simple but makes it hard to write “real apps”. I originally wanted a screen to let users retrieve data, another to store it, an about page, and another to tie them all together. But as this was impossible, the final app (seen in the screenshots above) had to jam it all into a single screen, which was nice because it meant that my final app is really simple (again!) but I doubt it would have been usable if I wanted to do anything more with it.
- The weekend after I installed App Inventor on my phone, it became unusably slow. By this I mean a 2x to 3x performance degradation and (as an example) finding the first person’s information in the phone book takes a good 20 seconds from when I hit “menu” to unlock the screen. Many people on the mailing list look like they had to reinstall their phone drivers, but for me, I just upgraded to the newest version of the OS (which has the side effect of erasing all the programs) and my phone feels faster than ever. But the golden question: should I reinstall App Inventor? For now the answer is a resolute no. I’m done writing my app and backed it up and can’t risk my personal cell phone turning into a brick again (and I don’t have a work phone to mess around with). It also experienced quite a bit of Byzantine behavior – the process that received text messages crashed last week and since the process doesn’t say “I’m the guy that receives text messages and since I crashed you will no longer receive them until you reboot your phone” it meant that I was able to send text messages but couldn’t receive them and didn’t know I couldn’t receive them, which made for a number of annoying conversations. Again, I don’t know if this was because I installed App Inventor, but a number of crashes like this occurred only once I had App Inventor on there (e.g., the sample apps like HelloPurr lost some functionality periodically) and now that my phone actually works again, I’m not going to risk it.
So that’s my take on App Inventor. It’s pretty cool but in its Beta state (and its Java state) it has a number of shortcomings. Don’t think it’s like GMail Beta where it really worked well but occasionally had a quirk or two – App Inventor really is Beta. Its future thus looks mixed: App Inventor will get a lot better as the Beta label comes off, and I really had fun learning how to use it. I also got a cool app for free out of the deal, which is more than I can say for most projects. Unfortunately the tie to Java means that there are some problems that will be much harder to fix, and since they are Java’s problems first and App Inventor’s problems second, it means the probability of fixing them feels a bit lower. But I will keep an eye out on it: if the non-Beta version looks like it won’t bust my phone, maybe I will give it a try again.