それでは設定していきましょう!
2014/4/17 少し修正
2014/04/18 Mac 版のエントリー 書きました。
2014/4/22 Mac 版 calabash-ios のエントリー 書きました。
以下の環境が必要です。
Android SDK (ANDROID_HOME も設定する)
J2SDK (JAVA_HOME も設定する)
Ruby (インストーラーで Path を設定してくれます)
Path に %ANDROID_HOME%\platform-tools と %JAVA_HOME%\bin を追加
恐らく全てスペースを含まないパスにインストールするのが安全ですので、Android SDK は Xamarin とは別にインストールし、C:\Android\ などに配置するのが良さそうです。
ではインストールを始めます。
まずは Ruby です。
ダウンロードページ の「Windows版Rubyバイナリ」からダウンロード、インストールし、"インストールフォルダ\bin" に PATH を設定します。私の環境では ActiveScriptRuby では動作しませんでした。デフォルトのインストールパスが %ProgramFiles% なのでパスに空白が含まれていたことが原因と思われます。本エントリーでは RubyInstaller からのダウンロードをすることにします。
Downloads から Ruby 2.0.0-p451 (x64) と DevKit-mingw64-64-4.7.2-20130224-1432-sfx.exe をダウンロードし、最初に Ruby 2.0.0-p451 (x64) をインストール。「Ruby の実行ファイルへ環境変数 PATH を設定する」にチェックを付けましょう。
次に DevKit を Ruby のインストールフォルダに解凍。
Development Kit · oneclick/rubyinstaller Wiki · GitHub の内容に従い、コマンドプロンプトで Ruby インストールフォルダに移動して
> ruby dk.rb init > ruby dk.rb install
を実行。
calabash-android インストールの準備が整いました。
> gem install calabash-android Fetching: builder-3.2.2.gem (100%) Successfully installed builder-3.2.2 Fetching: diff-lcs-1.2.5.gem (100%) Successfully installed diff-lcs-1.2.5 Fetching: multi_json-1.8.4.gem (100%) Successfully installed multi_json-1.8.4 Fetching: gherkin-2.12.2.gem (100%) Building native extensions. This could take a while... Successfully installed gherkin-2.12.2 ・・・略・・・ Parsing documentation for calabash-android-0.4.20 Installing ri documentation for calabash-android-0.4.20 XX gems installed
インストール後、
> calabash-android version 0.4.20
と出ればインストール完了です。
Android アプリをテスト
やり方は ADT のアプリも Xamarin のアプリも同じです。
コマンドプロンプトでアプリのプロジェクトフォルダに移動します。
> set RUBYOPT=-EUTF-8
魔法の言葉を最初に呟いてから、
> calabash-android gen
で自動で設定ファイルを作ってくれます。
features\my_first.feature は Shift-JIS で作成されるので UTF-8 に変更し*1、テストするアプリへのパスを追加して、例えば
> calabash-android run bin\Debug\file.apk
としてテストを実行します。
Xamarin の場合は file-Signed.apk で run すると resign する必要がなさそうです。
ADT と Xamarin で実行した時の動画を張っておきます。
Windows の Xamarin で作成したアプリを Calabash でテスト - YouTube
Windows の ADT で作成したアプリを Calabash でテスト - YouTube
お疲れ様でした!
といいたいところですが、私はかなり嵌りました。嵌りそうなポイントを以下に纏めます。
設定の不備
以下を確認しましょう。
- ANDROID_HOME 設定、JAVA_HOME 設定、Ruby の bin フォルダに PATH が通ってる、(恐らくですが)Ruby をスペースなしのパスにインストールなど。
- Android Manifest に、android.permission.INTERNET を設定してビルドする
- Xamarin のアプリの場合は、「Use Fast Deployment」オプションをオフにする。
- どうしても動かない場合は J2SDK, eclipse, Android SDK を再インストールしたらさくっと動くかも知れませんよ?(私です)
run file.apk 時のエラー
xxx/helpers.rb:105:in `scan': invalid byte sequence in Windows-31J (ArgumentError)
というエラーが出た。
calabash-android 実行前に set RUBYOPT=-EUTF-8 を実行しましょう。
参考:WindowsでEncoding.default_externalをUTF-8にするには - すがブロ
malformed UTF-8 character (ArgumentError)
というエラーが出た。
.feature ファイルを UTF-8 で保存しなおしましょう。日本語を書く場合は必須です。
/helpers.rb:91:in `block (2 levels) in fingerprint_from_apk': No RSA file found in META-INF. Cannot proceed. (Runtime Error)
というエラーが出た。
resign すると run できるはずです。Xamarin のアプリでは最初のテストの時に一度必要っぽいです。
More than one device connected. Specify device serial using ADB_DEVICE_ARG (RuntimeError)
複数台のデバイスが起動していると出ます。ログにあるように ADB_DEVICE_ARG を使い、テスト対象のデバイスID を指定する必要があります。
> adb devides List of devices attached 021XXRXXXXXXXXXX device emulator-5554 device
などと出るので、
> calabash-android run file.apk ADB_DEVICE_ARG=021XXRXXXXXXXXXX
としてください。
java_keystore.rb:11:in `initialize': Could not list certificates in keystore. Probably because the password was incorrect. (RuntimeError)
これは多分私だけしか出ないと思います。J2SDK を再インストールしたら出なくなりました。。
お疲れ様でした。
参考サイト:http://ichikoich.hatenablog.com/entry/2013/03/28/011318
*1:そうしないと日本語が通りません