Qt
android開発
Windows10

QtCreator + Visual Studio Emulator for Android でAndroidアプリを開発

More than 1 year has passed since last update.

まぁ、メモみたいなもの。
スクリーンショットはちょっと古いものがあるんだけど、Qt5.9.1で正常動作を確認してる。Qtが古いとVisula Studio Emulator for AndroidでQMLアプリがうまく動かない(画面がホワイトアウトする)可能性がある。あと(下にも書いてあるけど)Android SDKの"Android SDK Platform-tools"のバージョンが25系統だとビルドがうまくできない(ターゲットが認識できずに"-1"を返すので、"Android--1"みたいなわけの分からないターゲットでビルドしようをするから注意が必要)。

WindowsでのAndroid開発環境

Qt(Creator)でAndroidアプリを作る場合には当然ながらAndroidの開発環境が要る。
JDKを入れてSDKを入れてNDKを入れてAntを入れて・・・って手順があるんだけど、「Android向けQt開発環境のセットアップ 2016年年末最新環境版」を読むとどうやらAndroid Studioのインストーラを使えば一式揃うらしい(記事だとUbuntuなんだけど、Windowsでもイケるのかな?)。
なんだけど、まぁ、ほら、Visual Studio 2015でもAndroidアプリの開発できるじゃないのさ。ってことで、ちょっと構成を確認してみた。
2017-01-22.png
なんかこっからも一通り入るよね。
っつーわけで、ポチっとインストールしてみる。
2017-01-22 (1).png
まずは今回ネタにしようとしている「Visual Studio Emulator for Android」、それからNDK、32/64ビットは開発したい相手の環境ではなく開発環境そのもののビット数だと思われるので64を選択、あとSDK。
2017-01-22 (3).png
あと、開発対象のAPIレベル、それからAntとJava、このぐらいあればいいのかな。
一通りインストール終わったらSDKマネージャ立ち上げて足りないものあれば入れておく感じなんだけど、ここで一つ注意。
"Android SDK Platform-tools"の25系は24系と構成が違うっぽくてQt開発環境とうまく連動できないっぽいので、ここでは26以降を想定して書いてみるので、そのようにしてほしい(っていうか、今からインストールすれば26以降になるんだと思うけど)

Qtの構成

Qtの方もAndroid用のライブラリを追加しておく必要があるだろう。
2017-01-22 (5).png
インストール終わったらAndroid開発環境を設定するんだけど、sdkやndk、antがどこにあるのか分からなくて苦労した・・・

JDK パス: C:\Program Files (x86)\Java\jdkX.X.X_XX ("X.X.X_XXはバージョン番号)
Android SDK パス: C:\Program Files (x86)\Android\android-sdk
Android NDK パス: C:\ProgramData\Microsoft\AndroidNDK64\android-ndk-xxxx ("xxxx"はバージョン番号)
Ant 実行ファイル: C:\Program Files (x86)\Microsoft Visual Studio 14.0\Apps\apache-ant-x.x.x\bin\ant.bat ("x.x.x"はバージョン番号)

ツール→オプション→デバイス→Androidを選んで、JDK、SDK、NDK、Antのパスをそれぞれ設定しておく。
settings.png

エミュレータ

Android SDKにはPCでの開発用にエミュレータが含まれてるんだけど、こいつがHyper-Vと併用できない。ってかHyper-Vと併用できる仮想環境ってあるのか??
で、さっきのVisual Studioの構成の中で「Microsoft Visual Studio Emulator for Android」なるものを一緒にインストールしてわけだ。
これはHyper-V上で動くAndroidエミュレータで、まぁ、環境が6.0までしかなかったり(7.1には未対応)バカにメモリを食ったり(まぁ、Win10Mのエミュレータもそうだけど)いろいろ制約がないわけではないけど、動作だけなら標準のものよりも軽く、早いっぽい。

機動するとイメージを選択する画面が出てくる。

標準のエミュレータのように細かくカスタムしたものは作れないっぽく見えるけど、パッと見る限りそこそこメジャーなデバイス(をエミュレートできるイメージ)をサポートしてるっぽいので、これでいいんじゃなかろうか。
この画面から必要なイメージをダウンロードして機動させることができる。

なぜかWindowsPhone OSを起動中と言われてしまったりするんだけど、ちゃんとAndroid OSが起動する。

QtCreatorからデプロイする

個別のプロジェクトの「Android APK のビルド」のところで、ターゲットになるAndroidのバージョンを選択しておく(設定しておかないと上に書いた通りバージョン番号が"-1"を示して「android--1」をターゲットにビルドしようとして文句を言われる。
project.png

あとエミュレータはIDEからは「PCに接続されたデバイス」として認識されるので、デプロイする前に手動でエミュレータを起動しておく必要がある。
逆に言えば、起動してあれば「接続済みのデバイス」としてリストに表示されるので、それを選択するだけでいい。「arm」じゃなくて「x86」なので、そこだけ注意。

その他(SSL周り)

WebAPIにアクセスするようなアプリを作る時、基本的に"https"なアクセスが必要な場合が多いんだけど、そーゆーのを使う時にはSSLライブラリが必要になる。自分でビルドしてもいいんだろうけど、Windowsな環境でしかもAndroid用のSSLライブラリをビルドするのはとても面倒なので、以下に公開されているPreBuildなライブラリを活用する事にした。

https://github.com/emileb/OpenSSL-for-Android-Prebuilt

適当な(今回はC:\の直下)ところで上のリポジトリをcloneする。

C:> git clone https://github.com/emileb/OpenSSL-for-Android-Prebuilt

あとはプロジェクトの"Android APK のビルド"の項目の「追加ライブラリ」にcloneしたライブラリを追加しておくといい。
project.png

とりあえず

SSLライブラリ辺りの話は別にして、とりあえずWindows 10 Pro + Hyper-Vな環境でデスクトップアプリはもとよりWindows 10 Mobileな開発環境とAndroid用アプリの開発環境を同時に揃えることができる。せっかくマルチプラットフォームで開発できるライブラリなんだから、一つの開発環境でマルチプラットフォームな開発ができる方がきっと嬉しい。はず。