随着google弃用GCC,适用于Android的Qt 5.12转向了Clang而不是它。由于它们都是基于GCC的,因此使现有的建筑指南已过时。
用于Android的常规Qt构建缺少一些重要功能,此外,相关文档似乎已经过时了。
另外,5.12随critical Android related bug一起启动,该命令几乎强制要求定制构建以暂时包含此修复程序。
我本人以前根本没有使用过Clang,我是那些真正喜欢只开发应用程序而不是经历试图构建必要工具的令人沮丧的经历的人之一。
关于Clang的Qt仍然存在,并且5.12是长期支持版本,我认为详细的分步指南将指导如何制作有效的Qt版本,这将使很多人受益。这肯定会为我省去数日的头痛和挫折,因此,除了为提高问题可见度可能需要的任何赏金外,我愿意慷慨地悬赏第一个可重现的答案。
我个人的要求是对SSL,MySQL和PostgreSQL的支持,尽管我们欢迎其他功能。看来基于Linux的指南将是最有益的格式,因为它也适用于通过MSYS的Windows。
答案 0 :(得分:0)
我无法答复您的所有请求,但是我可以说一些有关openssl的信息:
首先,即使使用Qt 5.12,如果您使用的是从Qt本身下载的官方android版本(通过Maintenancetool),那么您仍然必须使用gcc工具链和openssl 1.0.2。 Qt的构建需要1.0。*,而从1.1.1开始,仅对openssl添加了clang支持。 Qt 5.13有望支持此版本的openssl。有关更多详细信息,请参见QTBUG-71391。
那只蜜蜂说,如果您自己交叉编译Qt for Android(或在Qt支持此功能时将来访问此文章),则可以使用openssl 1.1并使用clang对其进行编译。
这些步骤记录在NOTES.ANDROID中的github上。这些步骤相对简单,可以归结为对PATH进行一些更改以构建库。一个基本脚本,包括Qt提供的所有android架构的开关,
TOOLCHAIN_VERSION=4.9
HOST_ARCH=linux-x86_64
case "$ANDROID_TARGET_ARCH" in
arm64-v8a)
API_VERSION=21
ARCH_ID=android-arm64
TOOLCHAIN=aarch64-linux-android-$TOOLCHAIN_VERSION
;;
armeabi-v7a)
API_VERSION=16
ARCH_ID=android-arm
TOOLCHAIN=arm-linux-android-$TOOLCHAIN_VERSION
;;
x86)
API_VERSION=16
ARCH_ID=android-x86
TOOLCHAIN=x86-$TOOLCHAIN_VERSION
;;
*)
echo "Unsupported ANDROID_TARGET_ARCH: $ANDROID_TARGET_ARCH"
exit 1
;;
esac
export ANDROID_NDK=/path/to/ndk
export PATH=$ANDROID_NDK/toolchains/llvm/prebuilt/$HOST_ARCH/bin/:$ANDROID_NDK/toolchains/$TOOLCHAIN/prebuilt/$HOST_ARCH/bin:$PATH
./Configure $ARCH_ID shared no-ssl3 -D__ANDROID_API__=$API_VERSION
make SHLIB_VERSION_NUMBER= SHLIB_EXT=.so build_libs
在此脚本中,ANDROID_TARGET_ARCH
仅是具有相同名称的qmake变量的值,因此该脚本可以由qmake调用。需要详细完成的步骤是:
ANDROID_NDK
环境变量设置为安装了NDK的任何位置Configure
脚本-并不运行config
。传递目标体系结构和其他标志。 (例如,出于安全原因,我更喜欢禁用ssl3)SHLIB_VERSION_NUMBER= SHLIB_EXT=.so
部分以确保创建的二进制文件的名称中没有版本号,因为android不支持。就这样!