Qt5.1ベータ版を使ってAndroidアプリを作成してみた

ご存知のように、Qt（キュート）はクロスプラットフォームのGUIフレームワークです。
昔はGUIアプリケーションが作れるツールキットと位置づけでしたが、最近はJavaScriptエンジン
やHTMLレンダリングエンジンまで組み込まれてきており、Visual Studioにも劣らない開発環境と
言っても過言ではないように思います。

このQtで作ったアプリがAndroidでも動くようになるということで、先日リリースされたベータ版で
ボタン１個だけのアプリを作り、Android端末で動かしてみました。なんとか動いたので投稿します。

一部不安定なところもありますが、正式対応版で修正されることを期待しましょう。
下記の内容は、正式版では変わる可能性があります。

##環境構築##
環境の準備ですが、私は LinuxMint 上でやりました。
32bitライブラリを動作させるために必要なソフトをインスールします。

```bash
$ sudo apt-get install ia32-libs
```

Androidアプリビルド環境として Ant と OpenJDK をインストールします。

```bash
$ sudo apt-get install openjdk-7-jdk ant
```

Qt Project サイトから qt-linux-opensource-5.1.0-beta1-android-x86_64-offline.run のダウンロードし、実行します。インストール先は`/usr/loca/Qt5.1.0beta/`としました。

Android NDK をインストールします。サイトから tarファイル android-ndk-r8e-linux-x86_64.tar.bz2 をダウンロードし、`/usr/local/Android`に解凍にしました。

Android SDK をインストールします。サイトからzipファイル adt-bundle-linux-x86_64-20130514.zip をダウンロードし、HOMEディレクトリで解凍しました。

```bash
 $ cd ~
 $ unzip adt-bundle-linux-x86_64-20130514.zip
```

作られたディレクトリ名が長いので、リネームします。

```bash
 $ mv adt-bundle-linux-x86_64-20130514  adt
```

Eclipse から Android SDK Manager を起動し、必要なツールやAPIをインスールします。
入れたら、 Eclipse を再起動するのが良いようです。

```bash
 $ cd adt/eclipse
 $ ./eclipse
```

インストールとしてチェックを入れたもの：

- Android SDK Tools
- Android SDK Platform-tools
- Android SDK Build-tools
- Android 4.2.2 (API17)
- あとはお好みで..

次に、Eclipseのメニュー [Window] - [Android Virtual Device Manager] をクリックし、仮想ディスクマネージャ(AVD)を起動します。次のような設定でAVDを作成します。

