Android SDK のインストールから Clojure での Hello World! 実行まで

Mac OSX に Android SDK をインストールして、Clojure でアプリを作成し、Hello World! を Android エミュレータで表示させるまでのメモ。

Eclipse を使おうとしたら、 Mac の Java6 では動作しなかった…
※(追記)Java6 でも動作した。

Android SDK のインストール

Android SDK | Android Developers から Android SDK をダウンロードしてきて展開し、tools ディレクトリにパスを通す。

Android エミュレータの実行

ターミナルで android コマンドを実行して Android SDK and AVD Manager を起動する。

$ android

左ペインの Available Packages を選択し、google の android レポジトリをにチェックを入れる。
インストール候補がリストアップされるので、必要なものにチェックを入れて(ここは全てにチェックをした) Install Selected をクリックする。
インストールが完了したら、指示にしたがって再起動する。

Android AVD Manager Screenshot1

左ペインの Virtual Devices を選択し、New… で AVD (Android Virtual Device) の作成画面を表示すると Target のリストで AVD での Android のバージョンを選択できるようになっている。

Android AVD Manager Screenshot2

AVD の名前を入れて Target を選択してから Create AVD をクリックして AVD を作成する。

AVD が作成されると、リストで AVD を選択できるできるようになるので、AVD を選択してから Start… をクリックすると エミュレータが起動する。

Android Virtual Device Screenshot

Android プロジェクトの作成

参考:Developing In Other IDEs | Android Developers

android コマンドで Android プロジェクトの雛形を作成する。
(以下、プロジェクトのルートディレクトリは ~/develop/android/MyCljTestAppProject/ となる)

$ cd ~/develop/android/
$ android create project --target 7 --path ./MyCljTestAppProject --activity MyCljTestApp --package com.example.mycljtest
--target
対応する Android platform libray を選択する。(android list target コマンドで Target が一覧表示される)
--name
プロジェクト名を指定する。(この設定はオプショナル)
--path
プロジェクトディレクトリを指定する。(ディレクトリがまだ存在しない場合は作成される)
--activity
デフォルトのアクティビティクラス名が指定される。
--package
プロジェクトのパッケージ名前空間が指定される。

以下のようにプロジェクトの雛形が作られる。

$ ls MyTestAppProject/
AndroidManifest.xml  build.properties     default.properties   local.properties     src/
bin/                 build.xml            libs/                res/

Clojure でのビルドに必要なファイルを remvee’s clojurehelloandroid at master – GitHub からダウンロードしてきて、プロジェクトのルートディレクトリに配置する。
必要なファイルは build.xml と compile.clj の2つ。(元の build.xml ファイルに上書きコピーする)

build.xml の2行目と94行目を修正する。

...省略...
<project name="MyCljTestApp" default="help">
        ...省略...
        <arg value="com.example.mycljtest.MyCljTestApp"/>
        ...省略...

src/com/example/mycljtest/MyCljTestApp.java を削除して、src/com/example/mycljtest/MyCljTestApp.clj を作成する。

(ns com.example.mycljtest.MyCljTestApp
    (:gen-class
       :extends android.app.Activity
       :exposes-methods {onCreate superOnCreate}))

(defn -onCreate [this #^android.os.Bundle bundle]
    (.superOnCreate this bundle)
    (.setContentView this com.example.mycljtest.R$layout/main)
    (let [tv (new android.widget.TextView this)]
        (.setText tv (str "Hello Android from Clojure " (clojure-version) "!"))
        (.setContentView this tv)))

Android 用の Clojure を作成して、プロジェクトの libs ディレクトリに配置する。

$ cd ~/opt/
$ git clone git://github.com/remvee/clojure.git clojure-android
$ cd clojure-android
$ ant
$ cp ~/opt/clojure.jar ~/develop/android/MyCljTestAppProject/libs/

ビルドする。

$ cd ~/develop/android/MyCljTestAppProject/
$ ant debug

ビルドに成功したら、エミュレータを実行した状態で、作成されたアプリを adb コマンドでインストールする。
-s オプションでエミュレータのシリアルナンバーを指定する。
シリアルナンバーはエミュレータのタイトルバーに表示されている。

$ android &
$ adb -s emulator-5554 install ~/develop/android/MyCljTestAppProject/bin/MyCljTestApp-debug.apk
833 KB/s (669050 bytes in 0.783s)
        pkg: /data/local/tmp/MyCljTestApp-debug.apk
Success

インストールに成功したら、エミュレータでアプリを実行してみる。

Hello World! from Clojure on Android Virtual Device

参考:ClojureAndAndroidWithEmacsOnUbuntu

«
»