@@ -71,6 +71,16 @@ macro(add_qt_android_apk TARGET SOURCE_TARGET)
7171
7272 # extract the full path of the source target binary
7373 set (QT_ANDROID_APP_PATH "$<TARGET_FILE:${SOURCE_TARGET} >" ) # full file path to the app's main shared library
74+ if (${Qt5Core_VERSION} VERSION_GREATER_EQUAL 5.14)
75+ set (QT_ANDROID_SUPPORT_MULTI_ABI ON )
76+ endif ()
77+
78+ if (QT_ANDROID_SUPPORT_MULTI_ABI)
79+ # qtandroideploy will append by itself the ANDROID_ABI to the target name
80+ set (QT_ANDROID_APPLICATION_BINARY "${SOURCE_TARGET} " )
81+ else ()
82+ set (QT_ANDROID_APPLICATION_BINARY ${QT_ANDROID_APP_PATH} )
83+ endif ()
7484
7585 # define the application name
7686 if (ARG_NAME)
@@ -155,22 +165,35 @@ macro(add_qt_android_apk TARGET SOURCE_TARGET)
155165 message (WARNING "Failed to determine ANDROID_STL_PREFIX value for ANDROID_STL=${ANDROID_STL} " )
156166 endif ()
157167
158- # define the STL shared library path
159- # up until NDK r18, ANDROID_STL_SHARED_LIBRARIES is populated by the NDK's toolchain file
160- # since NDK r19, the only option for a shared STL library is libc++_shared
161- if (ANDROID_STL_SHARED_LIBRARIES)
162- list (GET ANDROID_STL_SHARED_LIBRARIES 0 STL_LIBRARY_NAME) # we can only give one to androiddeployqt
163- if (ANDROID_STL_PATH)
164- set (QT_ANDROID_STL_PATH "${ANDROID_STL_PATH} /libs/${ANDROID_ABI} /lib${ANDROID_STL} .so" )
168+ if (QT_ANDROID_SUPPORT_MULTI_ABI)
169+ # from Qt 5.14 qtandroideploy will find the correct stl.
170+ set (QT_ANDROID_STL_PATH "${QT_ANDROID_NDK_ROOT} /sources/cxx-stl/${ANDROID_STL_PREFIX} /libs" )
171+ else ()
172+ # define the STL shared library path
173+ # up until NDK r18, ANDROID_STL_SHARED_LIBRARIES is populated by the NDK's toolchain file
174+ # since NDK r19, the only option for a shared STL library is libc++_shared
175+ if (ANDROID_STL_SHARED_LIBRARIES)
176+ list (GET ANDROID_STL_SHARED_LIBRARIES 0 STL_LIBRARY_NAME) # we can only give one to androiddeployqt
177+ if (ANDROID_STL_PATH)
178+ set (QT_ANDROID_STL_PATH "${ANDROID_STL_PATH} /libs/${ANDROID_ABI} /lib${ANDROID_STL} .so" )
179+ else ()
180+ set (QT_ANDROID_STL_PATH "${QT_ANDROID_NDK_ROOT} /sources/cxx-stl/${ANDROID_STL_PREFIX} /libs/${ANDROID_ABI} /lib${ANDROID_STL} .so" )
181+ endif ()
182+ elseif (ANDROID_STL STREQUAL c++_shared)
183+ set (QT_ANDROID_STL_PATH "${QT_ANDROID_NDK_ROOT} /sources/cxx-stl/${ANDROID_STL_PREFIX} /libs/${ANDROID_ABI} /libc++_shared.so" )
165184 else ()
166- set (QT_ANDROID_STL_PATH "${QT_ANDROID_NDK_ROOT} /sources/cxx-stl/${ANDROID_STL_PREFIX} /libs/${ANDROID_ABI} /lib${ANDROID_STL} .so" )
185+ message (WARNING "ANDROID_STL (${ANDROID_STL} ) isn't a known shared stl library."
186+ "You should consider setting ANDROID_STL to c++_shared (like Qt)." )
187+ set (QT_ANDROID_STL_PATH "${QT_ANDROID_NDK_ROOT} /sources/cxx-stl/${ANDROID_STL_PREFIX} /libs/${ANDROID_ABI} /libc++_shared.so" )
167188 endif ()
168- elseif (ANDROID_STL STREQUAL c++_shared)
169- set (QT_ANDROID_STL_PATH "${QT_ANDROID_NDK_ROOT} /sources/cxx-stl/${ANDROID_STL_PREFIX} /libs/${ANDROID_ABI} /libc++_shared.so" )
170- else ()
171- message (WARNING "ANDROID_STL (${ANDROID_STL} ) isn't a known shared stl library."
172- "You should consider setting ANDROID_STL to c++_shared (like Qt)." )
173- set (QT_ANDROID_STL_PATH "${QT_ANDROID_NDK_ROOT} /sources/cxx-stl/${ANDROID_STL_PREFIX} /libs/${ANDROID_ABI} /libc++_shared.so" )
189+ endif ()
190+
191+ # From Qt 5.14 qtandroideploy "target-architecture" is no longer valid in input file
192+ # It have been replaced by "architectures": { "${ANDROID_ABI}": "${ANDROID_ABI}" }
193+ # This allow to package multiple ABI in a single apk
194+ # For now we only support single ABI build with this script (to ensure it work with Qt5.14 & Qt5.15)
195+ if (QT_ANDROID_SUPPORT_MULTI_ABI)
196+ set (QT_ANDROID_ARCHITECTURES "\" ${ANDROID_ABI} \" :\" ${ANDROID_ABI} \" " )
174197 endif ()
175198
176199 # set the list of dependant libraries
0 commit comments