2010-01-08 Scala On Android
Scala On Android
Androidの開発をScalaでやってみよう。その最初のまとめ。ちなみにScalaは使ったことがありません…。Androidの開発を通じてScalaを勉強してみようというわけです。
結論からいうとちゃんと動いていないですが、誰かのなにかの参考になるかと思い、書いてみます。
環境はMac OS X 10.6です。
設定
Eclipseのダウンロード
からダウンロード
展開して、Applicationsに放り込む。
Android SDKのダウンロード
からダウンロードと展開。
EclipseのScala pluginを設定
Help -> Software Updates ... -> Available Software -> Add Site..
から、
http://www.scala-lang.org/scala-eclipse-plugin
を入力してインストール
EclipseのAndroid Pluginを設定
同様に、Help -> Software Updates ... -> Available Software -> Add Site..
から、
http://dl-ssl.google.com/android/eclipse/
を入力してインストール。
Androidの環境設定
環境設定からAndroidを選ぶと、Googleに使用状況を送るか、と聞かれるので嫌な場合はチェックを外すこと。
ちなみにこの時ウィンドウが複数出てるのに気がつかないで、クリックできねー!とかならないように。
Android SDKの場所の設定
SDK Locationで、先ほど展開したAndroid SDKの場所を設定する。
/Users/hogehoge/Works/android-sdk-mac_86
などとする。
Androidエミュレータの設定
Window -> Android SDK and ADB Manager を選択
Installed Packages
updateを押して、最新のパッケージを入手する。Fetch Allでいいだろう。ダウンロードには結構時間がかかるので注意。最後にADBの再起動が入ります。
(これは結局Android SDKをもう一度ダウンロードすることになってるのかな)
AVD(Android Virtual Device)の作成
Virtual DevicesをNewして、新しいAVDを作成する。適当な名前をつけて、TargetとしてVersionとSD Cardの容量を設定し、Create AVD。
プロジェクトの作成
Android プロジェクトの作成
File -> New -> Other -> Android Projectで作成
名前はここでは ScalaOnAndroidTest とする。
- Project Name -> ScalaOnAndroidTest
- Build Target -> ADVと同じ物を (今回は2.0.1)
- Application Name -> ScalaOnAndroidTest
- Package -> com.example.scalaonandroidtest
- Activity -> ScalaOnAndroidTest
テスト
この時点で、Run as Android Applicationをクリック。
ちゃんと動いていればエミュレータが立ち上がるはず。
それで、
Hello World, ScalaOnAndroidTest!
などと表示されていればOK。
Scala Natureの追加
Projectを右クリック、 Scala -> Add Scala Nature
scalaのコードを書く。
最初に生成された、ScalaOnAndroidTest.javaを削除。
ScalaのClassを追加する。この時、Class名は、Activityと同じでなければならない。
classの内容はとりあえずこんな感じで。
package com.example.scalaonandroidtest
import _root_.android.app.Activity
import _root_.android.os.Bundle
class ScalaOnAndroidTest extends Activity {
override def onCreate(savedInstanceState: Bundle) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main)
}
}
実行
Run As Android Applicationで実行。
…しかし、動かないなぁ。はてさて。ビルドは出来ているんだけど。
なんて言われるのですよ。でも、なにが原因で見つからないのかが分からないのです…
のところは、com.example.android.scalaonandroidtestを探しにいっているので、
package com.android;
でよいのでは?
あとは、$CLASSPATHとビルド時に生成されるclassファイルのパスがあってないとか、もしかしたらscalaonandroidtestが小文字なので、ファイル名とか、
ソース中のクラス名とか全部小文字で統一した方がとりあえず問題が減るかも。。。
package com.android;じゃなくて
package com.example.android;
だった。
まあ、でも、packageの指定とか、帰ったら試してみるわー。さんきゅー。
package com.example.scalaonandroidtest
class ScalaOnAndroidTest
だと、com.example.scalaonandroidtest.ScalaOnAndroidTest
になっちゃうから、やっぱ、
package com.example;
class scalaonandroidtest
でいけるんでね?
package com.exampleにしても、
Caused by: java.lang.ClassNotFoundException: com.example.ScalaOnAndroidTest in loader dalvik.system.PathClassLoader@43d035f0
小文字にしても
Caused by: java.lang.ClassNotFoundException: com.example.scalaonandroidtest in loader dalvik.system.PathClassLoader@43d030b8
うーむ。