[TAC:07] Qt for Androidで広告を掲載する

はじめに

この記事はQt Advent Calendar 2017 - Qiitaおよびtaniho Advent Calendar 2017の7日目の記事です.

みなさん,アプリは作っていますか?

僕は作ったことがありません.iPhoneアプリを作るにはMacが必要だし,Androidアプリを作るにはJavaを触らないといけないと思っていたからです.
最近だとKotlinやMonacaといった選択肢もありますが,いずれにしても学習コストが高いと思ったので手を付けないでいました.

そんな中,なんとQtがAndroidに対応しているということを知り,アプリ開発してみようと思い立ちました.この記事では,広告付きAndroidアプリを作るまでに僕がやったことをまとめます.色々と初めての挑戦なので優しい気持ちで読んでいただけると幸いです.

開発環境を整える

注意事項

  1. おそらくLinuxでの開発も可能ですが,僕の環境ではまだ動作出来ていません.
    今回はWindowsで開発しています.
  2. iPhoneアプリも出力できるみたいですが僕はMacを持っていません.

Androidアプリ開発用

Google Developers

Androidアプリを公開するためには,GoogleアカウントとDevelopersへの登録が必要です.初回登録に25ドルが必要なので注意してください.

Google Play Console

QtCreator

Qt標準のIDEです.純粋に使いやすいので入れておいて損はありません.一式は次のURLからダウンロードできます.

Download Qt for Application Development

その他

あとはAndroid開発に必要なソフトウェアをインストール・設定していきます.詳しくは次のページに書かれているので,そのままやりました.

Getting Started with Qt for Android | Qt 5.9

広告掲載用

Androidの広告には,Google AdMobがよく使われています.
ただし,AndroidStudioを使ってJavaで開発する場合は良いのですが,Qtを使って開発する場合は容易に組み込むことができません.

そこで,AdMobやGoogle Play Servicesを簡単に使えるようにする”adctl”というライブラリを使うことにしました.

kafeg/adctl

詳しくはHowto integrate to projectを見てもらえば良いのですが,ざっくりと流れを説明します.

  1. リポジトリをクローンする
    この時,必ず--recursiveオプションを付けること
  2. Play Games C++ SDK Version 2.1を”adctl/3rd/gpg-cpp-sdk”にインストールする(2.3ではなく,2.1です)
  3. Howto integrate to project通りに各種設定ファイルを書き換える
    今回Game Servicesは使わないので,<meta-data android:name="com.google.android.gms.games.APP_ID"から始まる行は追記しませんでした.

ビルド

さてここまで準備が出来れば,Android向けQtQuickプロジェクトを作り,コンパイルを通せばいいと思ったのですが通りません.
僕の場合コンパイルが通らない原因が3つありました.

  1. ライブラリが見つからない
    android - Missing “/extras/google/google_play_services/libproject” folder after update to revision 30 - Stack Overflow
    このリンク先の通り,最新のlibprojectには必要なファイルが入っていないようです.
    rev.28をダウンロードし,展開すると解決しました.

  2. ファイルのコピーに失敗したと言われる
    自動生成されたMakefileに問題があったようです.

    ……お恥ずかしながら教えて!gooで教えてもらいました.
    DOSコマンドでファイルをコピーできない。 -xcopy “d:\MY documents\” - その他(パソコン・スマホ・電化製品) | 教えて!goo
    対処療法として,エラーが出たMakefileの該当行を修正しました.
    こういう場合ってどうやって解決したら良いんだろう.

  3. またファイルのコピーに失敗したと言われる
    QtCreatorが出力ファイルを吐き出す先のデフォルトは,”build-androidapp-Desktop_Qt_5_9_2_MinGW_32bit-Debug”のように非常に長いディレクトリです.
    ということで,
    android - Error: File path too long on windows, keep below 240 characters - Stack Overflow
    キレそう.ディレクトリ名短くして対処しました.

広告掲載

コンパイルさえ通れば,広告を掲載することは簡単でした.

Howto QML and Qt Quick · kafeg/adctl Wiki

ただし,今回はGoogle Play Games Servicesは使わないので関係している部分は消去しておきます.
testDevicesというのがよく分からなかったのですが,デバッグ中に広告を表示させるとデバイスIDが出力されました.このIDを登録しておくことで,テスト用の端末ではテスト用のバナーが表示されるようになるみたいです.

Play Storeに登録する

基本は次のページ通りにすることでapkファイルを出力することが出来ます.

Publishing to Google Play | Qt 5.9

実際にアプリを公開するためにはいくつか必要な物があるので注意しましょう(もっと早く知っておきたかった).

  • アイコン(512x512)
  • ヘッダー(1024x500)
  • スクリーンショット2枚以上
  • カメラや録音などの機能を必要とする場合,プライバシーポリシー

まとめ

Qtを使うと,まあそれなりに苦労をしながらも楽しくAndroidアプリが作れますよというお話でした.
今回作ったアプリ,”yakudo camera”はGoogle Play Storeで公開中です.
手元のZenFoneでは動いていますが,Xperiaでは不具合があります.他の機種では未確認です.ごめんなさい.

yakudo camera - Google Play の Android アプリ

明日のtaniho Advent Calendar 2017では”yakudo camera”について紹介しようと思います.お楽しみに.