Scala + Eclipse + Android → 書き直す前Ver
http://d.hatena.ne.jp/vvakame/20100127 として書き直しました。そちらをご覧ください。
書き直す前
http://www.scala-lang.org/node/160
上記を参考に頑張ってみる。
環境はMac OS X 10.6 + Eclipse 3.5
AndroidSDKとADPは既に入ってる状態。
だめパターン
svn co http://lampsvn.epfl.ch/svn-repos/scala/scala/trunk scala
リビジョン20673だった
ここまでやって、
For Scala 2.7.0 you can download the android-library with sbaz and skip the next section.
って書いてあるのに気がつく。今までの全部ぽいっとする。
がんばりなおし
Scalaは既にMacPortsで入れてある。scala @2.7.7_0 (active)
Scalaにはsbazっていう、CPANとかRubyGems的なものがあるのね... 知らなかった。
sbaz installed
でscala-android入ってないか確認。当たり前だけど入ってない。
で確認。あった。scala-android (2.7.0-final, 2.6.1-final)
普通に失敗した。
ごめんなさい。
sbaz installed
確認。OK。
Eclipse起動して、Androidプロジェクトを作成した。
で、説明の通りScalaファイル作ろうとしてファイルが作れない。先にScalaプラグイン入れてないといけなかったのね...。
こっちからプラグイン突っ込んで、面倒くさいけど素のScala使ったプロジェクトがちゃんと動くか確認。
...動かなかった\(^o^)/ で、色々いじくってたらあるとき動くようになった。何やったら動いたかわかんない... orz
で、書いてある通りにAndroidプロジェクトを右クリックしてScala→Scalaネイチャーの追加したらJavaビルダーがぽいされた。おぉぅ...。とりあえずこの時点で一回起動してみる。Hello World, HelloJava! と表示された。OK。
プロジェクトのJavaのビルドパスのライブラリータブからScala Library version 2.7.7.finalを除去。外部JARの追加でandroid-library.jarを追加したいんだが場所わからん。色々調べて
port contents scala
で解決。android-library.jarなんてない...けど、調べてみるとscala-android.jarでいいみたい。自分の場合 /opt/local/share/scala/lib にあった。
4. Add bin folder to the class path に書いてある作業もやった。(GUIからどうやるか分からなかったので直接編集した。
なんか良さそうだからちくちく作ってみる。
とりあえずHelloScala.scalaが動くようになった。
package jp.ne.hatena.vvakame import _root_.android.app.Activity import _root_.android.os.Bundle class HelloScala extends Activity { override def onCreate(savedInstanceState: Bundle) = { super.onCreate(savedInstanceState) setContentView(R.layout.hello_scala) } }
で、現在OnClickListenerでHelloJava.javaに遷移させようとしてるんだけどうまくいかない。
Scalaがそもそも分かってないから何をどうすればScala的にValidなのかわからない...かも。
package jp.ne.hatena.vvakame import _root_.android.app.Activity import _root_.android.content.Intent import _root_.android.os.Bundle class HelloScala extends Activity { override def onCreate(savedInstanceState: Bundle) = { super.onCreate(savedInstanceState) setContentView(R.layout.hello_scala) startActivity(new Intent(this, classOf[HelloJava])) } }
これもちゃんと動いて、Javaで書いたActivityへ遷移できる。
現状の問題点
- apkのサイズでかい。HelloScala.apkが700KBくらいある。別の手元のプロジェクトは画像などのリソース込みで27KBとか。proguardというツールで不要classを省いてパッケージできるとかいう記事をどこかでみた気がするので今度調べる。
- たまにクラスの名前解決にミスってる気がする。JavaからScalaのクラスをインテリセンスで入力しようとしたとき表示されないことがある。ビルドパスとかの関係だと思う。かも。
- Scalaのソースをコンパイルしてくれないタイミングがある気がする。bin以下にclassファイルが吐かれてないときがあるような?
- onClickの動かし方が分からない。onClickの中でnew Intent... しようとするとエラーになる。
http://github.com/vvakame/HelloScalaForAndroid
ここまでの状態
http://github.com/vvakame/HelloScalaForAndroid/commit/61c23443a945c2bafc5c74f166410acdb5e57627