Scala4Android

@numa08

Agenda

  • ScalaでAndroidアプリを作りたい
  • AndroidでのScala事情
  • Eclipse(ScalaIDE)を使う方法
  • antを使う方法
  • まとめ:AndroidにおけるScala

ScalaでAndroidアプリを作りたい

  • Androidも(一応)Java
  • まぁScalaも動くっしょ
  • 昔のScalaってAndroidのサポートしてなかった?

AndroidでのScala事情

  • わりと色々と提供される
  • sbtのプラグイン
  • g8でやるやつ
  • IntelliJのやつ
  • AndroidSDKのアップデートについていけていないことも

AndroidでのScala事情

pfn/android-sdk-plugin

sbtのプラグイン。Androidのプロジェクトをsbt用に置き換えてビルドする。勝手にProguardが走るのでJava6以下の環境じゃないと動かないよ。

jberkel/android-plugin

sbtのプラグイン。割りとScalaでAndroidやるって言うとこれだったイメージ。更新が結構止まってるような。

pocorall/scaloid

ScalaでAndroidのコードを書くためのライブラリ。後述の型に関するいくつかの問題をいいかんじにラップしてくれるけど、sbtやmaven前提ってどうなの。

AndroidでのScala事情

  • AndroidSDKのバージョンアップ頻度はわりと高い
  • ツールのパスが変わったり今までのツールが利用不可になるとかよくある
  • 各種OSSプロジェクトやブログ記事などがついていってない
  • (それなりに)SDKのバージョンアップに耐える方法が必要?
  • とりあえずJavaをScalaに書き換えるだけのところから始めるか・・・

ScalaIDEを使う方法

ScalaIDE便利だよね。エディタはvimだけど、importの補完とか文法ミス見つけるのにマジ便利。

.project.classpathをいじるだけでわりと簡単にできるよ。

ScalaIDEを使う方法

こんな感じでいじるよ

scala-libraryを参照に追加して完了。ビルド、実行ができます。

antを使う方法

android update projectをした後に、custon_rule.xmlを作成し編集をする。

編集の内容はこんな感じ

ant scala-build debugとかでいけると思ってた・・・

たぶん標準のbuild.xmlに手を加えないとだめ←メンド

まとめ

まとめ

致命的な問題があります

  • Androidはメソッドの上限が2^16(65536)個
  • 超えると実行できない
  • Scala-libraryとsupport-libraryで上限突破・・・
  • Scala-libraryのメソッド数いくつだよ・・・

まとめ

気持ち悪いコードが生まれます

  • Androidはキャストをわりと使う
  • Scalaでキャスト・・・?

まとめ

findViewByIdとか

Option(findViewById(R.id.textview)) match {
  case Some(t:TextView) => t.setText("hello")
  case _ => {/*do something*/}
  }

まとめ

ScalaでAndroidをやるには、我々はまだ、早すぎたのかもしれない・・・