Qt for Androidを試してみる

先日オープンソースカンファレンス 2012 Tokyo/Springに行って来ました。とっても楽しい一日を過ごすことが出来ました。
いつも思うのですが、こういう技術イベントって、予想もしていなかった発見があります。やっぱり足で稼ぐってあるんですね。イベントに参加していなかったら一生知らないままだったと思うことだらけです。そしてもちろん今回もたくさんの発見がありました。

その中の一つが表題の件、Qt for Androidです。Qtはご存知ですよね。KDEで採用されているアプリケーションフレームワークです。KDEの他にもUbuntu Unity 2DやGoogle EarthPhotoshopなど採用事例には事欠かない超有名なオープンソースソフトウェアです。
このQtがAndroidでも使えるようになったというから、これは試さないわけにはいかない、ということで試してみました。
感想は後で述べますが、これはやばいです。本気でQtを勉強しようと思いました。

Necessitas

開発環境を整える

とはいうもののまずは動かしたいということで開発環境を整えて行きます。そうしたらいつものようにデモを動かしてみます。
Qt for Androidの開発環境に必要なソフトウェアはこんなところです。ちなみに今回はLinux (Ubuntu) で試しています。

Necessitas SDKというのがQt for Androidの核になるモジュールです。JDKAndroid SDK/NDKのインストール方法は他のサイトにたくさん書かれているのでここではその他のモジュールのインストール方法を紹介して行きます。

Necessitas SDKをインストールする

では早速、Qt for Androidの核であるNecessitas SDKをインストールします。こちらのサイトを参考にしています。

How to install Necessitas SDK


なお、Necessitas SDKはオールインワンな環境です。事前にQt Creatorをインストールしておく必要などはありません。個人的にはQt Creatorプラグイン的にインストール出来た方がいいんですけどね。ていうか間違ってQt Creatorをインストールしてしまいました。。。後述しますが、Antも付いてきます。


まず上記のサイトからワンクリックインストーラをダウンロードします。Linux版だけじゃなく、WindowsMacもあるんですね*1。そして実行モードを与えて、実行します。

% chmod +x necessitas-0.3-online-sdk-installer-linux
% ./necessitas-0.3-online-sdk-installer-linux



実行してしばらくするとウェルカムメッセージが現れますので、迷わずNextを押しましょう。


するとインストール場所を聞いてきます。


ここはホームディレクトリ下にインストールしたいところですが、参考にしたサイトには

/opt/necessitas/ has been tested intensively, so please use this one

How to install Necessitas


とあるので泣く泣く (?) /opt/necessitas/ とします。まぁいいか。
最後にインストールするコンポーネントを選択します。


ここは注意が必要な箇所です。AndroidSDK/NDKには必ずチェックを付けたままにしておいて下さい*2。こちらにNecessitas作者のBogDon氏による投稿があります。

It seems Google removed the __atomic_xxx functions from some
platforms in NDK r7 check [1]. Meanwhile I strongly suggest you to use
the NDK from Necessitas SDK.

Link error: undefined reference to __atomic_inc


賢明な皆さんはNDKだけは少なくともチェックしておいて下さい。私はこれで一日棒に振りました。。。
また、Antはインストールしていないのでインストールしてもらいます。


それではインストール開始です。
/optディレクトリ以下にインストールするのでまずはルートパスワードを聞いてきます。


素直にルートパスワードを入れて続行。しばらく待つとインストールが完了されます。


最後にQt Creatorを立ち上げます。

Necessitasをセットアップする

一通りインストールしたらNecessitasの設定をします。こちらの内容はSetup QtCreatorを参考にしています。


まずはQt4の設定です。Tools > Optionsを選択して、Qt4タブを開きます。


Addボタンで、以下のパス (qmakeのパス) を設定します。

/opt/necessitas/Android/Qt/480/armeabi-v7a/bin/qmake


次にAndroidタブを開きます。


それぞれ、以下の設定をします*3

設定項目 設定値
Android SDK location /opt/necessitas/android-sdk
Android NDK location /opt/necessitas//android-ndk-r6b
Android NDK toolchain version 4.4.3
Ant location /opt/necessitas//apache-ant-1.8.2/bin/ant
arm GDB location /opt/necessitas/android-ndk-r6b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-gdb
arm GDBserver location /opt/necessitas/android-ndk-r6b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/gdbserver
x86 GDB location /opt/necessitas/android-ndk-r6b/toolchains/x86-4.4.3/prebuilt/linux-x86/bin/i686-android-linux-gdb
x86 GDBserver location /opt/necessitas/android-ndk-r6b/toolchains/x86-4.4.3/prebuilt/gdbserver
OpenJDK location /usr/bin/java


これで設定終了!

Necessitasでデバッグしてみる

さて次にQtプロジェクトを作って、デバッグしてみます。目標はC++コードでブレークさせること。Let's start!

いろいろ試行錯誤してみたんですが、どうもプロジェクトはQMLがからんでいるとデバッグ出来ないみたい。実行は出来るんですがね。

ということで、試した感じでは以下のプロジェクトが大丈夫そうです。

  1. Qt Quick Application
  2. Qt Gui Application
  3. Mobile Qt Application


なお、プロジェクトを作る際、2つ注意があります。
まず一つ目はApplication Type。Built-in elements only (for all platforms) とします。


また以下に示すTarget Setupの画面では必ずQt4設定で入力したターゲットを選択して下さい。
下の例ではQt4.8.0 DebugとQt4.8.0 Releaseです。


では何はともあれリビルドしましょう。
もしエラーが出たら、ファイルのパーミッションの問題である可能性があります。
環境との相談になりますが、問題なければパーミッションを変更します。

% cd /opt/necessitas/
% sudo chmod -R 755 android-sdk
% sudo chmod -R 755 android-ndk-r6b


少なくとも私はこうしないとビルドが通りませんでした。


では早速デバッグ・・・とその前にQtアプリケーションをAndroid上で動かすにはQtライブラリが必要です。
そのQtライブラリをデバイスにインストールしてくれるツールがあります。

Ministro II


端末にインストールしておきましょう (ルート権限などは不要です) 。
インストールしたらQtライブラリをダウンロードしてくれるので指示に従います。

これで準備完了。
お待ちかねのデバッグを開始します。ブレークポイントを設定するのを忘れずに。。。


おぉ!止まった!!分かりにくいですが、main.cppの14行目でブレークしています。
とりあえずめでたしめでたし。

*1:Qt アプリケーションを Android に – クイックスタートビデオではLinuxのみ対応と書いてあったんですが、日々進化しているようですね

*2:もしかしたらSDKは要らないかも

*3:これでとりあえず動いた、という設定ですのであしからず