読者です 読者をやめる 読者になる 読者になる

アジョブジ星通信

日常系バンザイ。

WindowsでのAndroid with Scalaは疲れる

Azyotter(Saostar)がNoClassDefFoundErrorとか吐いて改善策が思い当たらないのでScalaで作りなおしちゃえってなってのですが、環境づくりでへとへとになったというお話。とりあえずapk作るところまでできたので報告です。
Androidの開発はLinuxでやるべきなのかな…。

本当はEclipseでやりたかったけれど

というお言葉を頂いたのでandroid-pluginでやることに。

前提事項

  • Scalaがインストールされていること。たぶんPATH通さないとダメ(よくわからない)。書いてるときには2.9.2が最新でした。
  • Android SDKがインストールされていて、環境変数の「ANDROID_SDK_HOME」、「ANDROID_SDK_ROOT」、「ANDROID_HOME」のいずれかにAndroid SDKのインストール先が設定されていること。

giter8ってなんだよ

公式ヘルプを参考にやってみることにしました。

sbtとかいうコンパイル環境?はGitHubのwikimsiで公開されてたのでそのままインストール。安心のWindows Installerはうれしいですね。

で、次にgiter8を入れます。公式ヘルプにやり方書いてありますね。よし!これをコマンドプロンプトに!…ってshってなんだよshって。shってどう考えてもLinuxで登場するアレじゃん。
という感じで死ぬかと思いましたが先人がいました。まぁそりゃいますよね。
Windowsでgiter8を使う - 新・たけぞう瀕死の日記

さっきの記事にも書いてありましたが、giter8はGitHub上のテンプレートを取ってくるやつみたいですね。なかなか面白い発想。

プロジェクト作成

公式ヘルプには

$ ~/bin/g8 jberkel/android-app # sbt 0.11.2

とか書いてあるので、giter8があるところ(C:\Users\UserName\bin とか)にPATH通してコマンドプロンプト

g8 jberkel/android-app

でEnterキーをッターン!!

パッケージ名とかプロジェクト名とかAndroid APIのバージョンとかScalaのバージョンとか聞かれるので素直に答えましょう。
useProguardは大人の事情により使えないみたいなので「false」にします。[f:id:azyobuzin:20120510211732p:plain]
コメントでtrueじゃないと落ちると言われてまして、現状落ちてるのですが、trueにするとandroid:package-debugに失敗します><
f:id:azyobuzin:20120512182402p:plainどうしたらいいものか。

コンパイルの準備

あとはコード書いてコンパイルだ!

f:id:azyobuzin:20120510211958p:plain
……死んだ。

非常に残念な感じになりました。not foundなんです存在しないんです。

で、こんな記事を見つけました。
hanhan's blog » scalaでandroid開発しようとしてくじけそうになったのでメモ

まあ、2011/6/12現在の話なので、時が立てばこんなことしなくてもよくなると思われる。

よくなってませんね!

というわけでGitHubからandroid-pluginのソースコード取ってきて

sbt update
sbt publish-local

を実行します。

次にプロジェクトが入ってるフォルダのproject\plugins.sbtをテキストエディタで開いて

addSbtPlugin("org.scala-sbt" % "sbt-android-plugin" % "0.6.1")

addSbtPlugin("org.scala-sbt" % "sbt-android-plugin" % "0.6.2-SNAPSHOT")

にします。
バージョンはその時の最新版の数字を入れてください。

これでsbtが実行できるはずです。
あとは公式ヘルプに書いてあるように

> android:package-debug

でapk作成!

f:id:azyobuzin:20120510213154p:plain
…ってそんな甘いもんじゃなかった…。

どうもScalaTestが見当たらないみたいです。元のテンプレート糞だろ。

というわけで、ScalaTestのダウンロードページにしたがって1.8.RC1に書き換えます。

project\build.scalaの

      libraryDependencies += "org.scalatest" %% "scalatest" % "1.7.RC1" % "test"

      libraryDependencies += "org.scalatest" %% "scalatest" % "1.8.RC1" % "test"

に書き換えます。

ついに完成

さぁついにこれでやっとapk生成できます!

sbtは一度exitしてもう一度sbtを起動し直します。
そして

> android:package-debug

f:id:azyobuzin:20120510213739p:plain
やったね!!!

では、これからScalaの文法とかなんとか勉強するとします。思ったより変態言語臭漂ってる。