Win10 + Qt Creator + Android:如何build一个项目

本文创建于2019年5月。

Qt在更新,Android 开发的各种kits在更新,一切都在更新,于是不可避免地,很多资料都过时了。比如SDK不再提供GUI服务,只提供命令行模式;又比如NDK R19C版本似乎不支持C/C++ Clang……博主尝试用Qt Creator在安卓虚拟机上编译运行项目,遇到了很多问题,因而在此依此记录,如果有人碰到类似的问题,可以参考。

相关环境

NDK

update-----

如果使用最新版的compiler,还是安装19c的版本(最新版)吧……博主手贱更新了Qt creator和编译器和组件,build时发现NDK需要改为最新版,否则编译时会提示在目标路径找不到可用的编译器。更换NDK后记得更新环境变量和Qt creator里的相关路径,很重要的一点是要手动qmake,否则build时一直使用旧的路径,肯定是error…… (被这问题折磨了不知道多久,吐了)

没有用最新版本,最新版本反馈bug较多。下载于官网归档页(https://developer.android.com/ndk/downloads/older_releases.html)

Android NDK,修订版 17c(2018 年 6 月)

平台软件包大小(字节)SHA1 校验和
Windows 32 位android-ndk-r17c-windows-x86.zip6083583105bb25bf13fa494ee6c3433474c7aa90009f9f6a9
Windows 64 位android-ndk-r17c-windows-x86_64.zip6506265013e3b8d1650f9d297d130be2b342db956003f5992

SDK:

最新版本,下载于官网(https://developer.android.com/studio

PlatformSDK tools packageSizeSHA-256 checksum
Windowssdk-tools-windows-4333796.zip148 MB7e81d69c303e47a4f0e748a6352d85cd0c8fd90a5a95ae4e076b5e5f960d3c7a

JDK:

选择了JDK8 8u211。推荐JDK8的版本,官方文档显示:“Note: Android SDK Tools have issues with JDK versions later than 8.”

博主一开始就因为下载了JDK12而遇到状况。

Qt:

Qt 5.12.1

Qt Creator 4.8.1

在安装时,需要选择Qt 5.10下面的一些分支,比如Qt Android,这样才支持安卓开发的功能。如果忘记安装组件,可以在maintenance tool里选择安装。

有用的提示

虽然官方不提供SDK,AVD的GUI工具了,但是Qt creator有提供。在Options>Devices>Android的下方,可以看到AVD MANAGER和SDK MANAGER。在上方设置好JDK NDK SDK的路径之后,下面的两个工具就可以开始使用了。可以在SDK Manager里方便地安装package。

SDK需要安装的有:(参照https://doc.qt.io/qtcreator/creator-developing-android.html

  • Platform tools
  • Build tools
  • At least one SDK platform

这里根据需要选择合适的平台。安装前可了解一下各个版本的区别,以及system image的选用。

因为我的Kit里采用的CPU architecture是armeabi-v7a, 我安装了Android 24即7.0版本的SDK Platform。

如果想用命令行完成package的安装,可以参照这篇文章:https://medium.com/@dalenguyen/working-with-android-emulator-through-command-line-b3a96965566f

如果要建立自己的安卓虚拟机,还需要下载对应版本的system image,才能新建。Android Emulator这个package也需要,否则无法运行虚拟机。也可以使用真实的安卓设备进行调试,需要安装USB debugging的package,参见http://www.qter.org/forum.php?mod=viewthread&tid=20679

我在建立安卓虚拟机时遇到很多issue,有关于版本的,各式各样的……而且,运行非常非常非常慢。所以推荐用真机调试。

遇到的问题

1. “Cannot run target compiler 'C:\AndroidDev\android-ndk\android-ndk-r19c/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin/arm-linux-androideabi-g++'. Maybe you forgot to setup the environment?”

查阅路径,发现不存在g++这个文件。有搜到讨论说最新版本NDK不支持GCC编译器。

https://forum.qt.io/topic/94858/qt-android-problem/6

删除了R19C版本,下载了R17C版本。

不过在Qt Creator的Options> Device> Android重新设置路径之后, Options>Kit界面显示了两个Android kit,因为重名而显示警告,删除了19c的NDK文件依旧如此……我重启试试。为什么已经删除的文件还能被Qt 检测为一个Kit……没办法,我只好改了设备名称来避免warning。

compiler和debugger都是有默认选项的:

目前我的Device状态是这样:

 

遇到了新的问题。

2. 

:-1: warning: "C:\AndroidDev\android-ndk\android-ndk-r17c\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64\bin\arm-linux-androideabi-gcc" is used by qmake, but "C:\AndroidDev\android-ndk\android-ndk-r17c\toolchains\llvm\prebuilt\windows-x86_64\bin\clang.exe" is configured in the kit.

Please update your kit (Android for armeabi-v7a (Clang Qt 5.10.0 for Android armv7)) or choose a mkspec for qmake that matches your target environment better.

 

:-1: warning: "C:\AndroidDev\android-ndk\android-ndk-r17c\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64\bin\arm-linux-androideabi-g++" is used by qmake, but "C:\AndroidDev\android-ndk\android-ndk-r17c\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++.exe" is configured in the kit.

Please update your kit (Android for armeabi-v7a (Clang Qt 5.10.0 for Android armv7)) or choose a mkspec for qmake that matches your target environment better.

不过仅仅是警告,也不会影响build。这时,build成功了,不过run有了新的问题:

Emulator Tool is Missing...

OK之后意外地还在run。run的结果如下:

Warning: Android platform 'android-28' does not exist in SDK.

Error while building/deploying project qmlTest (kit: Android for armeabi-v7a (Clang Qt 5.10.0 for Android armv7))

When executing step "Deploy to Android device"

之前安装的package比较混乱,安装了android-24的system image,新建了对应的AVD。不过package里还同时装了android-28。再回到qt creator>options>devices>android>sdkmanager,查看自己的安装情况,进行一些更改。

我自己的安卓手机是android-26 即8.0版本……于是卸载9.0的SDK Platform和system image,安装8.0对应的。

原本对system image也不太了解,这里有说:http://www.voidcn.com/article/p-dlfggbbi-btw.html

于是选择下载Intel 开头的,64位的。system-images;android-26;default;x86_64

关于CPU Architecture,也就是ABI相关……这帖子里写得挺清楚:https://xamarinhelp.com/choosing-cpu-architecture-sdk-version/

最后让我决定好版本问题的,还是KIT里的armeabi-v7a,我下载的system image得和它保持一致,否则选择虚拟机时显示不兼容,所以选择了Android 7.0里的。build成功,然后run,等了有五分钟,模拟器才终于开机,又等了几分钟,程序自动显示出来了,一切正常。

如果真机调试,很快程序就跑起来了。所以还是推荐真机调试。

听说选择x86的CPU architecture模拟器会快很多,没尝试过,不清楚方法。

========update=====

Intel x86的CPU架构配上HAXM,确实模拟器启动超快,好评,推荐。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值