Windows7にRhoMobile(Rhodes)をセットアップして、RubyによるAndroidアプリの作成を試してみた

手持ちのNexus7にてGPSを扱うAndroidアプリを作りたいなと考えて、Rubyで書く方法を探してみたところ、RhoMobileというフレームワークがあったため試してみました。
なお、インストール後にAPIを読んだところ、現時点ではGPSのNMEA0183形式データを取得するAPIが見つからなかったため、利用は保留にしています。次回さわるときの参考までに、と。

■構築した環境

Rubyは、RhoMobile Suiteに同梱されているものを使用します

■インストール手順

Javaのインストール

現時点では、Java7は非サポートのようですので、Java6を入れました。Android NDKはx86版を使うので、Javax86版を入れました。


インストール先は、以下の通りです。

C:\jdk6


また、環境変数JAVA_HOME」「Path」の両方に以下を追加しました。

C:\jdk6\bin
Android SDK r21.1のインストール

現時点の最新版r22では動作しなかったため、旧バージョンのr21.1をインストールしました。
なお旧バージョンへのリンクが無かったため、以下のページを参考に、直接exeをダウンロードしました。


インストール先は、以下の通りです。

C:\androidsdk
Android NDK r8d x86のインストール

こちらも現時点の最新版r8eでは動作しなかったため、以下のページを参考に、直接zipファイルをダウンロードしました。


zipファイルの展開先は、以下の通りです。

C:\androidndk\<この下に解凍>


また、環境変数PathにNDKのフォルダを指定しました。

C:\androidndk\android-ndk-r8d
エミュレータのイメージやPlatformtoolのインストール

SDK Manager より、以下のイメージやPlatformtoolをインストールします。
なお、Android SDK Toolsのバージョンは21.1のまま、アップデートしません。

項目 バージョン
Android SDK Platform-tools Rev.16.0.2
Android 4.0 API 14
Extras - Android Support Library Rev.13
Extras - Google USB Driver Rev.7
RhoMobile Suiteのインストール

RhoMobile本体に加え、開発環境も手に入れたかったため、RhoMobile Suiteをダウンロードしました。


右の青い「Download」をクリックし、メールアドレス等を入力してSubmitすると、指定したメールアドレスにダウンロード先リストが届きます。
メールを確認し、「2.2 SP1 Windows」のリンクをクリックして、ダウンロードします(URLの有効期間は5日間)。
なお、メールには、2.2の他、2.1と2.0のリストも記載されていました。


インストール先は、以下の通りデフォルトのままです。
なお、パスを変える場合には、公式にもある通り、インストール先にはスペースを入れないように注意します。
また、手元にGitがあったため、「Choose Components」では「Git 1.7.6」のチェックを外しています。

C:\MotorolaRhoMobileSuite2.2.1.13


この時点ではRhoMobile Suiteの設定が残っていますが、アプリを作成しないまま開くと、

Please open or create a Rhodes application and try again.

とエラーが出るので、サンプルアプリを作成してから設定します。



■アプリの作成

ウィザードによるアプリの作成

テンプレートによるアプリを作成し、Androidエミュレータを起動しました。
なお、RhoMobileから選択できるAndroidエミュレータのバージョンは4.0.3が最新でしたが、4.0.0でないと動作しませんでした。
PhoMobile Suite 32bit を起動すると、作業ディレクトリを聞かれますので、以下を指定しました。

D:\rhomobile

メニューより、以下を選択します。

File > New > Project


Select a wizard 画面が開くため、

RhoMobile > RhoMobile application

を選択し、Nextを押します。
次の「RhoMobile application generator wizard」画面では、何も変更せず、「Finish」ボタンを押します。
これで、テンプレートによるアプリができました。




アプリの設定

設定画面を開きます。

Window > Preferences


まずは、Rubyの設定をします。
Ruby > Interpreters」を選択します。
「Host:localhost」のまま、「Search」ボタンを押します。
Search後、RhoMobile Suiteに同梱されているruby.exeにチェックが入っていることを確認し、OKボタンを押します。


次にRhoMobileの設定を行いますので、再度Preferencesを開きます。
「RhoMobile」を選択し、以下を設定します。

項目
Java bin path: C:\jdk6\bin


次に、RhoMobile > Android を選択し、以下を設定します。

項目
Android SDK: C:\androidsdk
Android NDK: C:\androidndk\android-ndk-r8d


設定後、「OK」ボタンを押します。



■アプリのエミュレータ実行

