Windows下使用Qt最新源码编译android库
主要参考
https://doc.qt.io/qt-5/android-building.html#configuring-and-building-on-windows
下载源码
https://download.qt.io/archive/qt/5.15/5.15.8/single/qt-everywhere-opensource-src-5.15.8.zip
编译前准备和确认工作
- 源码解压后放入选中位置,假设放在C:\software\Qt\sources
- 新建编译文件夹,假设建在C:\software\Qt\sources\build
- 确认Android SDK目录,一般在C:/Users/username/AppData/Local/Android/Sdk
- 确认Android NDK目录,一般在C:/Users/username/AppData/Local/Android/Sdk/ndk-bundle
- 确认python.exe目录,需要放在环境变量里
- 确认perl.exe目录,需要放在环境变量里
编译命令
//管理员打开命令提示符
//进入编译目录
cd C:\software\Qt\sources\build
//编译配置,注意username改成自己的用户名
C:\software\Qt\sources\qt-everywhere-src-5.15.8\configure -platform win32-g++ -xplatform android-clang -prefix ./ -nomake tests -nomake examples -android-sdk C:/Users/username/AppData/Local/Android/Sdk -android-ndk C:/Users/username/AppData/Local/Android/Sdk/ndk-bundle -android-ndk-host windows-x86_64 -no-warnings-are-errors
//开始编译,大概需要几小时
mingw32-make
实际示例
因上架应用商店要求,需要隐私合规,检测报告发现App在启动后立刻读取剪切板,我把同意隐私协议放在代码最前面也不能在读取剪切板动作之前,因此怀疑是源码导致
一番搜索后,发现的确如此,具体见https://codereview.qt-project.org/c/qt/qtbase/+/359934
可知仅需修改QtNative.java文件的少量代码即可修复此问题
由于我的开发机上用的是5.15.2,因此在下载5.15.2的源码后,直接修改代码,并编译qtbase模块,编译完成后,只需要替换QtAndroid.jar,即可修复此问题
具体步骤如下
- 源码解压后放入选中位置,假设放在C:\software\Qt\sources
- 新建编译文件夹,假设建在C:\software\Qt\sources\build\qtbase
- 确认Android SDK目录,一般在C:/Users/username/AppData/Local/Android/Sdk
- 确认Android NDK目录,一般在C:/Users/username/AppData/Local/Android/Sdk/ndk-bundle
- 确认python.exe目录,需要放在环境变量里
- 确认perl.exe目录,需要放在环境变量里
- 进入编译目录
cd C:\software\Qt\sources\build
- 编译配置,注意username改成自己的用户名
C:\software\Qt\sources\qt-everywhere-src-5.15.2\qtbase\configure -platform win32-g++ -xplatform android-clang -prefix ./ -nomake tests -nomake examples -android-sdk C:/Users/username/AppData/Local/Android/Sdk -android-ndk C:/Users/username/AppData/Local/Android/Sdk/ndk-bundle -android-ndk-host windows-x86_64 -no-warnings-are-errors
- 开始编译,大概需要1小时
mingw32-make
遗留疑问
- 默认disable SSL支持,要enable SSL支持的话,需要在编译前配置参数中增加与openssl-linked有关的参数(不确定,参考https://blog.csdn.net/zhounixing/article/details/105519536 ),简单地尝试过几次后,未成功
- 无论是配置时使用-mp指定多核编译(参考https://zhuanlan.zhihu.com/p/394306561 )还是mingw32-make -jX 指定多核make,似乎都没效果,我6核12线程的设备,CPU使用率编译期间稳定在在10%~20%