Xamarin 日本語情報

Xamarin(ザマリン) の代理店だったエクセルソフト田淵のブログです。主に Xamarin に関するエントリーをアップしていきます。(なるべく正しい有益な情報を掲載していきたいと考えていますが、このブログのエントリーは所属組織の公式見解ではありませんのでご注意ください)

Windows での calabash-android のインストールと実行(ADT も Xamarin もOK!)

それでは設定していきましょう!

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 です。

ダウンロードページ の「WindowsRubyバイナリ」からダウンロード、インストールし、"インストールフォルダ\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 を設定する」にチェックを付けましょう。

f:id:ytabuchi:20140228192757p:plain

次に DevKit を Ruby のインストールフォルダに解凍。

f:id:ytabuchi:20140228193500p:plain

 

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:そうしないと日本語が通りません

エクセルソフト | ダウンロード | 学習用リソース | JXUG リンクページ | ブログ購読