http://lamp.epfl.ch/~michelou/android/
android-sdk.zip(Scala版)
これは何かというと、AndroidアプリをScalaでビルドするためのANTファイルと、Android SDK付属サンプル集のScala翻訳版のパッケージです。
GoogleCode:scala-androidのようにScala向けAPIが提供されているわけではありませんので、Scala APIにありがちな妙なDSLとか無い分、Android初心者にはとっつきやすいと思います。(・・というかscala-android開発止まってますね。)
自分もAndroid初心者なので、Android SDKのインストールから手順をメモ。
Android SDK
http://developer.android.com/sdk/index.html
解凍したら、android-sdk/tools に PATH を通す。
SDK Setup.exe(Android SDK and AVD Manager)を起動(またはコマンドでandroid)
「Installed Package」「Available Package」でAPIをインストール。
* Google APIs by Google Inc., Android API 8, revision 1
* Documentation for Android SDK, API 8, revision 1
* Usb Driver package, revision 3
など。各サンプルを動作させるために、古いバージョンも入れておいた方が良い。現在生きてるAPI Levelは、以下の4つになるようです。特に以降のサンプルでAPI level 4 と 7 は利用するのでいれておく。
* 8 for the Android 2.2 platform (API level 8)
* 7 for the Android 2.1 platform (API level 7)
* 4 for the Android 1.6 platform (API level 4)
* 3 for the Android 1.5 platform (API level 3)
Targeting Scala to the Android platform
に沿って確認していきます。
http://lamp.epfl.ch/~michelou/android/
android-sdk.zip(Scala版)をダウンロード
その他、以下を用意する。
Apache Ant 1.7以上(resourcecountなど新しめのTaskを使ってる)
Android-SDK 2.2(前述)
Scala2.8.0(RC)(SCALA_HOMEとPATH設定)
ProGuard
※ProGuardは使わないクラスを除外してJarを最適化してくれるツール。
以下動作確認の手順。
■仮想デバイス(エミュレータ)の作成
AVD Manager使ってもできるが、コマンドラインで作成するには、
> android create avd --target 3 --name avd3
> android create avd --target 4 --name avd4
> android create avd --target 7 --name avd7
> android create avd --target 8 --name avd8
--target は、前述のAPI levelを指定。8だとAndroid 2.2を使うことになる。
■エミュレータの起動
> emulator [-no-boot-anim -no-skin] -avd avd4
■トレーサーの起動(別窓で)
> adb logcat (エミュレータ内の情報を出力)
■HelloActivityの動作確認
> emulator -no-boot-anim -avd avd4
> adb logcat
> cd HelloActivity
ここで、local.properties の各パスを設定してビルド&インストールする。
例:
> set ANT_OPTS=-Xmx1024m (OOM対策)
> ant debug
> ant install
エミュレータのアプリケーション一覧にHello(Scala)というアプリが追加されている。クリックすれば動くはず。
■削除するには、
> ant uninstall
■他のAntタスクも確認しておく。
> ant -p
任意の場所で(これはAndroid SDKの機能。Scala関係ない)
> android create project \
--package scalatohoku.android.example \
--activity SampleActivity \
--target 8 --path SampleActivity
注意!:パッケージ名は3階層以上にすること。後述しますが、そうしないと後でハマります。
上記3ファイルを新しいプロジェクトにコピーする。
build.xmlの"<setup />" の次に、以下を追加。
HelloActivity.scalaを参考に、SampleActivity.scalaを作成。SampleActivity.javaは削除。
(この辺、地味な手作業になります。)
あとは、ビルド&インストール
> set ANT_OPTS=-Xmx1024m
> ant debug
> ant install
proguard.conf のパラメータ@MYAPP_PACKAGE@の埋め込みが失敗してしまい、作成したクラスファイルがproguardによって除外されてしまう。その場合は、proguard.confに含めたいパッケージを直接書けば解決。
例:
-keep public class scalatohoku.android.**
エミュレータにインストール後、ClassNotFoundExceptionが発生してしまう場合は、proguard.confに原因があることがほとんどです。
追:"パッケージ3階層以上"は、Android naming conventionだそうです。それに従って、build-scala.xmlの中で正規表現かけているので、短いパッケージ名は避けた方がいいみたい。
せっかくなので、このSDKを使って何か作ってみました。次回のScala東北のネタです。実はこのSDK for Scalaの存在もScala東北で教えていただきました。
Scalandris
Scala+Android+Tetrisなので、Scalandrisです。
使い方はREADME参照してください。
AndroidではThread.sleepが非常に危険なのと、子スレッドが親スレッドのオブジェクトを更新できないなど、いろいろとハマって調べていたら、無駄にRemoteServiceまで作成してしまいました。このあたりを勉強会で説明したいと思います。
Scala IDE for Eclipse
今現在では、Eclipse Classic3.5.2に対応しているようです。3.6.0を使うとScalaエディタを起動できませんでした。
Eclipseを起動したら、Help - Install New Software...に
https://dl-ssl.google.com/android/eclipse/
http://download.scala-ide.org/update-current
を登録して、Developer ToolsとScala IDEをインストール。
再起動後、Window-PreferencesでAndroidのインストールパスを設定をしておく。
File-New-Other-Android Project を選択し、Create project from existing source で作成する。
作成したプロジェクトを右クリック-Configure-Add Scala NatureすればAndroid+Scalaの環境が整う。
この検証をやってる間しばらく使ってみましたが、Scalaエディタが嫌になるほどモッサリしてたのと、補完などがあまりうまく効かない感じでした。
ただ、コンパイルエラーが事前にチェックできたり、XMLのビジュアル編集やトレーサーなどのAndroid側の機能が豊富だったので、使ってみる価値はあると思います。