Qt for Androidを試してみる
先日オープンソースカンファレンス 2012 Tokyo/Springに行って来ました。とっても楽しい一日を過ごすことが出来ました。
いつも思うのですが、こういう技術イベントって、予想もしていなかった発見があります。やっぱり足で稼ぐってあるんですね。イベントに参加していなかったら一生知らないままだったと思うことだらけです。そしてもちろん今回もたくさんの発見がありました。
その中の一つが表題の件、Qt for Androidです。Qtはご存知ですよね。KDEで採用されているアプリケーションフレームワークです。KDEの他にもUbuntu Unity 2DやGoogle Earth、Photoshopなど採用事例には事欠かない超有名なオープンソースソフトウェアです。
このQtがAndroidでも使えるようになったというから、これは試さないわけにはいかない、ということで試してみました。
感想は後で述べますが、これはやばいです。本気でQtを勉強しようと思いました。
開発環境を整える
とはいうもののまずは動かしたいということで開発環境を整えて行きます。そうしたらいつものようにデモを動かしてみます。
Qt for Androidの開発環境に必要なソフトウェアはこんなところです。ちなみに今回はLinux (Ubuntu) で試しています。
Necessitas SDKというのがQt for Androidの核になるモジュールです。JDK、Android SDK/NDKのインストール方法は他のサイトにたくさん書かれているのでここではその他のモジュールのインストール方法を紹介して行きます。
Necessitas SDKをインストールする
では早速、Qt for Androidの核であるNecessitas SDKをインストールします。こちらのサイトを参考にしています。
なお、Necessitas SDKはオールインワンな環境です。事前にQt Creatorをインストールしておく必要などはありません。個人的にはQt Creatorのプラグイン的にインストール出来た方がいいんですけどね。ていうか間違ってQt Creatorをインストールしてしまいました。。。後述しますが、Antも付いてきます。
まず上記のサイトからワンクリックインストーラをダウンロードします。Linux版だけじゃなく、WindowsやMacもあるんですね*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/ とします。まぁいいか。
最後にインストールするコンポーネントを選択します。
ここは注意が必要な箇所です。AndroidのSDK/NDKには必ずチェックを付けたままにしておいて下さい*2。こちらにNecessitas作者のBogDon氏による投稿があります。
It seems Google removed the __atomic_xxx functions from some
Link error: undefined reference to __atomic_inc
platforms in NDK r7 check [1]. Meanwhile I strongly suggest you to use
the NDK from Necessitas SDK.
賢明な皆さんは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がからんでいるとデバッグ出来ないみたい。実行は出来るんですがね。
ということで、試した感じでは以下のプロジェクトが大丈夫そうです。
- Qt Quick Application
- Qt Gui Application
- 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ライブラリをデバイスにインストールしてくれるツールがあります。
端末にインストールしておきましょう (ルート権限などは不要です) 。
インストールしたらQtライブラリをダウンロードしてくれるので指示に従います。
これで準備完了。
お待ちかねのデバッグを開始します。ブレークポイントを設定するのを忘れずに。。。
おぉ!止まった!!分かりにくいですが、main.cppの14行目でブレークしています。
とりあえずめでたしめでたし。