Android+Scalaの開発環境を試してみる
例によってMacとUbuntu。
2011/04/16追記
この記事の内容は古いしスマートな方法じゃなかったのでスルーして、以下のページを読むことを推奨しますよ。
環境の準備
Scalaのインストール
公式から落としてきた2.8.0.finalを展開してそのまま/opt/local以下に設置。
/opt/local/scala-2.8.0.final/binにパスを通した。
scala-android.jarのインストール
sbazで入るscala-android.jarが2.7.7のため2.8.0といっしょには動かない。
そこでここを参考に自前コンパイル。コンパイルにやたら時間がかかった。
しかし出来たscala-android.jarを/opt/local/scala-2.8.0.final/lib/に入れたらscalaやscalacコマンドがエラーを吐いて動かなくなったので、Android用のScalaは別途/opt/local/scala-2.8.0.final-with-androidに設置することにした。
ProGuardのインストール
macports又はapt-getでさくっと入る。
proguard.jarの位置が環境によってまちまちなので注意。
プロジェクトの設定
Scalaを使うプロジェクトのビルドの設定を編集する。
build.xmlの編集
以下の部分を
<setup />
次の内容に書き換える。
<setup import="false" />
<import file="android_rules.xml" />
android_rules.xmlの編集
android_rules.xmlを落として以下の修正を加える。
1. sdk-locationの追加
<!-- Properties -->
<property name="sdk-location" value="/opt/local/android-sdk" />
<property name="android-tools" value="${sdk-location}/tools" />
2. scala.homeのパスの変更
<property name="scala.home" value="/opt/local/scala-2.8.0.final-with-android/" />
3. proguard.jarのパスの変更
Macだと以下
<path id="proguard.classpath">
<pathelement location="/opt/local/var/macports/software/proguard/4.4_0/opt/local/share/java/proguard.jar" />
</path>
Ubuntuの場合は
<path id="proguard.classpath">
<pathelement location="/usr/share/java/proguard.jar" />
</path>
サンプルコード
通常のJavaのコードをScalaのコードに書き換えてみた。
Hellowello.java
package to.brass.hellowello;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class Hellowello extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
tv.setText("Hellowello Android!");
setContentView(tv);
}
}
Hellowello.scala
package to.brass.hellowello
import android.app.Activity
import android.os.Bundle
import android.widget.TextView
class Hellowello extends Activity {
override def onCreate(savedInstanceState: Bundle) {
super.onCreate(savedInstanceState)
val tv = new TextView(this)
tv.setText("Hellowello Android and Scala!")
setContentView(tv)
}
}
短いコードなのであんまり違いがないけど、ant installしたらちゃんと動いた。
参考
2011/03/06追記
Android SDKのバージョンアップでこの手順では動かなくなっている。
android_rules.xmlの内容を見直さないといけない。マシンを新調したついでになんとなく環境作っておこうと思ったけど、いったん深追いせずあきらめる。
一応scala-android.jarの構築に使ったコマンドを残しておく。
cd /tmp svn checkout http://lampsvn.epfl.ch/svn-repos/scala/scala/tags/R_2_8_1_final cd R_2_8_1_final/src cp android-library/scala/ScalaObject.scala library/scala/ScalaObject.scala cp android-library/scala/reflect/ScalaBeanInfo.scala library/scala/reflect/ScalaBeanInfo.scala cd .. ant build cp lib/scala-library.jar /opt/local/scala/lib/scala-android.jar
Scalaもバージョンうpしてますね。