One can now run "ninja android_docs" to generate HTML docs for Android Java sources of Qt. This is done with javadoc. One can now run "ninja android_source_jars" to generate source jars for Android. They're supposed to be loaded into an IDE. The targets are enabled automatically for Android builds. For non-Android builds, set QT_BUILD_HOST_JAVA_DOCS=ON to create those targets. In that case you must also set ANDROID_SDK_ROOT. Fixes: QTBUG-117028 Change-Id: I2df51153359a95870c055d3ee373b8381f10cb51 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io> Reviewed-by: Alexey Edelev <alexey.edelev@qt.io> Reviewed-by: Nicholas Bennett <nicholas.bennett@qt.io>
81 lines
3.2 KiB
CMake
81 lines
3.2 KiB
CMake
# Copyright (C) 2024 The Qt Company Ltd.
|
|
# SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
function(_qt_internal_detect_latest_android_platform out_var)
|
|
# Locate the highest available platform
|
|
file(GLOB android_platforms
|
|
LIST_DIRECTORIES true
|
|
RELATIVE "${ANDROID_SDK_ROOT}/platforms"
|
|
"${ANDROID_SDK_ROOT}/platforms/*")
|
|
|
|
# If list is not empty
|
|
if(android_platforms)
|
|
_qt_internal_sort_android_platforms(android_platforms ${android_platforms})
|
|
list(REVERSE android_platforms)
|
|
list(GET android_platforms 0 android_platform_latest)
|
|
set(${out_var} "${android_platform_latest}" PARENT_SCOPE)
|
|
else()
|
|
set(${out_var} "${out_var}-NOTFOUND" PARENT_SCOPE)
|
|
endif()
|
|
endfunction()
|
|
|
|
function(_qt_internal_sort_android_platforms out_var)
|
|
if(CMAKE_VERSION GREATER_EQUAL 3.18)
|
|
set(platforms ${ARGN})
|
|
list(SORT platforms COMPARE NATURAL)
|
|
else()
|
|
# Simulate natural sorting:
|
|
# - prepend every platform with its version as three digits, zero-padded
|
|
# - regular sort
|
|
# - remove the padded version prefix
|
|
set(platforms)
|
|
foreach(platform IN LISTS ARGN)
|
|
set(version "000")
|
|
if(platform MATCHES ".*-([0-9]+)$")
|
|
set(version ${CMAKE_MATCH_1})
|
|
string(LENGTH "${version}" version_length)
|
|
math(EXPR padding_length "3 - ${version_length}")
|
|
string(REPEAT "0" ${padding_length} padding)
|
|
string(PREPEND version ${padding})
|
|
endif()
|
|
list(APPEND platforms "${version}~${platform}")
|
|
endforeach()
|
|
list(SORT platforms)
|
|
list(TRANSFORM platforms REPLACE "^.*~" "")
|
|
endif()
|
|
set("${out_var}" "${platforms}" PARENT_SCOPE)
|
|
endfunction()
|
|
|
|
function(_qt_internal_locate_android_jar)
|
|
# This variable specifies the API level used for building Java code, it can be the same as Qt
|
|
# for Android's maximum supported Android version or higher.
|
|
if(NOT QT_ANDROID_API_USED_FOR_JAVA)
|
|
set(QT_ANDROID_API_USED_FOR_JAVA "android-35")
|
|
endif()
|
|
|
|
set(jar_location "${ANDROID_SDK_ROOT}/platforms/${QT_ANDROID_API_USED_FOR_JAVA}/android.jar")
|
|
if(NOT EXISTS "${jar_location}")
|
|
_qt_internal_detect_latest_android_platform(android_platform_latest)
|
|
if(android_platform_latest)
|
|
message(NOTICE "The default platform SDK ${QT_ANDROID_API_USED_FOR_JAVA} not found, "
|
|
"using the latest installed ${android_platform_latest} instead.")
|
|
set(QT_ANDROID_API_USED_FOR_JAVA ${android_platform_latest})
|
|
endif()
|
|
endif()
|
|
|
|
set(QT_ANDROID_JAR "${ANDROID_SDK_ROOT}/platforms/${QT_ANDROID_API_USED_FOR_JAVA}/android.jar")
|
|
if(NOT EXISTS "${QT_ANDROID_JAR}")
|
|
message(FATAL_ERROR
|
|
"No suitable Android SDK platform found in '${ANDROID_SDK_ROOT}/platforms'."
|
|
" The minimum version required for building Java code is ${QT_ANDROID_API_USED_FOR_JAVA}"
|
|
)
|
|
endif()
|
|
|
|
message(STATUS "Using Android SDK API ${QT_ANDROID_API_USED_FOR_JAVA} from "
|
|
"${ANDROID_SDK_ROOT}/platforms")
|
|
|
|
set(QT_ANDROID_JAR "${QT_ANDROID_JAR}" PARENT_SCOPE)
|
|
set(QT_ANDROID_API_USED_FOR_JAVA "${QT_ANDROID_API_USED_FOR_JAVA}" PARENT_SCOPE)
|
|
endfunction()
|
|
|