QtアプリをGoogle Play ストアに公開
12月 30, 2024 by Qt Group 日本オフィス | Comments
このブログ記事では、CMakeを使用してQt for AndroidアプリをPlayストアで公開するための準備を説明します。最後まで読み終える頃には、Qtアプリを何百万人ものAndroidユーザーに配布できるようになっているでしょう。さあ、始めましょう!
CMakeによるアプリ構成
Qt 6 は優れた CMake サポートを提供しており、これには Android アプリのサポートも含まれます。Android アプリは、AndroidManifest.xml または Gradle ビルド構成ファイルを使用して、その機能の多くを設定します。必要に応じて、これらのファイルを Qt プロジェクトで管理することもできますが、Qt は、CMake プロジェクト構成内で直接管理できる多くの API を提供しています。
ターゲットプロパティの設定
パッケージ名、アプリ名、アプリアイコン、バージョン情報など、Androidの必須プロパティを定義します。
set_target_properties(${appname} PROPERTIES
QT_ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android"
QT_ANDROID_PACKAGE_NAME "io.qt.calqlatr"
QT_ANDROID_APP_NAME "Calqlatr"
QT_ANDROID_APP_ICON "@drawable/ic_launcher"
QT_ANDROID_TARGET_SDK_VERSION 35
QT_ANDROID_MIN_SDK_VERSION 28
QT_ANDROID_VERSION_NAME "1.0"
QT_ANDROID_VERSION_CODE 10
)
QT_ANDROID_TARGET_SDK_VERSION
については、Google Play Storeで要求される現在のバージョンを使用してください。
QT_ANDROID_APP_ICON
については、アイコンファイルやdrawableが以下のディレクトリに存在することを想定しています。
/<QT_ANDROID_PACKAGE_SOURCE_DIR>/res/drawable-<dpi>
このようなアイコンファイルを生成するには、Qt CreatorのAndroidアイコンジェネレータやAndroid Studioのアイコン作成機能を使用できます。また、インターネット上には多数のオンラインAndroidアイコン生成ツールが存在します。
パッケージ化されたプラグインの管理
さらに一歩進んで、アプリのバンドルにパッケージ化するプラグインをカスタマイズすることもできます。Qt Android 展開ツールの動作の仕様のため、ビルド時にアプリが必要とするプラグインを必ずしも知っているわけではないので、実行時に必要のないプラグインをパッケージ化してしまう可能性があります。これを回避するには、明示的にどのプラグインを含めるか、または除外するかを管理することができます。これは、qt_import_plugins() 関数を使用して行うことができます。
qt_import_plugins(${appname}
INCLUDE_BY_TYPE imageformats Qt::QSvgPlugin Qt::QJpegPlugin
EXCLUDE_BY_TYPE iconengines networkinformation tls platforminputcontexts qmltooling
)
最初の行のINCLUDE_BY_TYPE
は、imageformats
タイプのプラグインのうち、QSvg
とQJpeg
プラグインのみが含まれるようにします。2行目のEXCLUDE_BY_TYPE
は、アプリに本当に必要のない他のプラグインタイプを追加しないようにします。qt_import_plugins()
は、このターゲットがリンクする依存関係のターゲットのリストからプラグインをインクルードしようとするだけであることに注意してください。
リリースビルドタイプを使用
Playストアに公開するアプリは、常にリリースビルドタイプであることが期待されています。そのため、ビルドタイプを後で変更することになった場合に、作業を一部やり直す可能性を避けるため、最初からこの手順を正しく設定することが重要です。
または、コマンドラインから次のように実行します。
qt-cmake -DCMAKE_BUILD_TYPE=Release ...
デフォルトでは、Androidリリースアプリはデバッグできません。明示的に管理する場合は、アプリのデバッグ可能
状態を、AndroidManifest.xml
またはGradle設定でfalse
に設定してください。また、Androidの推奨に従って、実機ではそれほど有用ではないため、さまざまなログを無効にすることをお勧めします。
マルチABIビルドを有効にする
複数のデバイスアーキテクチャをサポートするには、AndroidマルチABI APKおよびバンドル(AAB)を生成するようにビルドを設定します。公式インストーラからインストールしたQt for Androidのバージョンを使用している場合は、CMake変数を使用してアプリを設定するだけで済みます。
qt-cmake -DQT_ANDROID_BUILD_ALL_ABIS:BOOL=ON ...
これは、Qt Creator のプロジェクト設定からも簡単に設定できます。
Qt for Android のマルチ ABI ビルドの処理に関するより詳細な説明については、Alexey Edelev 氏のブログ投稿「Android マルチ ABI ビルドがユーザープロジェクトで復活」をご覧ください。
署名キーの準備
Google Play ストアでは、アプリのリリースごとに署名を行う必要があります。本ブログ投稿執筆時点では、Google は Google Play 管理の署名キーの使用を推奨しています。この方法を使用すると、2つの署名キーを持つことになります。1つはPlayストアコンソールでアプリを作成する際に生成され、その後Googleによって管理されます。2つ目のキーはローカルに保持され、アップロードキーと呼ばれ、アプリバンドルをGoogle Playコンソールにアップロードする際にバンドルの真正性を確保するために、バンドルに署名するために使用されます。詳細は、Use Play App Signing(Playアプリ署名の使用)を参照してください。
結論から言うと、アップロードキーを生成する必要があります。Qt CreatorとAndroid Studioの両方に、このようなキーを作成するためのUIツールがあります。
Qt Creatorを使用する場合
Qt Creatorを使用してこれを行うには、「Androidパッケージの署名」を参照してください。キーを生成したら、プロジェクト設定 > Android APKのビルド > アプリケーション署名 > パッケージを署名 のチェックボックスを必ずオンにします。
コマンドラインを使用する場合
コマンドラインプロンプトのみを使用して署名キーストアを生成するには、次のコマンドを使用します。
keytool -genkey -keyalg RSA -keystore upload-key.keystore \
-alias play_apps \
-storepass <password> -keypass <key-password> \
-dname "CN=<name>, OU=<unit>, O=<organisation>, L=<city>, ST=<state>, C=<country>"
準備ができたら、プロジェクトを以下の引数で構成して、プロジェクトに署名を有効にします。
qt-cmake -DQT_ANDROID_SIGN_APK:BOOL=ON -DQT_ANDROID_SIGN_AAB:BOOL=ON ...
次に、キーの詳細を指定する以下の環境変数を設定します。
export QT_ANDROID_KEYSTORE_PATH=upload-key.keystore
export QT_ANDROID_KEYSTORE_ALIAS=play_apps
export QT_ANDROID_KEYSTORE_STORE_PASS=<password>
export QT_ANDROID_KEYSTORE_KEY_PASS=<key-password>
AABバンドルの有効化
現在、Playストアでは、互換性が高く、リリース目的に実用的であるという理由で、主にAndroid App Bundle(AAB)が受け入れられています。AABパッケージは、異なるデバイスアーキテクチャ、画面サイズ、および密度に対応するリソースやライブラリを含んでいます。ストアは、個々のデバイスの要件に応じて、インストール可能なAPKを後で作成します。詳細については、Android App Bundleのよくある質問を参照してください。
それでは、QtにこのようなAABバンドルを生成するように指示しましょう。
Qt Creatorを使用する場合
Qt Creator を使用してこれを行うには、「Android パッケージへの署名」を参照してください。 キーが生成されたら、プロジェクト設定 > Android APK のビルド > 高度な操作 > Android アプリバンドルのビルド のチェックボックスを必ずオンにします。 さらに、ビルド後にリリースディレクトリを Qt Creator で開くには、ビルド後にパッケージの場所を開く チェックボックスをオンにします。
コマンドラインを使用
アプリの AAB を生成するには、単純に以下を実行します。
cd build
cmake --build . --target aab
プロジェクトに複数のアプリがある場合、このコマンドはプロジェクト内の各アプリ/実行可能ターゲットのAABを生成します。特定のターゲットのみのAABを生成するには、次のコマンドを実行します。
cd build
cmake --build . --target appname_make_aab
これにより、
/<project-build-path>/android-build-appname/build/outputs/bundle/release/android-build-appname-release.aab
の下にAABが生成されます。
この後、ビルドにより、Playストアで受理される署名付きリリースパッケージが生成されるはずです。
Playストアコンソール
アプリの公開に移る前に、言うまでもなく、アプリが公開に耐えうるものであることを確認するために、さまざまなデバイスやシナリオでアプリをテストしておくべきです。また、スクリーンショット、デモ用デザイン、プロモーションビデオなどのアートワークを準備しておくことも良いタイミングです。
Googleは、Google Play Consoleを通じて公開済みアプリの管理を可能にしています。つまり、まず必要なのはアカウントを用意することであり、その手順は「Play Consoleの開始方法」で説明されています。
さて、最後のステップは公開です。ストアでアプリを公開するためのさまざまな要件や手順について、包括的なガイドをご覧になりたい場合は、Play Consoleの公式ガイド「Create and set up your app(アプリの作成と設定)」に従うことを強くお勧めします。このガイドでは、アプリの準備、テストトラックの作成、アプリバンドルのアップロード、審査の取得、そして最終的にPlayストアへのアプリの公開まで、ステップバイステップで説明しています。
ストアから最良の結果を得るためのより役立つ情報については、Google Play Console ウェビナーも確認することをお勧めします。
Googleの 「アプリを公開」ガイドも、Androidアプリをリリースする際に考慮すべき全体的なヒントやアドバイスを提供しているので、非常に役立つでしょう。
以上で、今回のブログ記事は終了です。このガイドが公開プロセスをナビゲートするのに役立ち、Qtで開発したAndroidアプリをGoogle Playストアにリリースする準備が整ったことを願っています。
Happy publishing! 🚀
Blog Topics:
Comments
Subscribe to our newsletter
Subscribe Newsletter
Try Qt 6.8 Now!
Download the latest release here: www.qt.io/download.
Qt 6.8 release focuses on technology trends like spatial computing & XR, complex data visualization in 2D & 3D, and ARM-based development for desktop.
We're Hiring
Check out all our open positions here and follow us on Instagram to see what it's like to be #QtPeople.
I thought I was pretty clear. We don't want your backend. We want our own back end powered by Qt, our Qt code, though a QObject-based web server. We define the objects, the signals, slots, etc.
We don't want BaaS.
Also, we wont want WebSockets. We want comet. Yeah, its not as elegant, but the firewalls sure like it better.
@Jason: Please take a look at: http://qt-project.org/wiki/...
This is a very good feedback. Thanks.
We also want support the scenario of setting up and maintaining your own backend that is powered by Qt.