(.setText tv "Hello Android from Clojure!")

Gepubliceerd op: 18.I.2009 07:23 CET
Categorieën: android, clojure, java, programming

Ongeduldig heb ik met de Android emulator zitten spelen. M’n dev phone is onderweg en ik kan natuurlijk niet wachten tot ik ermee aan de slag kan.

Aardig aan het Android platform is dat het gebruik maakt van Java. Wat is jammer aan Android is dat het geen gebruik maakt van een JVM maar van de Dalvik VM. Klinkt rampzalig maar valt erg mee, Android blijkt een heel groot deel van het Java Standard Edition class libraries te implementeren. Dat stemt hoopvol en geeft het gevoel dat, in theorie, alle andere JVM talen (zoals Groovy, JRuby, Kawa en Clojure) ook te gebruiken zijn op z’n Android telefoon.

Natuurlijk is het allemaal maar theorie en in wat voor bizarre wereld zouden we leven als dat ook echt zou kunnen?! :) Toch maakte Per Bothner me nieuwsgierig met zijn AndroidHelloScheme post en ben ik aan de slag gegaan om ook een Clojure variant te maken.

Na wat spit werk bleek een kleine aanpassing aan de Clojure code genoeg om op Dalvik Clojure te kunnen praten, nou ja in ieder geval “Hello Android from Clojure!” te kunnen roepen. Het resultaat in Clojure:


(ns net.remvee.android.hello.ClojureHelloAndroid
  (:gen-class
   :extends android.app.Activity
   :exposes-methods {onCreate superOnCreate}))

(defn -onCreate [this #^android.os.Bundle bundle]
  (.superOnCreate this bundle)
  (.setContentView this net.remvee.android.hello.R$layout/main)
  (let [tv (new android.widget.TextView this)]
    (.setText tv "Hello Android from Clojure!")
    (.setContentView this tv)))

Voor het hele riedeltje, inclusief aangepaste versie van clojure.jar, zie m’n clojurehelloandroid repo op github.

Update: De broncode van de aangepaste versie van clojure staat nu als apart project op github.

Maurits Rijk @ 12 maanden

Cool! Ik begin net Clojure te ontdekken (heb nodige ervaring met Lisp en Scheme) en heb al een tijdje een Android.