ClojureでAndroidアプリ
ClojureはJVM上で動くのだからもしかしたらAndroidアプリも作れるのではないだろうかと思い、いろいろ調べてみた結果とりあえず入り口には到達できたので備忘をかねて公開。
今回は基本的にeclipseとかandroid-modeは使わずにコマンドラインでいくことにした。(というかandroid-mode動かなかった…orz)
以下androidSDKとClojureはインストール済みであることを前提とします。
参考にしたサイトとか書籍
プロジェクト作成
まずは使用できるターゲットの確認。
$ android
「android SDK and AVD Manager」が起動するので、Installed Packagesで目的のターゲットがあるか確認する。なければAvailable Packagesからインストール。
今回は現在(2010-2-20)最新のver2.1を使うことにする。
プロジェクト作成に必要なターゲットidを確認する。
$ android list target (中略) id: 11 or "Google Inc.:Google APIs:7" Name: Google APIs Type: Add-On Vendor: Google Inc. Revision: 1 Description: Android + Google APIs Based on Android 2.1 (API level 7) Libraries: * com.google.android.maps (maps.jar) API for Google Maps Skins: WQVGA400, WVGA854, HVGA (default), WQVGA432, WVGA800, QVGA
ver2.1はid 11であることを確認。
プロジェクトを作成。今回は『初めてのAndroid』に載っているSudokuのプロジェクトを作る。
$ android create project --target 11 --path ./Sudoku --activity Sudoku --package org.example.Sudoku
プロジェクトをClojure用にカスタマイズ
dalvikVM用clojure.jarをコピー。
$ cd Sudoku
$ cp ~/opt/clojure-android/clojure.jar ./libs/
Clojure用build.xmlをダウンロード。build.xmlから呼ばれるcompile.cljもダウンロード。
$ mv build.xml build.xml.org
$ wget http://github.com/remvee/clojurehelloandroid/raw/master/build.xml
$ wget http://github.com/remvee/clojurehelloandroid/raw/master/compile.clj
build.xmlの2行目にあるプロジェクト名をSudokuにしておく。
<project name="Sudoku" default="debug">
同じく18行目のパッケージ名をorg.example.Sudokuにしておく。
<property name="application-package" value="org.example.Sudoku" />
Sudoku.javaを消して代わりにSudoku.cljを作成。
$ rm src/org/example/Sudoku/Sudoku.java
; Sudoku.clj (ns org.example.Sudoku.Sudoku (:gen-class :extends android.app.Activity :exposes-methods {onCreate superOnCreate})) (defn -onCreate [this #^android.os.Bundle bundle] (.superOnCreate this bundle) (.setContentView this org.example.Sudoku.R$layout/main) (let [tv (new android.widget.TextView this)] (.setText tv "Hello Android from Clojure!") (.setContentView this tv)))
ビルドとインストール
自分の環境だとbuild.propertiesに以下を追加してやらないといけなかった。
sdk-folder=/home/hoge/opt/android/platforms/android-2.1 android-tools=/home/hoge/opt/android/platforms/android-2.1/tools apk-builder=/home/hoge/opt/android/tools/apkbuilder adb=/home/hoge/opt/android/tools/adb
エミュレータが立ち上がっている状態で、
$ ant install
としてやればコンパイルしてインストールまでやってくれる。
以下エミュレータのスクリーンショット。右上にSudokuが追加されている。
上書きインストールはant reinstall、削除はant uninstallでできる。