気紛 - きまぐれ -

2010-01-08 Scala On Android

Scala On Android

21:42 |  Scala On Androidを含むブックマーク  Scala On Androidのブックマークコメント

Androidの開発をScalaでやってみよう。その最初のまとめ。ちなみにScalaは使ったことがありません…。Androidの開発を通じてScalaを勉強してみようというわけです。

結論からいうとちゃんと動いていないですが、誰かのなにかの参考になるかと思い、書いてみます。

環境はMac OS X 10.6です。

設定

21:42 |  設定を含むブックマーク  設定のブックマークコメント

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。

プロジェクトの作成

21:42 |  プロジェクトの作成を含むブックマーク  プロジェクトの作成のブックマークコメント

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で実行。

…しかし、動かないなぁ。はてさて。ビルドは出来ているんだけど。

注意

21:44 |  注意を含むブックマーク  注意のブックマークコメント

scalaのページに書いてあるような、builderの順番変更や、Scala-Android.jarの追加などは必要ない、のかな?

変更しなくてもビルドは通るんだけど、実行できないのはここらへんが問題なのかな。

pokarimpokarim 2010/01/11 23:01 詳しい状況はわからないけど、scalaというかJava自体、ビルドできてもclassファイルやjarファイルが無いと実行時にこけるってことはあるよー。scala and androidいいねー。おれもandroid買おうかなー。

fawfaw 2010/01/11 23:46 E/AndroidRuntime( 231): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.android/com.example.android.scalaonandroidtest}: java.lang.ClassNotFoundException: com.example.android.scalaonandroidtest in loader dalvik.system.PathClassLoader@43cf9138
なんて言われるのですよ。でも、なにが原因で見つからないのかが分からないのです…

pokarimpokarim 2010/01/12 11:32 初めに断っておくとJavaのことはほとんど忘れてるので何かおかしなこというかもしれん。ClassNotFoundExceptionと言っているのでcom.example.android.scalaonandroidtest、つまりscalaonandroidtest.classみたいなファイルが、$CLASSPATH上に見つからないからエラーになってるみたいに見えるね。package com.example.scalaonandroidtest;
のところは、com.example.android.scalaonandroidtestを探しにいっているので、
package com.android;
でよいのでは?
あとは、$CLASSPATHとビルド時に生成されるclassファイルのパスがあってないとか、もしかしたらscalaonandroidtestが小文字なので、ファイル名とか、
ソース中のクラス名とか全部小文字で統一した方がとりあえず問題が減るかも。。。

pokarimpokarim 2010/01/12 11:33 まちがった。
package com.android;じゃなくて
package com.example.android;
だった。

fawfaw 2010/01/12 11:51 Androidの開発って、build、install、実行までの一連の流れがスクリプトとして提供されてるのですよ。その中でCLASSPATHとかが設定されているはずで、だから間違いはないと思うんだ。

まあ、でも、packageの指定とか、帰ったら試してみるわー。さんきゅー。

pokarimpokarim 2010/01/12 13:01 packageの指定の可能性が高そうだね。
package com.example.scalaonandroidtest
class ScalaOnAndroidTest
だと、com.example.scalaonandroidtest.ScalaOnAndroidTest
になっちゃうから、やっぱ、
package com.example;
class scalaonandroidtest
でいけるんでね?

fawfaw 2010/01/12 23:39 やっぱりだめだわ。
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

うーむ。

トラックバック - http://d.hatena.ne.jp/faw/20100108