Hello world in Scheme for Android
(This has been updated here.)
Google's phone operating system "Android" is based on a custom Java virtual machine on top of GNU/Linux. So it occurred to me: How difficult would it be to get a Kawa application running on Android? Not that difficult, it turns out.
Here is "Hello world" written in Kawa Scheme:
(module-extends android.app.Activity) (module-name kawa.android.hello) (define (onCreate (savedInstanceState :: android.os.Bundle)) :: void (invoke-special android.app.Activity (this) 'onCreate savedInstanceState) (let ((tv :: android.widget.TextView (make android.widget.TextView (this)))) (tv:setText "Hello, Android from Kawa Scheme!") ((this):setContentView tv)))
It's got some annoying boiler-plate, though it's similar to the Java version; hopefully we can simplify later.
Here is how to get this program running on the Android emulator on GNU/Linux. (I haven't yet figured out how to get it working on the actual phone.) This article Android Phone development from the Linux command-line was helpful in figuring out what to do.
First you need to download the Android SDK. Unzip, in a suitable location,
which we'll refer to as
To get this to work I had to make some modest changes to Kawa, so you will need to get the Kawa developer sources from SVN.
You need to
make Kawa appropriately:
KAWA_DIR=path_to_Kawa_sources cd $KAWA_DIR ./configure --with-android=$ANDROID_HOME/android.jar make
Next, we need to create a project or activity,
in the target directory
with the main
activity being a class named
in a package
activitycreator --out KawaHello kawa.android.hello
Replace the skeleton
hello.java by the
Scheme code we started out with:
cd KawaHello HELLO_APP_DIR=`pwd` cd $HELLO_APP_DIR/src/kawa/android/ rm hello.java emacs hello.scm
We need to copy/link the Kawa jar file so the Android SDK can find it:
cd $HELLO_APP_DIR ln -s $KAWA_DIR/kawa-1.9.3.jar libs/kawa.jar
We also need to modify the Ant
so it knows how to compile Scheme code:
patch < build-xml.patch
Finally, we can compile our application:
Next start up the Android emulator:
Wait until Android has finished booting, clisk the menu and home buttons. Click the tab above the menu key to show the installed applications. Now install our new application:
adb install bin/hello-debug.apk
hello application should show up.
Click it, and you should see something like:
Some debugging notes
You will find a copy of the SDK documentation in
If the emulator complains that your application
has stopped unexpectedly, start
(Dalvik Debug Monitor Service), click on the
line in the top-left sub-window to select it, then from the
Device menu select
This shows log messages, stack traces, output from the
loggin method, and other useful information.
To uninstall your application, do:
adb uninstall kawa.android