ScalaでAndroidアプリケーションを作る

2012.02.06

はじめに

Androidアプリケーションを開発するための言語はJavaです。(NDKでC/C++使ったりもできますが)
しかしAndroidの普及にともなって、さまざまな手法でAndroidのアプリケーションを開発することができるようになりました。

いろいろと実装する手法はありますが、今回はScalaを用いてAndroidアプリケーションを動かす方法をご紹介します。

今回使用した動作環境は以下のとおりです。

  • OS : MacOS X 10.7.3
  • パッケージマネージャ : Homebrew 0.8.1

ScalaでAndroidアプリケーションを作る

ではScalaでAndroidアプリケーションのひな形を作成し、エミュレータで動かしてみましょう。まずは環境の構築です。
必要なソフトウェアはHomebrewでインストールします。

1.必要なものをインストール

Android SDK,Scala,sbt(Scala用ビルドツール)をインストールします。

$ brew install android-sdk
$ brew install scala
$ brew install sbt

2.SDKマネージャのインストールとavd作成

次に、Android SDK ManagerでToolsとAndroid4.x用のSDKをダウンロードしましょう。
コンソールでandroidコマンドを実行すると、GUIのSDKマネージャが起動するので、パッケージを選択してインストールします。

$ android

次にエミュレータを作成します。android create コマンドで作成しましょう。
※-tの後に指定するIDはandroid listでIDを確認して、適切なIDを指定してください。

$ android create avd -n scala_test -t 1

3.giter8のインストール

giter8とは、Githubのリポジトリに登録されているテンプレートからプロジェクトを生成するためのツールです。
giter8はconscriptという別のツールを使用してインストールするので、conscriptをインストールしてからgiter8をインストールします。

$ curl https://raw.github.com/n8han/conscript/master/setup.sh | sh
$ ~/bin/cs n8han/giter8

4.Scala Androidプロジェクトひな形作成

適当なディレクトリを作成し、giter8(g8コマンド)を使用してプロジェクトのひな形を持ってきます。
また、ANDROID_HOME環境変数が設定されていなければ設定しておきましょう。

$ mkdir android-scala
$ cd android-scala 
$ ~/bin/g8 jberkel/android-app
$ cd <アプリケーション名>   
$ export ANDROID_HOME=/path/your/android-sdk/

5.Activityのソースを確認

作成したプロジェクトのsrc/main/scala/MainActivity.scalaを少し見てみましょう。
Scalaで記述されたActivityです。

package my.android.project

import _root_.android.app.Activity
import _root_.android.os.Bundle

class MainActivity extends Activity with TypedActivity {
  override def onCreate(bundle: Bundle) {
    super.onCreate(bundle)
    setContentView(R.layout.main)

    findView(TR.textview).setText("hello, world!")
  }
}

6.実行してみる

sbtを起動し、パッケージング、エミュレータ起動、アプリケーションのインストールをします。

$ sbt
> android:package-debug 
> android:emulator-start scala_test
> android:install-emulator

作成したアプリケーションが追加されているので、起動してみてください。
Hello worldが表示されるはずです。

まとめ

ScalaでAndroidアプリケーションを記述して開発することができました。
まだJavaほど環境は整っていませんが、開発できるレベルにはあると思います。

参考サイトなど