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

编译前准备和确认工作

  1. 源码解压后放入选中位置,假设放在C:\software\Qt\sources
  2. 新建编译文件夹,假设建在C:\software\Qt\sources\build
  3. 确认Android SDK目录,一般在C:/Users/username/AppData/Local/Android/Sdk
  4. 确认Android NDK目录,一般在C:/Users/username/AppData/Local/Android/Sdk/ndk-bundle
  5. 确认python.exe目录,需要放在环境变量里
  6. 确认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,即可修复此问题
具体步骤如下

  1. 源码解压后放入选中位置,假设放在C:\software\Qt\sources
  2. 新建编译文件夹,假设建在C:\software\Qt\sources\build\qtbase
  3. 确认Android SDK目录,一般在C:/Users/username/AppData/Local/Android/Sdk
  4. 确认Android NDK目录,一般在C:/Users/username/AppData/Local/Android/Sdk/ndk-bundle
  5. 确认python.exe目录,需要放在环境变量里
  6. 确认perl.exe目录,需要放在环境变量里
  7. 进入编译目录
cd C:\software\Qt\sources\build
  1. 编译配置,注意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. 开始编译,大概需要1小时
mingw32-make

遗留疑问

  1. 默认disable SSL支持,要enable SSL支持的话,需要在编译前配置参数中增加与openssl-linked有关的参数(不确定,参考https://blog.csdn.net/zhounixing/article/details/105519536 ),简单地尝试过几次后,未成功
  2. 无论是配置时使用-mp指定多核编译(参考https://zhuanlan.zhihu.com/p/394306561 )还是mingw32-make -jX 指定多核make,似乎都没效果,我6核12线程的设备,CPU使用率编译期间稳定在在10%~20%