![AVD作成](https://lh3.googleusercontent.com/-sjTljyjOUMQ/UZWvBEmmIOI/AAAAAAAAAE0/GfG--oyE2eg/w440-h622-no/Screenshot-Edit+Android+Virtual+Device+%2528AVD%2529+.png) 


その後 [Start..]ボタンを押して、AVD を起動させておきます。
もうEclipseはいらないので閉じます。

##プロジェクト新規作成##
Qt Creator 起動します。

```bash
 $ /usr/local/Qt5.1.0beta/Tools/QtCreator/bin/qtcreator.sh
```

メニューから [ファイル] - [ファイル／プロジェクトの新規作成...] をクリックします。その画面で `Qt GUI アプリケーション （すべてのテンプレート）`を指定し選択ボタンを押します。私の環境では、プラットホームとしてAndroidだけを指定して進めると、途中で固まってしまったので、[すべてのテンプレート]を指定しています。
![新規作成](https://lh6.googleusercontent.com/-4dM7BWQSGTI/UZXMbArkDII/AAAAAAAAAIE/YWQTycA1CqA/w879-h403-no/Screenshot-%25E6%2596%25B0%25E8%25A6%258F%25E4%25BD%259C%25E6%2588%2590-1.png)

次の画面で、プロジェクトの名前と保存するディレクトリを指定し、「次へ」ボタンを押して進みます。

次の「キットの選択」画面では、Desktop と Androidの１つを選択しておけばよいでしょう。 
![キットの選択](https://lh4.googleusercontent.com/-9VnJ-JplWN4/UZWvC-P6l_I/AAAAAAAAAFQ/FltsfnP2J_Y/w906-h474-no/Screenshot-%25E3%2582%25AD%25E3%2583%2583%25E3%2583%2588%25E3%2581%25AE%25E9%2581%25B8%25E6%258A%259E.png)

あとはデフォルトで進めて、最後に完了ボタンを押して、ビルド＆実行環境を作ります。メインウィンドウだけのプロジェクトができるはずです。

プロジェクトを作成したら、共有ライブラリへのパスを通します。
ldconfigコマンドでやる方法がありますが、ここでは環境変数で解決してしまいます。プロジェクトのビルド環境設定画面で LD_LIBRARY_PATH に `/usr/local/Qt5.1.0beta/5.1.0-beta1/gcc_64/lib`を指定しました。
![共有ライブラリ設定](https://lh4.googleusercontent.com/-5N795bOqSYo/UZWvDsJP7yI/AAAAAAAAAFg/Lch3BtKIDJY/w951-h788-no/Screenshot-%25E3%2583%2593%25E3%2583%25AB%25E3%2583%2589%25E7%2592%25B0%25E5%25A2%2583%25E8%25A8%25AD%25E5%25AE%259A.png)

Android構成の設定をします。
Qt Creator の [ツール] - [オプション] - [Android] で、次のように設定しました。
![Android構成の設定](https://lh5.googleusercontent.com/-MV1HDnYShgc/UZWvChaxnyI/AAAAAAAAAFM/gjHRguOQSZ4/w1006-h574-no/Screenshot-%25E3%2582%25AA%25E3%2583%2597%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%25B3.png)

プロジェクトのファイルから、mainwindow.ui をダブルクリックし、フォーム作成画面を開きます。 メインウィンドウに Push Button を貼り付けて保存します。こんな感じです。
![フォーム作成](https://lh4.googleusercontent.com/-5VJKyW18tYc/UZWvB5ZrZfI/AAAAAAAAAFE/Vep0lt-kDno/w1054-h753-no/Screenshot-mainwindow.ui+-+hello+-+Qt+Creator.png)

プラットホームの選択をします。左下のアイコンから、Androidを選択します。
![プラットホームの選択](https://lh3.googleusercontent.com/-yM5PZfun-RY/UZWvEKEmsqI/AAAAAAAAAFk/zvACkNBUdwg/w854-h788-no/Screenshot-%25E3%2583%2597%25E3%2583%25A9%25E3%2583%2583%25E3%2583%2588%25E3%2583%259B%25E3%2583%25BC%25E3%2583%25A0%25E3%2581%25AE%25E9%2581%25B8%25E6%258A%259E2.png)

##ビルド##
「すべてビルド」をクリックしてビルドします。それでは、エミュレータで動かしてみましょう。
エミュレータはさっきから起動したままですよね。この状態で Qt Creatorの「実行」ボタンを押します。すると、Android 用の実行パッケージである apk が作成され、続けて Androidエミュレータにデプロイされます。その後、直ちにアプリが実行されます。アプリが表示されましたか？
![実行中](https://lh5.googleusercontent.com/-G-Dg9H9iPdw/UZWvBCxdwTI/AAAAAAAAAE4/XYNoeKf0DAY/w606-h788-no/Screenshot-5554%253AAVD_for_Nexus_4_by_Google.png)

私の環境では、[デバッグ]ボタンを押してデバッグしようとすると、固まってしまい強制終了するハメに。。正式版では、きっと対応してくれることでしょう。

##実機でも動かす##
Android端末でも動かしてみましょう。
作成された apk をAndroid端末にUSB経由でコピーし、Android側のファイルマネージャからクリックしインストールします。完了後、そのHelloアプリのアイコンをタップし起動してみましょう。起動しましたか？

##まとめ##
AndroidアプリはJavaかHTMLでしか作ったことなかったので、C++で書けるのはなんだか新鮮！ 
将来的には、カメラやGPSセンサーへのインターフェースが簡単に呼び出せるようになるのだろうか。現時点では、デバイスを直接オープンするしかなさそうな。。。 正式版で期待。

Androidには Qt バージョン5.2で正式に対応する予定のようです。そのバージョンでは iOS も正式に対応するとか、しないとか。
とにかく、今後の展開を見守りましょう。