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

MacでAndroid開発環境を作ってみる(Scala + sbt0.10)

ついに私もガラケーからXperia rayに機種変更しちゃったので、開発環境を作っていく過程を書き残しておく。

どういう環境で、どういうプログラミング言語で作るのか決定する

Javaで開発する気は全く起きないので、Scalaで作ることにする。
Scalaならsbtを使えば環境周りは大分楽なので、多分大丈夫だろう。
基本的にはvim + sbt 0.10で何とかなると思うが、デバッグ時にはIntelliJ Ideaを使うとよいかも。
(でも、今回はHello, Worldしかやらないので、あんまり関係無い。)

sbt0.10 と android-sdkをインストール

※ homebrewは予めインストールしておく。
※ ここから先は基本的にターミナルでコマンドを打っていく。

brewを使ってインストールしよう。

$ brew install sbt android-sdk

このとき、android-sdkがインストールされた場所が出てくるので、忘れないようにする。

/usr/local/Cellar/android-sdk/r11: 127 files, 36M, built in 2 seconds

android sdkアップデートする

$ /usr/local/Cellar/android-sdk/r11/tools/android update sdk

GUIが立ち上がるので、とりあえずaccept all選んでやって小一時間動かしておく。(結構時間かかる)
その隙に他の作業をする。

conscriptインストール

$ curl https://raw.github.com/n8han/conscript/master/setup.sh | sh         

~/bin/cs にインストールされる

giter8をインストール

$ ~/bin/cs n8han/giter8  

~/bin/g8 にインストールされる

Androidアプリケーションのテンプレートを作成する

$ ~/bin/g8 jberkel/android-app

※自分の環境では依存関係が上手く解決できなかったので、commons-codec-1.3.jarをここから落としてきて、~/.m2/repository/commons-codec/commons-codec/1.3 の下に置いてやった。

アプリケーション名などを決定する。
とりあえず全てデフォルトにしておいた。

sbtのandroid-pluginをリポジトリに追加する

ただし、外部のmavenリポジトリは無いみたいなので、ローカルに自前で置かないとダメみたい
どこかのディレクトリにgithubからチェックアウトして、sbtで配置しておく。

$ git clone git://github.com/jberkel/android-plugin.git  
$ cd android-plugin
$ sbt publish-local

テンプレートが間違っている場合は直す

android-pluginのバージョンが0.53になっていたので、githubのここのversionを見て、それに合わせておく。

project/plugins/build.sbtを以下のように修正

libraryDependencies += "org.scala-tools.sbt" %% "sbt-android-plugin" % "0.6.0-SNAPSHOT"
sbtのProjectの設定コードが間違っているので直す

なんかsbt0.10に対応しているんだかいないんだかわかんない・・・
とりあえずProjectの名前と配置の位置が逆なので直しておいた。

project/build.scalaを以下のように修正
26行目と27行目が逆
32行目と33行目が逆

import sbt._

import Keys._
import AndroidKeys._

object General {
  val settings = Defaults.defaultSettings ++ Seq (
    name := "My Android Project",
    version := "0.1",
    scalaVersion := "2.9.0-1",
    platformName in Android := "android-10"
  )

  lazy val fullAndroidSettings =
    General.settings ++
    AndroidProject.androidSettings ++
    TypedResources.settings ++
    AndroidMarketPublish.settings ++ Seq (
      keyalias in Android := "change-me",
      libraryDependencies += "org.scalatest" %% "scalatest" % "1.6.1" % "test"
    )
}

object AndroidBuild extends Build {
  lazy val main = Project (
    "My Android Project",
    file("."),
    settings = General.fullAndroidSettings
  )

  lazy val tests = Project (
    "tests",
    file("tests"),
    settings = General.settings ++ AndroidTest.androidSettings
  ) dependsOn main
}

環境変数設定

~/.zshrcなどのシェルの設定ファイルにANDROID_HOMEを追加しておく。あと、PATHも通しておく。

export ANDROID_HOME=/usr/local/Cellar/android-sdk/r11         
PATH=$ANDROID_HOME/bin:$PATH

デバイス登録する

※先ほどのGUIでのインストールが終わっていないと作業ができないので、終わるまで待つ。

デバイス一覧を見る
$ android list targets

こんな感じで見える。今回はソニエリのやつなので、idを覚えておく。

id: 16 or "Sony Ericsson Mobile Communications AB:EDK 1.1:10"
     Name: EDK 1.1
     Type: Add-On
     Vendor: Sony Ericsson Mobile Communications AB
     Revision: 1
     Description: XPERIA Device
     Based on Android 2.3.3 (API level 10)
     Libraries:
      * com.sonyericsson.media.infinite.extension_1 (com.sonyericsson.media.infinite.extension_1.jar)
          Library for Android Market filtering
      * com.sonyericsson.eventstream_1 (com.sonyericsson.eventstream.jar)
          Library for Android Market filtering
      * com.sonyericsson.eventstream_2 (com.sonyericsson.eventstream.jar)
          Library for Android Market filtering
     Skins: WVGA854, WQVGA400, HVGA, WQVGA432, WVGA800, QVGA, HVGA_XPERIA, WVGA_XPERIA (default)

デバイス登録

android createコマンドで名前を使える。-nオプションに名前を設定する。

$ android create avd -n sonyeri_device -t 16 

sbt実行してエミュレータ起動する

$ sbt
> compile
> android:emulator-start sonyeri_device
> start-emulator

Hello, World が出たらOK
f:id:voidy21:20110827191633p:image:w360
出た!

次は実機でデバッグ

※Androidを持っていない人は急いで買ってくる

実機のUSBデバッグモードをオンにする

http://www.adakoda.com/android/000242.html を参考にする。
付属のUSBケーブルでMacに接続する。

sbtから

> install-device

をするとインストールされる。

最後に

実機で動くと結構興奮した。この感覚は久しぶりかもしれない。。
次はまともな開発をやっていきたい。