Eclipseをつかって,Scalaで書いたプログラムをAndroid上で動作させたよ,メモ.というか,以下のポイントに気をつけておけばOKそうです.
ポイント
- EclipseのScalaプラグインのバージョンに合ったandroid用のscalaライブラリを使う
- EclipseのBuilderの順番を適切に設定する
- Eclipseのライブラリの読み込み優先度を適切に設定する
Developing for Android | Scala IDE for Eclipse Project | Assembla をだいぶ参考にしました.
とりあえずやってみよー
0. Eclipseをインストールする
省略.普通にいれる
1. Android開発環境をととのえる
- Android SDKとEclipse用のAndroid開発プラグイン(ADT)をインストール.
- Eclipseの環境設定でSDKの場所をセットしておけばOK
2. Scala開発環境を整える
- Eclipse向けScala プラグインをインストール.nightlyではないほう.
- Scala IDE for Eclipse http://www.scala-lang.org/node/94
- さらに,ノーマルのScalaには一部Android上で動作しない機能があるので,一部機能をomitしたandroid-library.jarを入手して適当な場所に置く.
- android-library.jar http://www.nabble.com/Re%3A-Re%3A-Scala-and-Android-1.5-p23993564.html
このとき,Scala IDE for Eclipseはnightlyじゃない方をインストールするよう注意.android-library.jarとバージョンを合わせるため. (どっちもバージョン7.5になる)
3. Androidプロジェクトを作成し,Scalaライブラリをしこむ
ここが面倒
- Package Exploreを右クリックして New->Other から Android Projectを選択.ウィザードをすすめて新しいプロジェクトを作る.(ウィザードの例 f:id:hakobe932:20090706171311p)
- プロジェクトの名前を右クリックして Scala->Add Scala Natureを選んでScala環境を追加する
- プロジェクトのProperties->Java Build Path の Libraries タブで Scala Library を Remove
- 同じLibraries タブで Add External JARs... を選択して先ほど用意したandroid-library.jarを指定する.
- さらにLibraries タブで Add External Class Folder... を選択してプロジェクト内のbinディレクトリを指定する.以下は,ここまでのLibraryタブの様子.
- Order and Export タブを以下のような順番に並べ返る
- プロジェクトのProperties->Builders を以下のような順番に並べ替える
4. Scalaのコードを用意
- Eclipseによって自動的に作成されたActivityクラスを削除する
- 同じ名前のscalaファイルをつくる.もともとHoge.javaが生成されていたらHoge.scalaをつくる.コードは例えば以下のように
package jp.hakobe.mobile import android.os.Bundle import android.app.Activity import android.widget.TextView class Hoge 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) } }
5. ビルドと実行
Run Configuration を設定する
- Androidタブで今作ったプロジェクトを指定する
- TargetタブでAndroid Virtual Deviceを作っておく
- CommonタブでLaunch in backgroundのチェックをはずす
Runで実行.Androidのエミュレータが立ち上がってHello, World的プログラムが実行されると成功です.
まとめ
このように,EclipseでScalaを動作させるには,星の数のようなバッドノウハウをくぐりぬける必要があり,なかなかたいへんでした.一度動作させるとおおむね快適に利用できそうです.
バッドノウハウの多くがEclipse関係だったので,Eclipseに慣れない人は,コマンドラインでSDKたたいて開発したほうがはまったときに自分でなんとかしやすいかもしれないですね.vimで開発できるようそのあたりも調べてみたいです.
ところで,AndroidでScalaを動作させる真の目的としてはactorの利用があったのですが,まだためせてません.なんかAndroidだとThreadの扱いがいろいろ特殊っぽい?