手持ちのNexus7にてGPSを扱うAndroidアプリを作りたいなと考えて、Rubyで書く方法を探してみたところ、RhoMobileというフレームワークがあったため試してみました。
なお、インストール後にAPIを読んだところ、現時点ではGPSのNMEA0183形式データを取得するAPIが見つからなかったため、利用は保留にしています。次回さわるときの参考までに、と。
■構築した環境
- Windows7 x64
- Nexus7
- JDK 6u45 x86
- RhoMobile Suite 2.2.1.13 32bit版
- Android SDK r21.1
- Android NDK r8d x86
*Rubyは、RhoMobile Suiteに同梱されているものを使用します
■RhoMobileとは
スマホのマルチプラットフォームに対応したフレームワークで、Ruby/HTML/CSS/JavaScriptで書ける、とのことです。
■インストール手順
Javaのインストール
現時点では、Java7は非サポートのようですので、Java6を入れました。Android NDKはx86版を使うので、Javaもx86版を入れました。
インストール先は、以下の通りです。
C:\jdk6
また、環境変数「JAVA_HOME」「Path」の両方に以下を追加しました。
C:\jdk6\bin
Android SDK r21.1のインストール
現時点の最新版r22では動作しなかったため、旧バージョンのr21.1をインストールしました。
なお旧バージョンへのリンクが無かったため、以下のページを参考に、直接exeをダウンロードしました。
- Android 旧バージョンで開発環境を構築する 【Android TIPS】 | エンジニア転職求人情報×IT人材紹介@SAK
- http://dl.google.com/android/installer_r21.1-windows.exe
インストール先は、以下の通りです。
C:\androidsdk
Android NDK r8d x86のインストール
こちらも現時点の最新版r8eでは動作しなかったため、以下のページを参考に、直接zipファイルをダウンロードしました。
- openFrameworks v0073 を Android で動かすための手順 - 凹みTips
- https://dl.google.com/android/ndk/android-ndk-r8d-windows.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のエミュレータが起動します。
■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を再生成したところ、問題なく動作しました。