RhodesでAndroidとiPhoneのアプリを、と思ったけれど…

たぶん使わないと思うので足早に。

インストール

> mkdir rhodes_projects
> cd rhodes_projects
> rbenv gemset create 1.9.3-p194 rhodes
> echo rhodes > .rbenv-gemsets
> gem install rhodes
> rbenv rehash
> rhodes-setup
We will ask you a few questions below about your dev environment.

JDK path (required) (/Library/Java/Home): 
Android SDK path (blank to skip) (): /usr/local/Cellar/android-sdk/r20.0.1
Android NDK path (blank to skip) (): /usr/local/Cellar/android-ndk/r8b
Windows Mobile 6 SDK CabWiz (blank to skip) (): 
BlackBerry JDE 4.6 (blank to skip) (): 
BlackBerry JDE 4.6 MDS (blank to skip) (): 
BlackBerry JDE 4.2 (blank to skip) (): 
BlackBerry JDE 4.2 MDS (blank to skip) ():

プロジェクト作成

> rhogen app basestation
> cd basestation
> vi build.yml
android:
  version: 4.1

scaffold的ななにか。

> rhodes model cbase id
Generating with model generator:
     [ADDED]  app/Cbase/index.erb
     [ADDED]  app/Cbase/edit.erb
     [ADDED]  app/Cbase/new.erb
     [ADDED]  app/Cbase/show.erb
     [ADDED]  app/Cbase/index.bb.erb
     [ADDED]  app/Cbase/edit.bb.erb
     [ADDED]  app/Cbase/new.bb.erb
     [ADDED]  app/Cbase/show.bb.erb
     [ADDED]  app/Cbase/cbase_controller.rb
     [ADDED]  app/Cbase/cbase.rb
     [ADDED]  app/test/cbase_spec.rb

ビルド
> rake -T
> rake run:android

rakeながいよ

run:iphoneするならXcodeのPreferencesからiOS 5.0 Simulatorをinstallしておく。

> rake run:iphone

ながいー

うーん、Rubyでマルチプラットフォームは魅力なんだけど、うーん。。

Androidアプリをscalaで作りたい

homebrewでsbtとscalaは入れてある前提。

> brew install android-sdk
> android

SDKマネージャーが立ち上がるので適当なバージョンをインストール

> android list targets
Available Android targets:
----------
id: 1 or "android-16"
     Name: Android 4.1
     Type: Platform
     API level: 16
     Revision: 2
     Skins: HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800 (default), WVGA854, WXGA720, WXGA800, WXGA800-7in
     ABIs : armeabi-v7a
----------
id: 2 or "Google Inc.:Google APIs:16"
     Name: Google APIs
     Type: Add-On
     Vendor: Google Inc.
     Revision: 2
     Description: Android + Google APIs
     Based on Android 4.1 (API level 16)
     Libraries:
      * com.google.android.media.effects (effects.jar)
          Collection of video effects
      * com.android.future.usb.accessory (usb.jar)
          API for USB Accessories
      * com.google.android.maps (maps.jar)
          API for Google Maps
     Skins: WVGA854, WQVGA400, WSVGA, WXGA800-7in, WXGA720, HVGA, WQVGA432, WVGA800 (default), QVGA, WXGA800
     ABIs : armeabi-v7a

> android create avd -n android_test -t 1
Auto-selecting single ABI armeabi-v7a
Android 4.1 is a basic Android platform.
Do you wish to create a custom hardware profile [no]
Created AVD 'android_test' based on Android 4.1, ARM (armeabi-v7a) processor,
with the following hardware config:
hw.lcd.density=240
vm.heapSize=48
hw.ramSize=512

プロジェクト作成

> android create project -t 1 -k com.example.testapps -a HelloTest -p hello_test

ビルド

> ant debug

リリース用ならant releaseなのかな。

エミュレータ転送

> adb install bin/HelloTest-debug.apk

ここからscalaで開発するための準備。

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

$HOME/binにファイルがある

> mkdir scala-test
> cd scala-test
> g8 jberkel/android-app
api_level [10]: 16

androidコマンドで起動するSDKマネージャーでインストールしているものが
Android 4.1 (API 16)
だったので16を指定した。

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

0.6.3-SNAPSHOTだった

> cd test-scala #g8でつくったプロジェクトのディレクトリ
> vi projects/plugins.sbt

0.6.3-SNAPSHOTに書き換える。

> sbt
> compile

OutOfMemoryErrorが出る時がある。が何度かやればいける。*1

デバッグ

> android:package-debug

エミュレータ起動してデプロイ

> android:emulator-start scala_android_test
> PANIC: Could not open: /usr/local/Cellar/android-sdk/r20.0.1/.android/avd/scala_android_test.ini

ここからPANIC: 部分の修正ログ。

> export ANDROID_SDK_HOME=/usr/local/Cellar/android-sdk/r20.0.1

してから

> android create avd -n scala_android_test -t 1

> sbt
> android:package-debug
> android:emulator-start scala_android_test
[error] Expected 'scala_android_test'
[error] android:emulator-start scala_android_test

~/.androidと$ANDROID_SDK_HOMEの両方にavdがあって、ごちゃってきたのでシンボリックリンクすることにした(強引)

> cd /usr/local/Cellar/android-sdk/r20.0.1
> ln -s ~/.android .android

> sbt
> android:emulator-start scala_android_test
> android:start-emulator

android:emulator-start scala_android_testでエミュレータが起動した時に画面にロックがかかっていたらandroid:start-emulatorする前にロックを外してホーム画面にしておく。

android:install-emulatorでもいい。
実機なら、
android:install-device
android:start-device

スクリーンショットも取れた。

> android:screenshot-emulator

sbtでandroid:のあとにタブ打てば色々とコマンドがでます。

[追記]
*1
sbtのファイルをみてみたら、

> cat /usr/local/bin/sbt
#!/bin/sh
test -f ~/.sbtconfig && . ~/.sbtconfig
exec java -Xmx512M ${SBT_OPTS} -jar /usr/local/Cellar/sbt/0.12.0/libexec/sbt-launch.jar "$@"

となっているので、

vi ~/.sbtconfig
SBT_OPTS=-Xmx1024M

としてみたらとりあえずOutOfMemoryErrorが出なくなった(いまのところ)
psみたら、
/usr/bin/java -Xmx512M -Xmx1024M -jar /usr/local/Cellar/sbt/0.12.0/libexec/sbt-launch.jar
いいのかな。。

Android, 開発環境構築メモ

メモ。

JDK6(OSX default)
AndroidSDK
http://developer.android.com/sdk/index.htmlEclipse

Eclipse IDE 3.6
http://www.eclipse.org/downloads/Eclipse IDE for Java Developers

workspace
  help -> install new software
    add
Google Android Plugin
  https://dl-ssl.google.com/android/eclipse/eclipse restart
  preferences java compiler compiler compiance settings
    1.6
  環境設定 -> android -> SDK location
  Window -> Android SDK and AVD manager
    Available Packkeges
      all check
eclipse restart
  Window -> Android SDK and AVD manager
    Vitual Devices
      New