Android向けQt開発環境のセットアップ ２０１６年年末最新環境版

この記事は、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 2.2.3<br/>https://developer.android.com/studio
+ Qt 5.7.1 for Android<br/>https://www.qt.io/download-open-source/#section-2

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

1. 取得した.zipファイルの中身をHomeディレクトリに展開。
<br/><br/>
2. 展開ディレクトリ配下の　./bin/studio.sh を実行する。
<br/><br/>
3. 起動した Android Studio Setup Wizard に Android SDK が無いと叱られ、Android SDK と最新プラットフォームのAPI ２５（Android 7.1.1）が指定され、承認後にダウンロード/インストールが始まります。（入浴 or 食事タイム）![Screenshot from 2016-12-16 21-05-21.png](https://qiita-image-store.s3.amazonaws.com/0/81674/29bab5e7-eb4e-f8ea-8de8-3be0c8bd3ced.png)
<br/><br/>
4. Finish ボタンがクリック可能になればクリックし、 Android Studio Setup Wizard から Android Studio のオープニング画面になります。<br/>右下の Configure から SDK Manager を起動してください。![Screenshot from 2016-12-16 21-53-51a.png](https://qiita-image-store.s3.amazonaws.com/0/81674/320e889a-1fc9-9d4b-7df1-b3a5e52c85e5.png)
<br/><br/>
5. SDK Manager で、最低限 NDK を追加してください。ここでは Documentation for Android SDK も追加しました。この後でライセンスに対する同意が求められます。同意後にダウンロードとインストールが行われます。（暫しご歓談ください。）![Screenshot from 2016-12-16 22-08-52.png](https://qiita-image-store.s3.amazonaws.com/0/81674/18df92be-3435-4a8b-e1bd-cc30834bc3d8.png)
<br/><br/>
6. 最近の標準セットアップでは、NDKはSDK配下に置かれるようです。![Screenshot from 2016-12-16 22-53-05.png](https://qiita-image-store.s3.amazonaws.com/0/81674/bbfda395-47a2-30b0-5c55-f882587e32bb.png)
<br/><br/>
7. 突然ですが、ここでQt側のドキュメントを参照してください。<br/>Getting Started with Qt for Android<br/>http://doc.qt.io/qt-5/androidgs.html
<br/><br/>
8. 最初の指示は、 Sdk/tools ディレクトリ配下の SDK Manager によるSDK関連の更新です。ここで指定した Android 7.1.1 用にいくつかシステムイメージの追加が推奨されます。必ずしも必要なさそうですが、今回はデフォルト設定には逆らわない方針で。
```
./android update sdk
```
![Screenshot from 2016-12-16 23-49-06.png](https://qiita-image-store.s3.amazonaws.com/0/81674/e4febfb3-7be3-0f9a-3a2e-a7d55b90b2ef.png)
<br/><br/>
9. 続く二行の apt-get コマンドは、64bitホストによる32bitターゲット開発のためのもののようですが、これらも指示通りにインストールしておきます。<br/>
```
sudo apt-get install libstdc++6:i386 libgcc1:i386 zlib1g:i386 libncurses5:i386
```<br/>
```
sudo apt-get install libsdl1.2debian:i386
```
<br/><br/>

# Qt for Android セットアップ
ようやくQt側の設定に入ります。

1. JDKをセットアップします。<br/>既にこれまでの工程でJava標準開発環境が稼働していることからわかるように、独立したJDKを更にインストールする必然性は本来はありません。しかし残念ながら、現在の Qt Creator 4.2.0 標準状態では Android Studio の OpenJDK セットアップを正しくは認識してくれません。<br/>ここではOracleの Java SE 8u111 を採用します。（Qt Creator 公式ドキュメントでは OpenJDK 可としていますし、当方の環境でも可能だったと記憶していたのですが、今回最新版コンボで新規に立て直してたケースでは、うまく行きません....本稿遅刻再提出の理由のひとつ....でした。）<br/><br/>
```
$ sudo apt install python-software-properties
```<br/>
```
$ sudo add-apt-repository ppa:webupd8team/java
```<br/>
```
$ sudo apt update
```<br/>
```
$ sudo apt install oracle-java8-installer
```<br/>
```
$ sudo apt install oracle-java8-set-default
```<br/>
```
$ sudo update-alternatives --config java
```<br/><br/>
2. 環境変数 $JAVA_HOME が機能していることを確認しておきましょう。Qt Creator はこの変数を参照します。<br/><br/>
```
$ echo $JAVA_HOME
```<br/><br/>
3. Qt Creator インストーラーを起動します。<br/>```
$ ./Downloads/qt-opensource-linux-x64-android-5.7.1.run
```<br/>所要時間はたいして変わらないので、"Select Components"ではすべて選択してみました。（トイレには行けますが、食事を取る時間はできません。）![Screenshot from 2016-12-19 03-09-16.png](https://qiita-image-store.s3.amazonaws.com/0/81674/aec75285-726f-6a63-3682-2658445c3419.png)
<br/><br/>
4. Tools > Options... > Devices > Android で、JDK/SDK/NDK の場所を設定再確認します。![Screenshot from 2016-12-19 03-19-12.png](https://qiita-image-store.s3.amazonaws.com/0/81674/021718ba-417a-5640-aec1-4c469cd635a3.png)
<br/><br/>
5. Tools > Options... > Build & Run > Kits 及び Qt Versions 両タグで、インストーラの”Select Components”で指定したコンポーネントが揃っていることを確認します。![Screenshot from 2016-12-19 03-23-30.png](https://qiita-image-store.s3.amazonaws.com/0/81674/f85ac607-3884-8475-e0ef-080374e31e3a.png)
<br/><br/>

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

1. Examples から、QML Camera Exampl を試してみましょう。<br/>ここではWorkディレクトリにコピーしてから作業しています。![Screenshot from 2016-12-19 03-26-09.png](https://qiita-image-store.s3.amazonaws.com/0/81674/fda415be-7bdf-dfdf-9366-14e912887395.png)
<br/><br/>
2. File > Open File or Project... から、該当ディレクトリの .pro ファイルを選択します。![Screenshot from 2016-12-19 09-35-18.png](https://qiita-image-store.s3.amazonaws.com/0/81674/ee7d50b2-d195-30b9-285a-789434788498.png)
<br/><br/>
3. Projects > Build & Run をざっと概観して、各種の設定が可能なことを確認しましょう。（General 項の Build Directory では、出力先指定がソースディレクトリーの外で横並びでないと怒られます....歴史的挙動ですが、この警告が今でも意味があるのかどうか、今回は確認していません。かなり古典的なQMakeの制約だったと思いますが。）![Screenshot from 2016-12-19 12-10-21.png](https://qiita-image-store.s3.amazonaws.com/0/81674/7eb86334-b2bf-fa75-8ba2-10833a98ed52.png)
<br/><br/>
4. 実機へのデプロイには、証明書の添付が必要です。Android Studio でも Qt Creator でも、現在では開発環境内で証明書ストアも証明書自体も作成可能です。<br/>同じく Projects > Build & Run 画面の Build Steps > Build Android APK > (Details) > Sign package > Create で作成・選択します。![Screenshot from 2016-12-19 10-33-55.png](https://qiita-image-store.s3.amazonaws.com/0/81674/f0756482-3283-b0a0-3bd1-10bfa8b517d2.png)
<br/><br/>
5. 作成した証明書ストアから、添付する証明書を選択してください。![Screenshot from 2016-12-18 19-15-39.png](https://qiita-image-store.s3.amazonaws.com/0/81674/57013c6b-43b8-7290-4ec2-81f63534ee87.png)
<br/><br/>
6. 開発者モードで DEBUG ON に設定した実機をUSB接続しましょう。実機側には接続承認要求が出ているはずです。![Screenshot_20161219-104314.png](https://qiita-image-store.s3.amazonaws.com/0/81674/5e063597-3bf1-bd9e-10d9-a37b7b522a7f.png)
<br/><br/>
7. 実機側で接続承認前に、Qt Creator 側が実機を触りに行った場合、Incompatible devices として表示されます。![Screenshot from 2016-12-19 03-28-23.png](https://qiita-image-store.s3.amazonaws.com/0/81674/3bb233a9-0227-13e1-7c23-cd8d26882580.png)
<br/><br/>
8. 実機デプロイ（ARMクロスコンパイル）が選択されていることを確認し、その下のRunアイコンをクリックします。![Screenshot from 2016-12-19 11-21-18.png](https://qiita-image-store.s3.amazonaws.com/0/81674/ad329f75-8709-202b-7d20-b6c3384258a0.png)
<br/><br/>
9. 実機側で接続承認を与えれば、デプロイ先が選択可能となります。![Screenshot from 2016-12-19 03-29-41.png](https://qiita-image-store.s3.amazonaws.com/0/81674/d77feaa8-b271-8ca9-aeb2-8038a76c2dca.png)
<br/><br/>
10. 実機で動作しましたか？実機操作の画面と、 Qt Creator での各QML記述と実機画面・動作を比べてみましょう。この例では画面が上下逆になっていますが、これはQt側の問題ではなく、最近の Android SDK または Nexus API の問題だったと思います。![Screenshot_20161219-113315.png](https://qiita-image-store.s3.amazonaws.com/0/81674/334427be-c9e4-f5d3-9cb9-a001d4e76af8.png)
<br/><br/>
11. この方法では、デスクトップにアイコンが展開されません。ちょっとさみしいですね。手動で展開してみましょう。![Screenshot_20161219-114550.png](https://qiita-image-store.s3.amazonaws.com/0/81674/b911df9b-20bd-e906-51a5-3c4decc6e0f9.png)
<br/><br/>

# 参考文献

+ Deploying an Application on Android<br/>http://doc.qt.io/qt-5/deployment-android.html