summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/Qt6AndroidMacros.cmake41
-rw-r--r--src/tools/androidtestrunner/main.cpp37
2 files changed, 44 insertions, 34 deletions
diff --git a/src/corelib/Qt6AndroidMacros.cmake b/src/corelib/Qt6AndroidMacros.cmake
index ab793d3499..ceb894e2e7 100644
--- a/src/corelib/Qt6AndroidMacros.cmake
+++ b/src/corelib/Qt6AndroidMacros.cmake
@@ -288,35 +288,48 @@ function(qt6_android_add_apk_target target)
if(NOT QT_NO_GLOBAL_APK_TARGET)
if(NOT TARGET apk)
add_custom_target(apk
- DEPENDS ${target}_prepare_apk_dir
+ DEPENDS ${target}_make_apk
COMMENT "Building all apks"
)
endif()
- set(should_add_to_global_apk TRUE)
endif()
set(deployment_tool "${QT_HOST_PATH}/${QT6_HOST_INFO_BINDIR}/androiddeployqt")
- set(apk_dir "$<TARGET_PROPERTY:${target},BINARY_DIR>/android-build")
+ set(apk_final_dir "$<TARGET_PROPERTY:${target},BINARY_DIR>/android-build")
+ set(apk_intermediate_dir "${CMAKE_CURRENT_BINARY_DIR}/android-build")
+ set(apk_file_name "${target}.apk")
+ set(apk_final_file_path "${apk_final_dir}/${apk_file_name}")
+ set(apk_intermediate_file_path "${apk_intermediate_dir}/${apk_file_name}")
+
+ # This target is used by Qt Creator's Android support.
add_custom_target(${target}_prepare_apk_dir
DEPENDS ${target}
COMMAND ${CMAKE_COMMAND}
-E copy $<TARGET_FILE:${target}>
- "${apk_dir}/libs/${CMAKE_ANDROID_ARCH_ABI}/$<TARGET_FILE_NAME:${target}>"
+ "${apk_final_dir}/libs/${CMAKE_ANDROID_ARCH_ABI}/$<TARGET_FILE_NAME:${target}>"
COMMENT "Copying ${target} binary to apk folder"
)
- add_custom_target(${target}_make_apk
- DEPENDS ${target}_prepare_apk_dir
- COMMAND ${deployment_tool}
- --input ${deployment_file}
- --output ${apk_dir}
- --apk ${apk_dir}/${target}.apk
+ # Add custom command that creates the apk in an intermediate location.
+ # We need the intermediate location, because we cannot have target-dependent generator
+ # expressions in OUTPUT.
+ add_custom_command(OUTPUT "${apk_intermediate_file_path}"
+ COMMAND ${CMAKE_COMMAND}
+ -E copy "$<TARGET_FILE:${target}>"
+ "${apk_intermediate_dir}/libs/${CMAKE_ANDROID_ARCH_ABI}/$<TARGET_FILE_NAME:${target}>"
+ COMMAND "${deployment_tool}"
+ --input "${deployment_file}"
+ --output "${apk_intermediate_dir}"
+ --apk "${apk_intermediate_file_path}"
COMMENT "Creating APK for ${target}"
- )
+ DEPENDS "${target}" "${deployment_file}")
- if(should_add_to_global_apk)
- add_dependencies(apk "${target}_make_apk")
- endif()
+ # Create a ${target}_make_apk target to copy the apk from the intermediate to its final
+ # location. If the final and intermediate locations are identical, this is a no-op.
+ add_custom_target(${target}_make_apk
+ COMMAND "${CMAKE_COMMAND}"
+ -E copy_if_different "${apk_intermediate_file_path}" "${apk_final_file_path}"
+ DEPENDS "${apk_intermediate_file_path}")
endfunction()
if(NOT QT_NO_CREATE_VERSIONLESS_FUNCTIONS)
diff --git a/src/tools/androidtestrunner/main.cpp b/src/tools/androidtestrunner/main.cpp
index b10b7d0bf3..37e58d5257 100644
--- a/src/tools/androidtestrunner/main.cpp
+++ b/src/tools/androidtestrunner/main.cpp
@@ -446,26 +446,23 @@ int main(int argc, char *argv[])
return 1;
}
- if (!QFile::exists(g_options.apkPath)) {
- if (g_options.makeCommand.isEmpty()) {
- fprintf(stderr,
- "No apk found at \"%s\". Provide a make command with the \"--make\" parameter "
- "to generate it first.\n",
- qPrintable(g_options.apkPath));
- return 1;
- }
- if (!execCommand(g_options.makeCommand, nullptr, true)) {
- if (!g_options.skipAddInstallRoot) {
- // we need to run make INSTALL_ROOT=path install to install the application file(s) first
- if (!execCommand(QStringLiteral("%1 INSTALL_ROOT=%2 install")
- .arg(g_options.makeCommand, QDir::toNativeSeparators(g_options.buildPath)), nullptr, g_options.verbose)) {
- return 1;
- }
- } else {
- if (!execCommand(QStringLiteral("%1")
- .arg(g_options.makeCommand), nullptr, g_options.verbose)) {
- return 1;
- }
+ if (g_options.makeCommand.isEmpty()) {
+ fprintf(stderr,
+ "It is required to provide a make command with the \"--make\" parameter "
+ "to generate the apk.\n");
+ return 1;
+ }
+ if (!execCommand(g_options.makeCommand, nullptr, true)) {
+ if (!g_options.skipAddInstallRoot) {
+ // we need to run make INSTALL_ROOT=path install to install the application file(s) first
+ if (!execCommand(QStringLiteral("%1 INSTALL_ROOT=%2 install")
+ .arg(g_options.makeCommand, QDir::toNativeSeparators(g_options.buildPath)), nullptr, g_options.verbose)) {
+ return 1;
+ }
+ } else {
+ if (!execCommand(QStringLiteral("%1")
+ .arg(g_options.makeCommand), nullptr, g_options.verbose)) {
+ return 1;
}
}
}