ScalaでAndroidアプリ開発環境を構築する

参考
http://engineering.linkedin.com/incubator/technology-behind-eatin-android-apps-scala-ios-apps-and-play-framework-web-services


# 序

Scalaを使って、Androidアプリ開発環境を構築することを考えた場合、

１．[Eclipse](http://www.eclipse.org/) + [Google ADTプラグイン](http://developer.android.com/tools/sdk/eclipse-adt.html) + scala-plugin
２．[Scala-IDE](http://scala-ide.org/)（これもEclipseの派生）
３．sbt + [android-plugin](https://github.com/jberkel/android-plugin)

などの方法があります。

最近では、２のScala-IDEが使いやすいと思ったので、
そのインストール手順を説明します。

>１と２はある意味同じものと言えるが（scala-pluginがScala-IDEの開発元が開発したものなので）、
scala-pluginのバージョンより、Scala-IDEのバージョンのほうが新しい（と思われる）せいか使い勝手がいいように感じる。


# 前提

以下のものがすでにインストール済み。

・Scala
・Android SDK

>私が使用しているPCはMac


# Scala-IDEをインストールする

まずはじめに、Scala-IDEを[http://scala-ide.org/download/sdk.htm](http://scala-ide.org/download/sdk.html)からダウンロードして解凍します。
解凍した中身は、ほぼEclipseそのものです。

![スクリーンショット 0025-06-16 21.44.49.png](https://qiita-image-store.s3.amazonaws.com/0/20722/200c08dc-401a-895c-0d93-0ce5f1e796e3.png "スクリーンショット 0025-06-16 21.44.49.png")



# AndroidProguardScalaプラグインのインストール

上記フォルダの中の、Eclipse.Appを起動します。
メニューの

"Help" -> "Install New Software…"

![スクリーンショット 0025-06-16 21.48.15.png](https://qiita-image-store.s3.amazonaws.com/0/20722/3d563fb3-57db-71c4-4933-7687ed500a9b.png "スクリーンショット 0025-06-16 21.48.15.png")

で、"Work with:"の欄に

[https://androidproguardscala.s3.amazonaws.com/UpdateSiteForAndroidProguardScala](https://androidproguardscala.s3.amazonaws.com/UpdateSiteForAndroidProguardScala)

を入力して「Add…」ボタンをクリック。
Name:には適当に AndroidProguardScala　とでも入れておきます。

![スクリーンショット 0025-06-16 21.50.20.png](https://qiita-image-store.s3.amazonaws.com/0/20722/da7d7bf1-028d-1202-641b-ae8348d9faa4.png "スクリーンショット 0025-06-16 21.50.20.png")

「OK」を押し、ちょっと待つとリストに"AndroidProguardScala - Scala development on Android"が表示されますので、チェックボックスにチェックして"Next"。

![スクリーンショット 0025-06-16 21.52.33.png](https://qiita-image-store.s3.amazonaws.com/0/20722/6b221cbe-0056-0fee-4823-6f8108519c6e.png "スクリーンショット 0025-06-16 21.52.33.png")

もう１回、"Next"を押すと、ライセンスが表示されますので承諾して"Finish"。
Warningが出たりしますが、各自の責任で"OK"してください。

インストールが終わったら再起動です。



# Google ADTプラグインのインストール

メニューの、"Help" -> "Install New Software…"を選択して、"Work with:"欄に

[https://dl-ssl.google.com/android/eclipse/](https://dl-ssl.google.com/android/eclipse/)

を入力して、以下同様にインストールします。

>AndroidProguardScalaとGoogle ADTをインストールする順番は
どちらが先でも構わないと思います。

# プロジェクトを作成してみる

Fileメニューから、"New" -> "Other…"を選択します。

![スクリーンショット 0025-06-16 21.57.37.png](https://qiita-image-store.s3.amazonaws.com/0/20722/513a4f6a-0d05-1902-78c9-35c19beaa272.png "スクリーンショット 0025-06-16 21.57.37.png")

"Android Application Project"を選択して"Next"。

![スクリーンショット 0025-06-16 22.08.24.png](https://qiita-image-store.s3.amazonaws.com/0/20722/dfead851-b728-d42e-4f75-6cc72c4d83d3.png "スクリーンショット 0025-06-16 22.08.24.png")

Applicationの名前などを入力して、プロジェクトを作成します。
このとき、アイコンやメインのActivityを変更できますが、最初は何もしないでデフォルトのままでいいと思われます。

無事にプロジェクトが作成されると、以下のような画面になります。

![スクリーンショット 0025-06-16 22.11.24.png](https://qiita-image-store.s3.amazonaws.com/0/20722/c3117fcf-7331-6e13-6bb5-13a341481a25.png "スクリーンショット 0025-06-16 22.11.24.png")

"Run" -> "Debug As …" -> "Android Application"で、実機（あるいはエミュレータ）で動作確認してみましょう。

![スクリーンショット 0025-06-16 22.13.39.png](https://qiita-image-store.s3.amazonaws.com/0/20722/69700242-12c3-79d2-52cc-9b7a89de6fd8.png "スクリーンショット 0025-06-16 22.13.39.png")

# Scalaのプロジェクトに変更する

このままでは、Javaのプロジェクトになっていますので、これをScalaのプロジェクトに変更しましょう。

Package Explorer でプロジェクトを選択して、右クリック->"Configure" -> "Add Scala Nature" でScalaプロジェクトだと認識させることが出来ます。
このとき一緒に、右クリック->"Add AndroidProguardScala Nature"もしておきましょう。


# メインのActivityをScalaで書き直す

srcフォルダを開くと、MainActivity.java というファイルがあります。

![スクリーンショット 0025-06-16 22.12.02.png](https://qiita-image-store.s3.amazonaws.com/0/20722/a0b91f5e-7832-6042-c3cf-ab4593ad101c.png "スクリーンショット 0025-06-16 22.12.02.png")

もう一度、拡張子を見直してみます。

".java" ですね。

Scalaでアプリを作りたいのに、".java"では興ざめです。
これを、Scalaで書き直してみます。
とりあえず、"MainActivity.java"は削除してしまいます。

新たに、"File" -> "New" -> Scala Class"で、クラス名を"MainActivity"にして新しいScalaのクラスを作成します。
コードは以下。

```scala:MainActivity.scala
import android.os.Bundle
import android.app.Activity
import android.view.Menu

class MainActivity extends Activity {

	override protected def onCreate(savedInstanceState: Bundle) {
		super.onCreate(savedInstanceState)
		setContentView(R.layout.activity_main)
	}

	override def onCreateOptionsMenu(menu: Menu): Boolean = {
		getMenuInflater().inflate(R.menu.main, menu)
		true
	}

}
```

もう一度、"Run" -> "Debug As …" -> "Android Application"で、実機（あるいはエミュレータ）で動作確認してみましょう。


>sbtを使っている人にはおなじみのTypedActivityは使えなさそうです。
>また、TRクラスも存在しないようです。Javaと同じようにRクラスで我慢しましょう。