scala で android アプリケーションを作ってみる

scala はあまり知らないんですが、ちらと遊んでみました。


ant でやるのは苦行らしいので simple-build-tool(sbt) を使います。sbt というのは scala で書かれた、設定も拡張も scala という scala scala したビルドツールらしいです。あまりよく知りません。これは他のビルドツールに比べてどの辺がいいのかな?まあ設定とか scala で、というのは scala 全然知らない人間には辛いものが…いやしかし ant の xml とかも人類にはかなり…

android create project の scala 版みたいな create_project というスクリプトがあるらしいので、それを使ってプロジェクトを作ります。説明めんどくさいので自分が参照したページの url をペッと貼っておきます。

http://subtech.g.hatena.ne.jp/motemen/20110121/1295584566

引数は android create project と大体同じ。テストプロジェクトも一緒に作ってくれるのはいいですね。

色々できたら sbt update package-debug で、必要なもの一式をダウンロードして用意してくれるらしい。ラクチン。

これも参照したページの url を貼っておきます。

http://blog.takeda-soft.jp/blog/show/383

あとは sbt の対話環境で compile と install-(device|emulator) で、とりあえずハローワールドアプリケーションがインストールされます。既にインストールされている場合には reinstall-(device|emulator) じゃないと叱られるみたいなので注意。uninstall はご想像の通り。しかし install 時に "THIS TOOL IS DEPRECATED. See --help for more information." とか言われるんですが THIS が誰か分からないのでなんともなりませんね…

おしまい。

以下蛇足。

TypedResources というのが中々気が利いています。R.id.xxx に型の情報を残しておくことで、毎回書かされるあのうざったいキャストを省こうということなんですが、これは是非 java にも欲しいですね、無理ですけど…こんな感じです。

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

class HelloActivity extends Activity with TypedActivity {
  override def onCreate(savedInstanceState: Bundle) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main)
    findView(TR.text).setText("hello, scala!") // 型が TextView になってる!
  }
}

TR クラスを生成するために、ビルド設定の Project クラスに TypedResources trait が必要です。

ちなみに複数のビューに同じ id をつけてると、単純に最後のになるみたいです。

気になるのはパフォーマンスですね。遅いとかはないと思うのですが、オブジェクトバンバン作って GC バンバン走るみたいになると、スマートフォンではちょっと…

まあでも、そういうの気にしないなら java よりはいいかも知れませんし、デバッグとかの都合を考えると矢張り java のほうがいいかもしれません。なんだこの結論は…好きな言語で書けばよいのです。