今度はScalaでHelloAndroid

ClojureJVM上の言語に手を出したついでにコップ本も読んでみたところまんまとScalaにはまる。
というわけで前回に引き続き今回はScalaAndroidアプリ作成にチャレンジ。

事前に用意しておくもの

AndroidSDKとかは入っているものとして、

  • proguard

必要のないclassを省いてjarのダウンサイジングをしてくれるらしい。apkのサイズがかなり小さくなる。
手元のdebian環境ではapt-getでインストール。

debianScalaパッケージにはsbazがなかったのでScalaのサイト(http://www.scala-lang.org/downloads)から実行環境を取得展開して

$ ./bin/sbaz install scala-android

すると、libディレクトリにscala-android.jarがインストールされる。

プロジェクト作成

前回書いたので省略。

$ android create project --target 11 --path ./HelloScala --activity HelloScala --package org.example.helloscala

プロジェクトのScala

Scala用のantファイルをダウンロード。

$ wget http://github.com/phueper/AndroidScalaAntTest/raw/master/android_rules.xml

中身は環境に合わせて変更する。(scala.homeとか)

build.xmlandroid_rules.xmlをインポート

$ diff -u build.xml.orig build.xml
--- build.xml.orig  2010-04-02 22:14:48.000000000 +0900
+++ build.xml 2010-04-03 01:44:37.000000000 +0900
@@ -62,6 +62,9 @@
          This will ensure that the properties are setup correctly but that your customized
          build steps are used.
     -->
-    <setup />
+    <setup import="false" />
+
+    <!-- import my android_rules.xml file -->
+    <import file="android_rules.xml" />

 </project>

HelloScala.javaをHelloScala.scalaに置き換える。

package org.example.helloscala

import android.os.Bundle
import android.app.Activity
import android.widget.TextView

class HelloScala extends Activity {
  override def onCreate(savedInstanceState: Bundle) {
    super.onCreate(savedInstanceState)
    val tv = new TextView(this)
    tv.setText("Hello Android, it's me, Scala!")
    setContentView(tv)
  }
}

ビルドとインストール

前回と同様に

$ ant install

でOK

build.propertiesにはsdk-location,android-tools,adbあたりのパスが必要だった。

proguardの威力でapkのサイズが13kBまで小さくなっている。おかげでアプリの起動も速い。