なんじゃくにっき

プログラミングの話題中心。

Scala + Androidをsbt(Simple Build Tool) とEclipseを併用して開発

 Scala + Androidで開発されている方はちらほら居て、ブログや勉強会で発表されている。
先週もScala勉強会in渋谷第11回でid:shomah4aさんが発表されたのを聞いてきた。
http://scala-users.org/shibuya/index.php?title=%E5%8B%89%E5%BC%B7%E4%BC%9A%E7%AC%AC11%E5%9B%9E
 
 IDEがないと(あっても?)プログラミングできないヘタレが、
Eclipse( + Scala IDE for Eclipse)とsbt(Simple Build Tool)を併用してみた。
ビルドは全部sbt任せで、Eclipseはエディタとして使ってコード補完とリアルタイム文法チェックに使ってるだけ。
 まあ要はAndroidプロジェクトに限らず、sbtプロジェクトとEclipseプロジェクトは
お互い悪影響を及ぼさないようにすれば両立できるって話。
 
 開発環境はWindows XP、ターゲットOSはAndroid 1.6、API versionは4。
以下、手順(Java, Scala, Eclipse, Scala IDE for Eclipseのインストールは割愛)。
 
SDKのインストール
公式サイトから、OSにあったバイナリをダウンロード。好きなディレクトリに解凍する。
http://developer.android.com/sdk/index.html
 
環境変数とPathの設定
環境変数を設定する。
Windowsの場合、ANDROID_SDK_HOMEにC:\android\android-sdk-windowsのような感じ。
Pathに%ANDROID_SDK_HOME%\toolsを追加する。
 
・packageをインストール
コマンドラインandroidと入力するか、%ANDROID_SDK_HOME%SDK Manager.exeを実行するかして、
SDK Managerを起動。
必要なpackageをインストールする。
Android 2.2ならAPIは8、Android 1.6ならAPIは4。
ここでインストールに失敗するなら大抵はproxyのせい。
settingでproxyの設定をすればOK。
 
Eclipse用プロジェクトの作成
Eclipseを立ち上げ、ScalaのperspectiveからScala Projectを作成する。
 
・sbt用プロジェクトを作成
Android + Scala用sbtプロジェクトを作成するツールを使う。
Linux系なら↓のスクリプトをダウンロードしてきて、
https://github.com/jberkel/android-plugin/raw/master/script/create_project
 
./create_project SampleProject scala.example.hello |
--platform android-4 |
  --scala-version 2.8.1 |
  --activity HelloActivity
のように実行する。
 
 Windowsでは、武田ソフトさんがScala Objectにしてくれていたのでそれを使わせてもらった。
http://blog.takeda-soft.jp/blog/show/383
https://gist.github.com/486306
 
 適当なディレクトリにcreate_project.scalaを置いて、
scalac create_project
scala -cp . CreateProject SampleProject scala.example.hello |
--platform android-4 |
  --scala-version 2.8.1 |
  --activity HelloActivity
ここで、プロジェクト名はEclipseプロジェクトと同じ名前にしておく。
第5引数のパッケージ(Activityが生成されるパッケージ)は階層が3以上ないと駄目な事に注意。
Androidの決まりでそうなっている。
 
これでcreate_project.scalaのあるディレクトリ内にSampleProjectが生成される。
 
・プロジェクトのマージ
Eclipseプロジェクトとsbtプロジェクトをマージする。
といってもsbtプロジェクトの中身をEclipseプロジェクトにコピーするだけ。
 
・sbt(Simple Build Tool)の入手
sbtを↓のURLから入手。プロジェクトルートに置く。
http://code.google.com/p/simple-build-tool/downloads/list
 
実行するためのスクリプトを書く。
Windowsならプロジェクトルートにsbt.batというファイルを作って中身を以下のようにする。
set SCRIPT_DIR=%~dp0
java -Xmx512M -jar "%SCRIPT_DIR%sbt-launch-0.7.4.jar" %*
 
・sbtの実行
コマンドラインでカレントディレクトリをプロジェクトルートにして
sbt update package-debug
を実行。必要なファイルが作成/ダウンロードされる。
 
・Manifestの編集
ここまでで作成されたプロジェクトは一部がAndroid 2.1以上向けになっているので、
それ以下のヴァージョンで動かしたい場合はManifestを編集する。
恐らくAndroid 2.1、Android 2.2ならこの作業は不要。
%PROJECT_ROOT%\src\mainのAndroid.manifest.xml内の
となっているところをターゲットに合わせて編集する。
Android 1.6向けなら4。
%PROJECT_ROOT%\tests\src\mainのAndroid.manifest.xmlも同様。
 
Eclipseでソースを編集できるようにする
ソースのPathをsrc → src\main\scalaに変更する。
%ANDROID_SDK_HOME%\platForms内のandroid.jarにパスを通す。
ターゲットに合わせたjarを選ぶこと。
ここでプロジェクト内にlibディレクトリを掘ってandroid.jarをコピーしてPathを通すとビルドで怒られた。
外部参照なら大丈夫だった。
 
・Emulatorの作成、起動
コマンドラインでEmulatorを作成する。名前とAPIバージョンを指定。
android create avd -n avd1.6 -t 4
 
実行は、
emulator @avd1.6
 
なお、SDK Managerでも編集できる。
 
・Emulatorで実行
sbt start-emulator
これでHello, WorldとEmulator内に表示される。
ここまでScalaのコードを自分では一行も書かずに出来た。
 
 
 追記:一度ビルドしたあと、target/scala_x.x.x/classesにPathを通すとよい