コマンドラインからの Qt for Android プロジェクトのビルド
CMakeによるビルド
インストールした Qt を使って CMake プロジェクトをビルドするには、例えば Linux ではqt-cmakewrapper を使って次のようにします:
~/Qt/<qt_version>/android_<abi>/bin/qt-cmake \
-DANDROID_SDK_ROOT=~/Android/Sdk \
-DANDROID_NDK_ROOT=~/Android/Sdk/ndk/27.2.12479018 \
-S <source_dir> -B <build_dir> \
-GNinjaこのページでは、簡単のためにLinuxのAndroid SDKのパスを使用していますが、これらのコマンドを実行するときは、システムの関連パスを使用してください。
Android SDKは、一般的にQt Creator 、またはAndroid Studioによって以下の場所にインストールされます:
- Linux: ~/Android/Sdk/
- macOS: ~/Library/Android/sdk/
- Windowsの場合c:\Users \<user>\AppData\Local \Android \Sdk \
注意: セルフビルドのQtを使用している場合は、SDKとNDKの引数を指定する必要はありません。
CMakeを使ったマルチABIパッケージのビルド
Qt 6.11では、マルチABIパッケージをビルドする方法がいくつか存在します。デフォルトでは、qt-cmakeスクリプトに属する単一のABIのみが選択されます。QT_ANDROID_BUILD_ALL_ABIS変数をTRUE に設定すると、利用可能な Qt for Android SDK の自動検出が可能になります。この検出メカニズムは、Qt Online Installer によって提供されるデフォルトのディレクトリ構造を使用することを前提としています:
~/Qt/<qt_version>:
android_arm64_v8a
android_armv7
android_x86
android_x86_64以下のコマンドは、Qt Online Installer が提供する Qt for Android SDK を使用して Android マルチ ABI パッケージをビルドする最も簡単な方法を示しています:
~/Qt/<qt_version>/android_<abi>/bin/qt-cmake \
-DQT_ANDROID_BUILD_ALL_ABIS=TRUE \
-DANDROID_SDK_ROOT=~/Android/Sdk \
-DANDROID_NDK_ROOT=~/Android/Sdk/ndk/27.2.12479018 \
-S <source_directory> -B <build_directory>
-GNinjaQT_ANDROID_ABIS変数を使用すると、プロジェクトがビルドされる ABI のリストをカスタマイズできます。対応する Qt for Android 開発キットは、前述のディレクトリ構造に従う必要があります。以下のコマンドラインは、arm64-v8a とx86 ABIs のためだけにプロジェクトを設定します:
~/Qt/<qt_version>/android_<abi>/bin/qt-cmake \
-DQT_ANDROID_ABIS="arm64-v8a;x86" \
-DANDROID_SDK_ROOT=~/Android/Sdk \
-DANDROID_NDK_ROOT=~/Android/Sdk/ndk/27.2.12479018 \
-S <source_directory> -B <build_directory>
-GNinja注意: qt-cmakeスクリプトが属するプライマリ SDK の ABI は、無条件で使用する ABI のリストに追加されます。ビルドから除外することはできません。
注意: QT_ANDROID_BUILD_ALL_ABIS の方がQT_ANDROID_ABIS よりも優先度が高いです。
デフォルトのディレクトリ構造と一致しない Qt for Android SDK へのパスは、対応するQT_PATH_ANDROID_ABI_<ABI>変数を使用して変更できます。
以下の例では、利用可能な Qt for Android SDK の自動検出を有効にし、armeabi-v7a およびarm64-v8a SDK へのカスタムパスを指定しています:
<qt_for_android_install_path>/bin/qt-cmake \
-DQT_ANDROID_BUILD_ALL_ABIS=TRUE
-DQT_PATH_ANDROID_ABI_armeabi-v7a="<Qt/for/armeabi-v7a>" \
-DQT_PATH_ANDROID_ABI_arm64-v8a="<Qt/for/arm64-v8a>" \
-DANDROID_SDK_ROOT=~/Android/Sdk \
-DANDROID_NDK_ROOT=~/Android/Sdk/ndk/27.2.12479018 \
-S <source_directory> -B <build_directory>
-GNinjaまた、QT_ANDROID_ABIStargetプロパティを設定し、単一の実行可能ターゲットがビルドされるABIのリストを指定することも可能です。例えば
qt_add_executable(MyApp main.cpp) set_target_properties(MyApp PROPERTIES QT_ANDROID_ABIS "arm64-v8a;x86")
例えば、MyApp ターゲットは、QT_ANDROID_BUILD_ALL_ABIS またはQT_ANDROID_ABIS 変数が設定されていても、armeabi-v7a とarm64-v8a に対してのみビルドされます。
Androidバンドルの作成
プロジェクトが設定されたら、以下のCMakeターゲットを使用してアプリケーション・バンドルを作成できます:
cmake --build . --target apk
または、AABを生成します:
cmake --build . --target aab
Qtコードがビルドされ、android-build ディレクトリにコピーされた後、GradleがJavaコードのビルドとアプリケーションのパッケージに使用されます。
Androidパッケージへの署名
リリース用の APK がビルドされたら、署名する必要があります。Qt Creator を使ったパッケージの署名の詳細については、Androidパッケージの署名を参照してください。そうでない場合は、CMake変数QT_ANDROID_SIGN_APKと QT_ANDROID_SIGN_AABをチェックしてください。
AAR(Androidアーカイブ)ファイルのビルド
Note: AAR ビルドのサポートは Qt 6.8 で導入されました。
Android Archive (AAR)はAndroidのライブラリフォーマットです。APKやAABとは異なり、スタンドアロンで実行することはできません。代わりに、ネイティブのAndroidアプリケーションの依存関係として埋め込むことが意図されています。これは、Qt/QMLコンテンツをネイティブAndroidアクティビティ内でホスティングする場合の典型的なセットアップです。
AARを作成するには、通常通りqt_add_executableでQtアプリケーションを定義します。AARビルドターゲットは、APKやAABターゲットと一緒に自動的に作成されます。でプロジェクト内のすべての AAR パッケージをビルドします:
cmake --build . --target aar
myapp という特定のターゲットの AAR のみをビルドするには、次のようにします:
cmake --build . --target myapp_make_aar
qmakeでビルドする
Qt 5 と同様に、qmake を使用してユーザープロジェクトをビルドすることができます。
注意: Qt 6 では、qmake を使ったマルチ ABI パッケージのビルドはサポートされていません。
QT_ANDROID_ABIS,QT_ANDROID_BUILD_ALL_ABIS,QT_PATH_ANDROID_ABI_<ABI>, QT_ANDROID_ABISも参照してください 。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.