Andriodエミュレータの場合

アプリ「RhoMobileApplication1」の上で右クリックし、「Run As」→「Run Configurations...」を選択します。
「Create, manage, and run configurations」画面では、「RhoMobile Application」をダブルクリックし、「New_configuration」を選択します。
Common settingでは、以下の内容を設定します。

項目
Platform Andrioid 4.0
Simulator type: Simulator


入力後、「Apply」→「Run」の順に押すと、Consoleにビルド状況が流れます。
しばらく待つとビルドが終了し、Androidエミュレータが起動します。



Rhomobileエミュレータの場合

「Create, manage, and run configurations」画面で、設定を変更し、Runボタンで起動します。

項目
Simulator type: RhoSimulator


こちらの場合、エミュレータが高速に起動し、Web Inspactorも起動します。
終了する場合、メニューの「Main > Exit」にて終了します。



Androidアプリのビルド

アプリを選択した状態で、メニューの「RhoMobile > Production build」を選択し、Select platformでは、「Android」を選択します。
ビルドが終わると、以下のファイルができていました。

D:\rhomobile\RhoMobileApplication1\bin\target\android\RhoMobileApplication1_signed.apk

Androidアプリのインストール

いろいろと方法があるようですが、今回は手軽なGmail経由でのインストールを行います。
自分のGmailへビルドしたアプリを添付し、送信します。
ストア以外から入手した野良apkファイルをAndroidにインストールする方法 | TeraDas-テラダス


あとはNexus7でメールを受信し、添付ファイルをタップしてインストールすれば完了です。



■環境構築時のエラー

環境構築をしている際に、ビルドまわりでエラーが出たため、その記録を残しておきます。

Android NDK r8eを使用したら、エラー

Android NDKをダウンロードする際、現時点で最新の「android-ndk-r8e-windows-x86.zip」を使用したところ、エラーが発生しました。

rake aborted!
Can't detect NDK toolchain path (corrupted NDK installation?)


同じようなエラーを探してみたところ、以下がありましたが、パスを変更しても同じエラーが出たため、バージョンを一つ前のr8dを使用することにしました。

Android SDK 22 + Android NDK r8dでエラー

NDKをr8eからr8dにしてビルドしたところ、次のエラーが出ました。

rake aborted!
No such file or directory - C:/androidsdk/platform-tools/aapt.exe


調べてみると、Android SDK r22以降、aapt.exeの場所が移動となったため、発生したようです(以下はIntelliJについてですが)。
Android Hello-World compile error: Intellij cannot find aapt - Stack Overflow


まずは、aapt.exeのみ、以下のコマンドでシンボリックリンクを作成してみました。
Windows TIPS:シンボリック・リンクとジャンクションとハードリンクの違い - @IT

mklink C:\androidsdk\platform-tools\aapt.exe C:\androidsdk\build-tools\17.0.0\aapt.exe


再度実行したところ、エラーが変わっていました。

Error: Unable to access jarfile C:/androidsdk/platform-tools/lib/dx.jar
rake aborted!
Error running DX utility


そのため、stackoverflowにあった通り、シンボリックリンクに以下を追加しました。

C:\androidsdk\platform-tools\lib C:\androidsdk\build-tools\17.0.0\lib


再度ビルドすると、またエラーが変わっていました。

Building APK file...
PWD: C:/androidsdk/tools
CMD: apkbuilder.bat D:/rhomobile/RhoMobileApplication1/bin/target/android/RhoMobileApplication1-tmp.apk -z D:/rhomobile/RhoMobileApplication1/bin/rhodes.ap_ -f D:/rhomobile/RhoMobileApplication1/bin/classes.dex
指定されたパスが見つかりません。
Error building APK file
RET: 1
Error in build application. Build is terminated.


ファイルを確認すると、apkbuilder.batがないことに気づきました。
SDK r21では存在しているとの記載を見たため、SDK r21をダウンロードして、apkbuilder.batを所定の位置にコピペしました。


しかし、同じエラー(「指定されたパスが見つかりません。」)が出たため、SDK r22 + NDK r8d の組み合わせでの環境構築をあきらめ、冒頭のSDK r21 + NDK r8d の環境構築を行うことにしました。


ちなみに、公式のフォーラムでも同じようにSDK r21を使うという回答がありました。

apkbuilder.batでエラー

ビルドした時に、以下のようなエラーが出たことがありました。

Error generating keystore file


そのため、以下の記事に従い、keyを再生成したところ、問題なく動作しました。