Android용 Qt 매니페스트 파일 구성
Android 매니페스트는 모든 Android 앱에 필수적인 XML 파일입니다. 이 파일에는 앱이 사용하는 다양한 설정 및 기능에 대한 구성 정보는 물론, 패키지 이름, 앱 이름, 버전 등 앱 자체에 대한 세부 정보도 포함되어 있습니다. 또한 매니페스트를 통해 권한 및 하드웨어 기능도 설정할 수 있습니다.
Qt for Android는 Android에서 Qt 앱을 빌드하고 실행하는 데 필요한, 빌드 시스템에서 사용하는 기능, 권한 및 기타 구성이 포함된 기본 구성이 적용된 AndroidManifest.xml 버전을 제공합니다.
Qt 프로젝트에서 매니페스트 구성으로
Qt는 빌드 시스템에서 androiddeployqt로 전달되는 일부 메타데이터를 정의하며, 이를 통해 매니페스트 파일에 명시적으로 설정하지 않아도 매니페스트에 올바른 값이 채워집니다. 이러한 메타데이터에는 "-- %%INSERT_VALUE%% --" 형식의 값이 할당되며, 예를 들면 다음과 같습니다:
<manifest ...
android:versionCode="-- %%INSERT_VERSION_CODE%% --"
...
</manifest>이 항목에는 예를 들어 CMake 에 설정된 버전 코드가 자동으로 채워집니다.
Qt 기본 구성
Qt는 기본적으로 다음과 같은 매니페스트 구성을 설정합니다:
| 섹션 | 옵션 | 설명 |
|---|---|---|
| <manifest> | 패키지 | 패키지 이름을 설정합니다. 기본값은 org.qtproject.example.app_name 입니다.경고: 이 필드는 더 이상 사용되지 않으며 |
| android:installLocation | 앱의 설치 위치를 내부 저장소 또는 외부 저장소 중 하나로 설정합니다. 기본값은 auto 입니다. | |
| android:versionCode | 내부 버전 코드를 설정합니다. ANDROID_VERSION_CODE (qmake) 및 QT_ANDROID_VERSION_CODE (CMake)에서 값이 채워집니다. 기본값은 1 입니다. | |
| android:versionName | 공개 버전 이름을 설정합니다. ANDROID_VERSION_NAME (qmake) 및 QT_ANDROID_VERSION_NAME (CMake)에서 값이 채워집니다. 기본값은 1.0 입니다. | |
| <supports-screens> | 앱이 지원하는 화면 크기를 설정합니다. 기본값은 anyDensity, largeScreens, normalScreens 및 smallScreens 입니다. | |
| <application> | android:name | 애플리케이션 클래스 이름입니다. 기본값은 org.qtproject.qt.android.bindings.QtApplication 입니다. |
| android:label | 애플리케이션 이름 레이블입니다. 기본값은 Qt 프로젝트의 대상 이름입니다. 이 값은 QT_ANDROID_APP_NAME을 사용하여 설정할 수 있습니다. | |
| android:icon | 드로어블 또는 밉맵 리소스를 참조하는 애플리케이션 아이콘입니다. 이 태그는 QT_ANDROID_APP_ICON을 통해 설정되거나 AndroidManifest.xml 에서 수동으로 설정된 경우에만 사용됩니다. | |
| android:hardwareAccelerated | 하드웨어 가속 설정을 지정합니다. 기본값은 ` true`입니다. | |
| <activity> | android:name | 액티비티 클래스 이름입니다. 기본값은 ` org.qtproject.qt.android.bindings.QtActivity`입니다. |
| android:configChanges | 액티비티가 처리하는 구성 변경 사항을 나열합니다. 기본값은 orientation, uiMode, screenLayout, screenSize, smallestScreenSize, layoutDirection, locale, fontScale, keyboard, keyboardHidden, navigation, mcc, mnc, density 입니다. | |
| android:launchMode | 액티비티를 시작하는 데 사용되는 방식입니다. 기본값은 singleTop 입니다. | |
| android:screenOrientation | 기기에서 액티비티가 표시되는 방향입니다. 기본값은 unspecified 입니다. | |
| <intent-filter> | 액티비티가 응답할 수 있는 인텐트의 유형을 지정합니다. 기본값은 | |
| android:exported | 해당 액티비티가 다른 애플리케이션의 구성 요소에 의해 실행될 수 있는지 여부를 설정합니다. 기본값은 true 입니다. |
Qt 전용 메타데이터
Qt가 설정하는 기본 매니페스트 구성 외에도, Qt는 Qt 앱에만 유효한 몇 가지 메타데이터를 정의합니다. 이러한 메타데이터는 일반적으로 <activity> 섹션 아래에 다음과 같은 형식으로 포함됩니다:
<meta-data
android:name="meta-data-name"
android:value="meta-data-value" />다음은 Qt에서 정의한 이러한 메타데이터의 목록입니다:
| 메타데이터 이름 | 설명 |
|---|---|
| android.app.lib_name | 액티비티에서 사용하는 네이티브 C++ 라이브러리의 파일 이름입니다. 참고: 이 속성은 필수 항목이며 제거해서는 안 됩니다. 기본값은 Qt 프로젝트의 타깃 이름입니다. |
| android.app.extract_android_style | 네이티브 Android 스타일 정보를 추출하는 데 사용되는 방법입니다. 자세한 내용은 스타일 추출을 참조하세요. 기본값은 ` minimal`입니다. |
| android.app.background_running | 앱이 백그라운드에서 작업을 계속 실행할지 여부를 설정합니다. 이 값을 true 로 설정하는 것은 환경 변수 QT_BLOCK_EVENT_LOOPS_WHEN_SUSPENDED 를 0 로 설정하는 것과 동일합니다. 기본값은 false 입니다.경고: 이 값을 |
| android.app.arguments | 앱 "arg1 arg2" 에 전달할 인자 목록을 설정합니다. ANDROID_APPLICATION_ARGUMENTS (qmake) 및 QT_ANDROID_APPLICATION_ARGUMENTS (CMake)에서 채워집니다. 기본값은 설정되어 있지 않습니다. |
| android.app.splash_screen_drawable_portrait | 세로 모드 전용 스플래시 화면용 드로어블을 설정합니다. 예: android:resource="@drawable/splash_portrait". 기본값은 설정되어 있지 않습니다. |
| android.app.splash_screen_drawable_landscape | 가로 모드 전용 스플래시 화면용 드로어블을 설정합니다. 예: android:resource="@drawable/splash_landscape". 기본값은 설정되어 있지 않습니다. |
| android.app.splash_screen_drawable | 앱 시작 시 표시되는 스플래시 화면의 드로어블을 설정합니다. 참고: 화면 방향 별 스플래시 화면이 먼저 확인되며, 설정되어 있지 않은 경우 이 값이 대신 사용됩니다. 예: |
| android.app.splash_screen_sticky | 스플래시 화면이 앱에서 명시적으로 숨길 때까지 계속 표시될지 여부를 설정합니다. 자세한 내용은 QAndroidApplication::hideSplashScreen()를 참조하십시오. |
| android.app.trace_location | 앱이 추적 파일을 저장할 수 있는 기기의 위치를 지정합니다. 예: /storage/emulated/0/Android/data/<app_package_name>/files/. 이는 CTF(Common Trace Format) 추적 백엔드를 사용할 때 필요합니다. 참고: 앱은 해당 위치에 대한 저장소 권한이 필요합니다. 기본값: 설정되지 않음. |
애플리케이션별 메타데이터
일부 메타데이터 속성은 앱 전체에 적용되므로, ` <application> ` 섹션 아래에 배치해야 합니다:
| 메타데이터 이름 | 설명 |
|---|---|
| android.app.system_libs_prefix | 라이브러리 로딩 조회에 사용할 사용자 정의 시스템 라이브러리 경로를 지정합니다. 이는 앱의 기본 네이티브(JNI) 라이브러리 디렉터리 외부에 설치된 Qt 라이브러리를 사용할 때 필요합니다. 기본값은 /system/lib/ 입니다. |
서비스의 메타데이터
일부 메타데이터 속성은 서비스에서도 사용할 수 있습니다. 주요 속성은 다음과 같습니다:
Qt 권한 및 기능
일부 Qt 모듈은 정상적으로 작동하기 위해 특정 Android 권한이나 기능이 필요할 수 있습니다. 예를 들어, QtMultimedia 의 카메라 권한이 있습니다. androiddeployqt 도구는 빌드 과정에서 이러한 요구 사항을 Android 매니페스트에 포함시켜 줍니다. Qt는 매니페스트에 다음 줄을 정의하며, 이 내용은 실제 값으로 대체됩니다:
<manifest ...
<!-- %%INSERT_PERMISSIONS -->
<!-- %%INSERT_FEATURES -->
...
</manifest>참고: 프로젝트 매니페스트에서 이러한 줄이제거되면 Qt는 올바른 권한을 포함할 수 없게 됩니다. 따라서 일부 기능이 제대로 작동하지 않을 수 있습니다.
권한 사용자 지정
Qt 6.8.1부터는 Qt 모듈이 설정한 기본 권한을 재정의할 수 있습니다. 이는 Qt 모듈에서 사용하는 것과 동일한 권한을 정의하되, 추가적이거나 다른 속성을 부여해야 할 때 유용합니다.
이를 구현하는 방법에는 두 가지가 있습니다. 첫 번째 방법은 애플리케이션의 ` CMakeLists.txt` 파일에서 ` qt_add_android_permission ` CMake 함수를 사용하는 것입니다. 이 방법으로 정의된 권한은 Qt 모듈에서 정의된 동일한 권한보다 우선 적용되므로 중복을 방지할 수 있습니다.
두 번째 방법은 Android 매니페스트 파일에서 이러한 권한을 수동으로 정의하는 것입니다. 이 방법으로 정의된 권한은 Qt 모듈에서 설정된 권한이나 qt_add_android_permission을 통해 설정된 권한보다 우선합니다.
스타일 추출
Qt는 ` Qt Widgets ` 및 ` Qt Quick Controls `의 스타일을 어떻게 적용할지 결정하기 위해 여러 가지 방법을 사용합니다:
full: Qt Widgets 또는 Qt Quick Controls 을 사용할 때 1.참고: 이 방법은 Android 9.0(API 28)부터 Google에 의해 사용이 제한된 일부 Android 비-SDK 인터페이스를 사용하므로 더 이상 사용되지 않습니다. 다른 방법 중 하나를 사용해야 합니다.
default또는minimal: Qt Quick Controls 2를 사용하고 Qt Widgets 또는 Qt Quick Controls 1을 사용하지 않을 때. 이는 기본(default) 또는 전체(full) 옵션을 사용하는 것보다 빠릅니다.none: 스타일 추출을 수행하지 않습니다.
6.2 릴리스 이전의 Qt 매니페스트
Qt 6.2 이전 버전에는 Qt에서 정의한 추가 메타데이터 세트가 포함되어 있었습니다. 이러한 속성은 종속성을 관리하는 데 사용되었으며, 일부는 더 이상 제공되지 않는 Ministro 서비스에서 사용되었습니다. Qt 6.2부터는 이러한 속성을 제거해야 합니다. 다음은 해당 속성 목록입니다:
- android.app.qt_sources_resource_id
- android.app.repository
- android.app.bundled_libs_resource_id
- android.app.bundle_local_qt_libs
- android.app.use_local_qt_libs
- android.app.libs_prefix
- android.app.load_local_libs_resource_id
- android.app.load_local_jars
- android.app.static_init_classes
- android.app.qt_libs_resource_id
- android.app.ministro_not_found_msg
- android.app.ministro_needed_msg
- android.app.fatal_error_msg
Android 매니페스트에 대한 자세한 내용은 Android 앱 매니페스트를 참조하십시오.
© 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.