Edited at
QtDay 18

Android向けQt開発環境のセットアップ 2016年年末最新環境版

More than 1 year has passed since last update.

この記事は、Qt Advent Clender 2016 18日目(翌日再提出版デス、ゴメンナサイ)の記事です。

統合環境と個別SDKの関係等々、Android系開発環境の設定は2015年頃とは状況が異なってきており、最新のセットアップ手順を再確認してみました。


SONY PS4用ステレオカメラ、開発者通称ps4eyeをUSB3コネクターに変換してAndroidに接続する....というネタを当初考えていたのですが、購入した新型丸棒型が旧型角棒型とはかなり内容(ファームウェア)が違うという話になりいったん断念、記事を変更しました。


今年の Advent Calender 開始以降にリリースされた最新版のツールを使用します。ここではJDKも含めて在来版の開発環境を一度アンインストールしたうえで、設定手順を再確認しています。

また共通ツール類は一般的には /opt 配下へのインストールが推奨されているようですが、本例ではすべてユーザーホームへのインストールとしています。

JDK/SDK/NDK等々個別にセットアップする方は、適宜読み飛ばしてください。そのほうが所要時間が短いのは確かです。


環境


  • Intel i7 PC

  • Ubuntu 16.04.01 LTS (検証用にJava関連アンインストール)

  • Nexus 5x Android 7.1.1 (開発者モード)


主なツール群


Android Studio セットアップ

まず Android SDK / NDK そして Java が必要ですが、現在の標準開発ツール Android Studio 2系のセットアップで、OpenJDKを始めとしてすべて揃います。


  1. 取得した.zipファイルの中身をHomeディレクトリに展開。




  2. 展開ディレクトリ配下の ./bin/studio.sh を実行する。




  3. 起動した Android Studio Setup Wizard に Android SDK が無いと叱られ、Android SDK と最新プラットフォームのAPI 25(Android 7.1.1)が指定され、承認後にダウンロード/インストールが始まります。(入浴 or 食事タイム)





  4. Finish ボタンがクリック可能になればクリックし、 Android Studio Setup Wizard から Android Studio のオープニング画面になります。
    右下の Configure から SDK Manager を起動してください。





  5. SDK Manager で、最低限 NDK を追加してください。ここでは Documentation for Android SDK も追加しました。この後でライセンスに対する同意が求められます。同意後にダウンロードとインストールが行われます。(暫しご歓談ください。)





  6. 最近の標準セットアップでは、NDKはSDK配下に置かれるようです。





  7. 突然ですが、ここでQt側のドキュメントを参照してください。
    Getting Started with Qt for Android
    http://doc.qt.io/qt-5/androidgs.html




  8. 最初の指示は、 Sdk/tools ディレクトリ配下の SDK Manager によるSDK関連の更新です。ここで指定した Android 7.1.1 用にいくつかシステムイメージの追加が推奨されます。必ずしも必要なさそうですが、今回はデフォルト設定には逆らわない方針で。

    ./android update sdk






  9. 続く二行の apt-get コマンドは、64bitホストによる32bitターゲット開発のためのもののようですが、これらも指示通りにインストールしておきます。


    sudo apt-get install libstdc++6:i386 libgcc1:i386 zlib1g:i386 libncurses5:i386



    sudo apt-get install libsdl1.2debian:i386






Qt for Android セットアップ

ようやくQt側の設定に入ります。


  1. JDKをセットアップします。
    既にこれまでの工程でJava標準開発環境が稼働していることからわかるように、独立したJDKを更にインストールする必然性は本来はありません。しかし残念ながら、現在の Qt Creator 4.2.0 標準状態では Android Studio の OpenJDK セットアップを正しくは認識してくれません。
    ここではOracleの Java SE 8u111 を採用します。(Qt Creator 公式ドキュメントでは OpenJDK 可としていますし、当方の環境でも可能だったと記憶していたのですが、今回最新版コンボで新規に立て直してたケースでは、うまく行きません....本稿遅刻再提出の理由のひとつ....でした。)



    $ sudo apt install python-software-properties



    $ sudo add-apt-repository ppa:webupd8team/java



    $ sudo apt update



    $ sudo apt install oracle-java8-installer



    $ sudo apt install oracle-java8-set-default



    $ sudo update-alternatives --config java




  2. 環境変数 $JAVA_HOME が機能していることを確認しておきましょう。Qt Creator はこの変数を参照します。



    $ echo $JAVA_HOME




  3. Qt Creator インストーラーを起動します。

    $ ./Downloads/qt-opensource-linux-x64-android-5.7.1.run

    所要時間はたいして変わらないので、"Select Components"ではすべて選択してみました。(トイレには行けますが、食事を取る時間はできません。)





  4. Tools > Options... > Devices > Android で、JDK/SDK/NDK の場所を設定再確認します。





  5. Tools > Options... > Build & Run > Kits 及び Qt Versions 両タグで、インストーラの”Select Components”で指定したコンポーネントが揃っていることを確認します。






実機で QML アプリケーションを動かしてみる

いよいよ Qt アプリケーションを作成しますが、ここではホスト上の仮想機ではなく実機への展開を試します。


  1. Examples から、QML Camera Exampl を試してみましょう。
    ここではWorkディレクトリにコピーしてから作業しています。





  2. File > Open File or Project... から、該当ディレクトリの .pro ファイルを選択します。





  3. Projects > Build & Run をざっと概観して、各種の設定が可能なことを確認しましょう。(General 項の Build Directory では、出力先指定がソースディレクトリーの外で横並びでないと怒られます....歴史的挙動ですが、この警告が今でも意味があるのかどうか、今回は確認していません。かなり古典的なQMakeの制約だったと思いますが。)





  4. 実機へのデプロイには、証明書の添付が必要です。Android Studio でも Qt Creator でも、現在では開発環境内で証明書ストアも証明書自体も作成可能です。
    同じく Projects > Build & Run 画面の Build Steps > Build Android APK > (Details) > Sign package > Create で作成・選択します。





  5. 作成した証明書ストアから、添付する証明書を選択してください。





  6. 開発者モードで DEBUG ON に設定した実機をUSB接続しましょう。実機側には接続承認要求が出ているはずです。





  7. 実機側で接続承認前に、Qt Creator 側が実機を触りに行った場合、Incompatible devices として表示されます。





  8. 実機デプロイ(ARMクロスコンパイル)が選択されていることを確認し、その下のRunアイコンをクリックします。





  9. 実機側で接続承認を与えれば、デプロイ先が選択可能となります。





  10. 実機で動作しましたか?実機操作の画面と、 Qt Creator での各QML記述と実機画面・動作を比べてみましょう。この例では画面が上下逆になっていますが、これはQt側の問題ではなく、最近の Android SDK または Nexus API の問題だったと思います。





  11. この方法では、デスクトップにアイコンが展開されません。ちょっとさみしいですね。手動で展開してみましょう。






参考文献