header

2013年9月21日土曜日

Scala & ensime & Emacsでandroidにhello world


Javaはつかいたくないけどandroidでなにかアプリを作りたいとおもっていて、
Scalaがよさそうとおもってhello worldのプログラムを実機にインストールす
るまでできた。これはそのメモ(環境 Ubuntu 12.04 LTS & Emacs 24.3.1)

環境変数

JAVAHOME を設定した

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/

sbtのインストール

sbt(simple build tool)の略らしい、scalaのバージョン管理するにもいいらし
いのでインストールした。別に下のコードを書く必要はないけど、sbt の
version 0.13-SNAPSHOTだとandroid-pluginがうまく動いてくれないようなので
0.12系のほうが良い。(Sat Sep 21 08:10:27 2013時点 https://github.com/jberkel/android-plugin/issues/190)

local SBT12='http://repo.scala-sbt.org/scalasbt/sbt-native-packages/org/scala-sbt/sbt//0.12.4/sbt.deb'
cd ${HOME}/opt/local/
wget ${SBT12}
sudo dpkg -i sbt.deb

ensime

slimeも必要かもしれない.
el-getをつかっているなら M-x el-get-install ensime でインストールできると思う。
ただ、インストール後のbuild スクリプトがsbt update stageとなっているので、sbt
インストール後の方がいい。

android plugin

Android pluginのGetting startedをみてそのままgiter8をインストール

curl https://raw.github.com/n8han/conscript/master/setup.sh | sh
~/bin/cs n8han/giter8


あとは

~/bin/g8 jberkel/android-app
> Template for Android apps in Scala

> package [my.android.project]:
> name [My Android Project]: My_Android_Project
> main_activity [MainActivity]:
> scala_version [2.9.2]: 2.10.2
> api_level [10]: 18
> useProguard [true]:
> scalatest_version [1.8]:


でプロジェクトは作れる
nameのところはスペースが入ってるとうまく行かなかった。

project

~/bin/g8 jberkel/android-appコマンドでひな形をつくったら、

sbt
android:package-debug


をしてパッケージ化しようとしけどエラーがでた。

> android:package-debug
[info] Updating {file:/home/ck/Development/yy_android_project/}YY_Android_Project...
[info] Wrote /home/ck/Development/yy_android_project/target/scala-2.10/src_managed/main/scala/my/android/project/TR.scala
[info] Resolving org.scalatest#scalatest_2.10;1.8 ...
[warn] module not found: org.scalatest#scalatest_2.10;1.8
[warn] ==== local: tried
[warn] /home/ck/.ivy2/local/org.scalatest/scalatest_2.10/1.8/ivys/ivy.xml
[warn] ==== public: tried
[warn] http://repo1.maven.org/maven2/org/scalatest/scalatest_2.10/1.8/scalatest_2.10-1.8.pom
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
[warn] :: UNRESOLVED DEPENDENCIES ::
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
[warn] :: org.scalatest#scalatest_2.10;1.8: not found
[warn] ::::::::::::::::::::::::::::::::::::::::::::::
[trace] Stack trace suppressed: run last YY_Android_Project/*:update for the full output.
[error] (My_Android_Project/*:update) sbt.ResolveException: unresolved dependency: org.scalatest#scalatest_2.10;1.8: not found
[error] Total time: 1 s, completed Sep 21, 2013 8:29:12 AM


scalatest のページを見ると2.0.M8が最新っぽいので、./project/Build.scalaの
libraryDependencies を変更(Errorからググって発見)

// libraryDependencies += "org.scalatest" %% "scalatest" % "1.8" % "test"
libraryDependencies += "org.scalatest" %% "scalatest" % "2.0.M8" % "test"


その後もう一度ためしたが何かエラーがでて、android sdkの
build-tools/android-4.3/dx と同じディレクトリのapptをplatform-toolsの中
にリンクを作成した。


これでsbt 'android:package-debug'(これはバッチモードの書き方)でapkファ
イルを作成できた。あとは作成された apk ファイルをadb install
filepath.apk のように指定すれば実機にも転送できた(もちろん事前に
android-ruleの追加とかはしてますが)

ensime

それとensimeを使うために./project/plugins.sbtにensimeのpluginを追加した。
(ensimeの上の2つの文は勝手に設定されていた)

resolvers += Resolver.url("scalasbt releases", new URL("http://scalasbt.artifactoryonline.com/scalasbt/sbt-plugin-releases"))(Resolver.ivyStylePatterns)

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

addSbtPlugin("org.ensime" % "ensime-sbt-cmd" % "0.1.0")


その後

sbt 'ensime generate'


で .ensime ファイルができてるので、.scalaのファイルを開いたあと M-x
ensime でensimeが利用できるようになる。


0 件のコメント:

コメントを投稿

Popular Posts

Blogger templates

Blogger news