androiddeployqtツール

Androidパッケージのビルドには多くのステップが必要です。androiddeployqtツールによって処理されるステップは、Android上でアプリケーションをデプロイするで説明されています。

androiddeployqtを実行する前の前提条件

ツールを手動で実行する前に、CMake またはqmake を使ってプロジェクトを構成し、Makefiles と、androiddeployqt で使用される重要な設定を含むJSON ファイル(つまりandroid-<target_name>-deployment-settings.json )を生成する必要があります。

注意: androiddeployqt JSON ファイルを変更することはお勧めしません。

androiddeployqt 用の環境を準備するために、ソースディレクトリとは別のディレクトリにプロ ジェクトを設定してください。プロジェクトの設定の詳細については、Building Qt for Android Projects from Command Line を参照してください。

コマンドライン引数

ツールを実行する際に必要なコマンドライン引数は--input--output だけです。その他のコマンドライン引数はオプションですが、便利です。以下のリストは、--help 引数を androiddeployqt に渡すことで利用できます。

Syntax: androiddeployqt --output <destination> [options]

Creates an Android package in the build directory <destination> and
builds it into an .apk file.

Optional arguments:
    --input <inputfile>: Reads <inputfile> for options generated by
       qmake. A default file name based on the current working
       directory will be used if nothing else is specified.

    --deployment <mechanism>: Supported deployment mechanisms:
       bundled (default): Includes Qt files in stand-alone package.
       unbundled: Assumes native libraries are present on the device
       and does not include them in the APK.

    --aab: Build an Android App Bundle.

    --no-build: Do not build the package, it is useful to just install
       a package previously built.

    --install: Installs apk to device/emulator. By default this step is
       not taken. If the application has previously been installed on
       the device, it will be uninstalled first.

    --reinstall: Installs apk to device/emulator. By default this step
       is not taken. If the application has previously been installed on
       the device, it will be overwritten, but its data will be left
       intact.

    --device [device ID]: Use specified device for deployment. Default
       is the device selected by default by adb.

    --android-platform <platform>: Builds against the given android
       platform. By default, the highest available version will be
       used.

    --release: Builds a package ready for release. By default, the
       package will be signed with a debug key.

    --sign <url/to/keystore> <alias>: Signs the package with the
       specified keystore, alias and store password.
       Optional arguments for use with signing:
         --storepass <password>: Keystore password.
         --storetype <type>: Keystore type.
         --keypass <password>: Password for private key (if different
           from keystore password.)
         --sigfile <file>: Name of .SF/.DSA file.
         --digestalg <name>: Name of digest algorithm. Default is
           "SHA-256".
         --sigalg <name>: Name of signature algorithm. Default is
           "SHA256withRSA".
         --tsa <url>: Location of the Time Stamping Authority.
         --tsacert <alias>: Public key certificate for TSA.
         --internalsf: Include the .SF file inside the signature block.
         --sectionsonly: Do not compute hash of entire manifest.
         --protected: Keystore has protected authentication path.
         --jarsigner: Deprecated, ignored.

       NOTE: To conceal the keystore information, the environment variables
         QT_ANDROID_KEYSTORE_PATH, and QT_ANDROID_KEYSTORE_ALIAS are used to
         set the values keysotore and alias respectively.
         Also the environment variables QT_ANDROID_KEYSTORE_STORE_PASS,
         and QT_ANDROID_KEYSTORE_KEY_PASS are used to set the store and key
         passwords respectively. This option needs only the --sign parameter.

    --jdk <path/to/jdk>: Used to find the jarsigner tool when used
       in combination with the --release argument. By default,
       an attempt is made to detect the tool using the JAVA_HOME and
       PATH environment variables, in that order.

    --qml-import-paths: Specify additional search paths for QML
       imports.

    --verbose: Prints out information during processing.

    --no-generated-assets-cache: Do not pregenerate the entry list for
       the assets file engine.

    --aux-mode: Operate in auxiliary mode. This will only copy the
       dependencies into the build directory and update the XML templates.
       The project will not be built or installed.

    --apk <path/where/to/copy/the/apk>: Path where to copy the built apk.

    --build-aar: Build an AAR package. This option skips --aab, --install,
       --reinstall, and --sign options if they are provided.

    --qml-importscanner-binary <path/to/qmlimportscanner>: Override the
       default qmlimportscanner binary path. By default the
       qmlimportscanner binary is located using the Qt directory
       specified in the input file.

    --depfile <path/to/depfile>: Output a dependency file.

    --builddir <path/to/build/directory>: build directory. Necessary when
       generating a depfile because ninja requires relative paths.

    --no-rcc-bundle-cleanup: skip cleaning rcc bundle directory after
       running androiddeployqt. This option simplifies debugging of
       the resource bundle content, but it should not be used when deploying
       a project, since it litters the "assets" directory.

    --copy-dependencies-only: resolve application dependencies and stop
       deploying process after all libraries and resources that the
       application depends on have been copied.

    --help: Displays this information.

project_name 、デバイスにデプロイせずにandroiddeployqt 、アプリケーション・パッケージをビルドするには、以下を実行します:

androiddeployqt --input <build_dir>/android-project_name-deployment-settings.json \
                --output <build_dir>/android-build

パッケージをビルドしてデバイスにデプロイするには、以下を実行します:

androiddeployqt --input <build_dir>/android-project_name-deployment-settings.json \
                --output <build_dir>/android-build --install --device <device_serial_id>

依存関係の検出

Qt には多くのプラグインが付属しており、必要な時に実行時にロードされます。これらは SQL データベースへの接続から特定の画像フォーマットの読み込みまで、あらゆる処理を行うことができます。プラグインは実行時にロードされるため、プラグインの依存関係を検出することは不可能ですが、androiddeployqt はアプリケーションの Qt 依存関係に基づいて依存関係を推測しようとします。プラグインがアプリケーションの依存関係でもない Qt 依存関係を持っている場合、デフォルトではインクルードされません。例えば、SVG イメージフォーマットプラグインを確実にインクルードするには、Qt SVGモジュールをプロジェクトに追加して、アプリケーションの依存関係にする必要があります:

find_package(Qt6 REQUIRED COMPONENTS Svg)
...
target_link_libraries(target_name PRIVATE Qt6::Svg)

なぜ特定のプラグインが自動的にインクルードされないのか疑問に思ったら、androiddeployqt を--verbose オプション付きで実行することで、除外されたプラグインごとに欠落している依存関係のリストを取得することができます。Qt Creator でも、Projects >Build Steps >Build Android APK >Advanced ActionsVerbose output チェックボックスにチェックを入れることで、同じことができます。

アプリケーションの依存関係を手動で指定することも可能です。詳細については、QT_ANDROID_DEPLOYMENT_DEPENDENCIESCMake変数を参照してください。

Note: androiddeployqtはプロジェクトのQMLファイルをスキャンしてQMLインポートを収集します。しかし、実行時にC++からQString 、QMLコードをロードしている場合、androiddeployqtはデプロイ時にそれを認識しないため、正しく動作しない可能性があります。これを解決するには、実行時に参照されるようなQMLモジュールをインポートするダミーのQMLファイルを追加します。

Qt Creatorでのデプロイ

Qt Creator はandroiddeployqt を使用しており、様々なオプションを指定するための簡単で直感的なユーザーインターフェイスを提供しています。詳細はQt Creator を参照してください:Android デバイスへのアプリケーションのデプロイ」を参照してください。

Qt for Android アプリのカスタマイズとデプロイの詳細については、Android へのアプリケーションのデプロイを参照してください。

©2024 The Qt Company Ltd. 本書に含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。