Qt/Android/CMake:未考虑自定义AndroidManifest.xml



我正在用Qt为Android构建一个Qt项目。

我需要添加一个uses-feature标签在AndroidManifest.xml文件。为此,我用Qt Creator制作了一个模板,然后添加了android/AndroidManifest.xml

无论我在中输入什么android/AndroidManifest.xml文件,则忽略它,并使用默认的/internal文件。

这是我的CMakeLists.txt文件:

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)

find_package(QT NAMES Qt5 COMPONENTS Widgets REQUIRED)
find_package(Qt5 COMPONENTS Widgets REQUIRED)

file(GLOB_RECURSE SOURCES
${PROJECT_SOURCE_DIR}/*.cpp
${PROJECT_SOURCE_DIR}/*.ui
${PROJECT_SOURCE_DIR}/*.h
${PROJECT_SOURCE_DIR}/*.qrc
${PROJECT_SOURCE_DIR}/android/AndroidManifest.xml
)
if(ANDROID)
set(ANDROID_MIN_SDK_VERSION 21)
set(ANDROID_PACKAGE_SOURCE_DIR ${PROJECT_SOURCE_DIR}/android/)

add_library(myapp SHARED ${SOURCES})
else()
add_executable(evotest ${SOURCES})
endif()

target_link_libraries(myapp Qt5::Widgets)

install(TARGETS myapp DESTINATION bin)

解决方法是设置ANDROID_PACKAGE_SOURCE_DIR这样:

set(ANDROID_PACKAGE_SOURCE_DIR ${PROJECT_SOURCE_DIR}/android CACHE INTERNAL "")

现在,考虑文件android/AndroidManifest.xml来构建android包。

在Qt6中,它是一个属性,并且有一个QT_前缀。
所以自定义AndroidManifest可以通过以下方式设置:

<>以前set_target_properties (myapp属性MACOSX_BUNDLE真实WIN32_EXECUTABLE真实……QT_ANDROID_PACKAGE_SOURCE_DIR $ {CMAKE_CURRENT_SOURCE_DIR}/android)
set_property(TARGET myapp APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/android)

https://doc.qt.io/qt-6/cmake-target-property-qt-android-package-source-dir.html

最新更新