명령줄에서 Android용 Qt 프로젝트 빌드하기
CMake를 사용한 빌드
설치된 Qt를 사용하여 CMake 프로젝트를 빌드하려면, 예를 들어 리눅스의 경우 qt-cmake 래퍼와 함께 다음 명령을 사용하십시오:
~/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이 페이지에서는 설명의 편의를 위해 리눅스용 Android SDK 경로를 사용하지만, 실제로 명령을 실행할 때는 사용자의 시스템에 맞는 경로를 사용해야 합니다.
Android SDK는 일반적으로 Qt Creator 또는 Android Studio를 통해 다음 위치에 설치됩니다:
- 리눅스:
~/Android/Sdk/ - macOS:
~/Library/Android/sdk/ - Windows:
C:\Users\<USER>\AppData\Local\Android\Sdk\
참고: 직접 빌드한 Qt를 사용하는경우 , Qt 빌드에 사용된 것과 동일한 값이 qt-cmake에서도 사용되므로 SDK 및 NDK 인수를 지정할 필요가 없습니다.
CMake를 사용하여 다중 ABI 패키지 빌드
Qt 6.12에서는 다중 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 ABI에 대해서만 프로젝트를 구성합니다:
~/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또한, 단일 실행 파일 타깃이 빌드될 ABI 목록을 지정하는 QT_ANDROID_ABIS 타깃 속성을 설정할 수도 있습니다. 예를 들어:
qt_add_executable(MyApp main.cpp)
set_target_properties(MyApp PROPERTIES QT_ANDROID_ABIS "arm64-v8a;x86")QT_ANDROID_BUILD_ALL_ABIS 이나 QT_ANDROID_ABIS 변수가 설정되어 있더라도, MyApp 타겟은 armeabi-v7a 및 arm64-v8a 용으로만 빌드됩니다.
Android 번들 생성
프로젝트 구성이 완료되면 다음 CMake 타깃을 사용하여 애플리케이션 번들을 생성할 수 있습니다:
cmake --build . --target apk또는 AAB를 생성하려면:
cmake --build . --target aab내부적으로는 Qt 코드가 빌드되어 android-build 디렉터리로 복사된 후, Gradle을 사용하여 Java 코드를 빌드하고 애플리케이션을 패키징합니다.
Android 패키지 서명
출시용 APK를 빌드하는 경우, 해당 APK에 서명해야 합니다. Qt Creator 를 사용하여 패키지에 서명하는 방법에 대한 자세한 내용은 ‘Android 패키지 서명’을 참조하십시오. 그렇지 않은 경우, CMake 변수 QT_ANDROID_SIGN_APK 및 QT_ANDROID_SIGN_AAB를 확인하십시오.
AAR(Android Archive) 파일 빌드
참고: AAR 빌드 지원은 Qt 6.8부터 도입되었습니다.
Android Archive(AAR) 는 Android 라이브러리 형식입니다. APK나 AAB와 달리 AAR은 단독으로 실행할 수 없으며, 대신 네이티브 Android 애플리케이션에 종속성으로 포함되도록 설계되었습니다. 이는 네이티브 Android 액티비티 내에서 Qt Qml 콘텐츠를 호스팅할 때 일반적으로 사용되는 구성입니다.
AAR을 생성하려면 평소와 같이 qt_add_executable을 사용하여 Qt 애플리케이션을 정의하십시오. AAR 빌드 타깃은 APK 및 AAB 타깃과 함께 자동으로 생성됩니다. 프로젝트의 모든 AAR 패키지를 다음 명령어로 빌드하십시오:
cmake --build . --target aarmyapp 라는 특정 타깃에 대한 AAR만 빌드하려면:
cmake --build . --target myapp_make_aarqmake를 사용한 빌드
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.