本文描述如何在Windows下搭建Qt安卓开发环境,由于Qt维护的安卓开发环境和安卓开发环境在很大程度上不兼容,所以在选择Qt版本的时候需要注意:在JDK和Android SDK环境的选择上需要注意,否则QtCreator会检测不到正确/合适的Android开发环境。本文基于Qt5.14.2搭建Qt安卓开发环境,具体环境如下所示:
环境描述
- Windows 10 家庭中文版
- Qt 版本:5.14.2
因为Qt for Android的开发环境搭建有一些繁琐,还是一个不断试错爬坑的过程,文末附上了小生常使用的安卓开发环境完整包,关注『嵌入式小生』微信公众号,后台回复关键字『Qt安卓』,则可获取这个完整安装包,开箱后适当配置即可使用,配置方法详见最后一节。
还是附上图看看效果:
需要注意的是“选择组件”时,需选择上与安卓开发环境相关的组件。
JDK安装包的获取方法文末描述。以管理员方式运行安装包,将会弹出以下对话框:
备注:如果弹出以上界面后,点击“下一步”没反应了,这是由于Win10家庭[中文版],输入法干扰,将输入法切换到系统输入法,即可成功安装Java8
可以更改jdk安装路径(默认选择也可以)点击“下一步”,过会儿,则会弹出以下对话框安装jre:
同样选择安装路径后(这里与jdk安装到同一级目录中),点击下一步,则弹出如下对话框:
点击“关闭”,则完成JAVA_JDK8的安装了。
下载地址:https://www.androiddevtools.cn/
下载完成后,解压缩安装包,目录结构如下:
首先配置JAVA_HOME
变量,变量值为刚才的JDK安装目录。
然后配置CLASSPATH
变量,变量值为.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
。
网上很多要求下载ndk的,经小生测试,ndk可以在后续步骤中通过SDK自动下载,不需要手工下载,并且手工下载容易搞错版本号,这里推荐使用自动下载的方式。
进入上述Android SDK目录,打开SDK Manager.exe
。打开后需要等待一段时间后会弹出界面,等进度条走完,将其他所有√全部取消,只留下下图中的这一个,点击右下角Install,等待一会儿后提示完成,关闭这个界面。
如果没有办法出现以上Android SDK Manager,提供另外一种方法:进入android-sdk-window/tools目录下,打开android.bat文件,找到以下内容,设置java_exe
的值为Java.exe的路径(在安装完JDK后的bin目录中),如下图所示:
将java_exe
的值设置为Java.exe的路径,重新运行android.bat(鼠标双击即可),则会弹出安装界面,等进度条走完,将其他所有√全部取消,只留下Android SDK Tools
这项,点击右下角Install:
安装完成后,将如下图所示:
这时候重启系统。
进入android-sdk-window/tools/bin目录下,如下所示:
在Windows命令行,运行sdkmanager.bat
,则会出现以下内容:
则表示安装成功,接下来需要使用该批处理文件设置几个参数,同样在Windows命令行中依次输入以下几条命令(ANDROID_SDK_ROOT
表示实际安装位置,这里需要替换成实际的路径):
.\sdkmanager "build-tools;30.0.2" --sdk_root=<ANDROID_SDK_ROOT>
.\sdkmanager "ndk;21.3.6528147" --sdk_root=<ANDROID_SDK_ROOT>
.\sdkmanager "platform-tools" --sdk_root=<ANDROID_SDK_ROOT>
.\sdkmanager "platforms;android-30" --sdk_root=<ANDROID_SDK_ROOT>
.\sdkmanager "cmdline-tools;latest" --sdk_root=<ANDROID_SDK_ROOT>
.\sdkmanager "extras;google;usb_driver" --sdk_root=<ANDROID_SDK_ROOT>
此处,笔者的命令为:
.\sdkmanager "build-tools;30.0.2" --sdk_root=D:\ProgramFiles\Java\android-sdk-windows
.\sdkmanager "ndk;21.3.6528147" --sdk_root=D:\ProgramFiles\Java\android-sdk-windows
.\sdkmanager "platform-tools" --sdk_root=D:\ProgramFiles\Java\android-sdk-windows
.\sdkmanager "platforms;android-30" --sdk_root=D:\ProgramFiles\Java\android-sdk-windows
.\sdkmanager "cmdline-tools;latest" --sdk_root=D:\ProgramFiles\Java\android-sdk-windows
.\sdkmanager "extras;google;usb_driver" --sdk_root=D:\ProgramFiles\Java\android-sdk-windows
注:第一次安装会询问是否同意协议,如下图所示,输入
y
回车即可:
在输入命令安装几个JAVA开发包的时候,有另外几个包都特别大,安装很慢,需要耐心等待,我们可以通过任务管理器查看是否有网络流量,如果有,则说明安装正常进行。
当每一个包安装完成后,都会提示done,我们可以通过.\sdkmanager --list
查询是否安装成功。请检查上述包是否全部安装,例如笔者的输出如下图所示:
通过上述步骤,Qt for Android的Windows开发环境就搭建完成了,本小节运行一个Demo测试一下。
(3-1)创建一个新的测试工程后,选择编译构建套件
在该工程中,设计一个简单的项目:用QLabel
显示两行字:
(3-2)编译构建工程
点击Qt Creator左下角有一个像手机的符号,选择构建生成的版本,这里选择release
版本,然后点击编译构建按钮(类似于播放的按钮),接着就会弹出Select Android Device
的对话框:
此处,小生的构建目标是:生成一个Android上的apk包,然后将其复制到对应的安卓设备运行。所以此处,直接选择项目工程,右键单击,在弹出的菜单中选择“重新构建”选择,接着QtCreator会自动进行编译构建生成apk安装包了。
在首次编译构建过程中,会安装
gradle
,这个过程由QtCreator自动完成,我们只需要保证网络连接好即可!
当编译完成后,则会弹出类似的信息:
这时候,我们到生成目录下的android-build\build\outputs\apk\debug
目录中,则可以看到生成的apk包了,如下图所示:
然后将生成的apk安装包发送到手机设备上,安装后,即可启动运行!
构建个官方demo看看:
当我们在安装JDK和Android SDK后,在配置QtCreator的安卓开发环境时,总是显示:“Platfrom tools installed”失败
出现该问题的原因有两个:
(1)JDK版本过高,更换低版本即可。
(2)SDK文件夹中tools不全
还有常见的错误就是Android开发环境搭建好了,在编译构建时会仍然会出现无法编译通过的现象,出现这些问题的最终原因就是:Qt版本和JDK、Android SDK、NDK之间没有匹配,好在高版本的QtCreator中提供了自动安装Android开发环境的按钮:
但是仍然会出现各种各样的问题。
因此,小生特意将整个Qt for Android的开发环境打包,在VX公众号回复关键字『Qt安卓』,则可获取这个完整安装包,开箱后适当配置即可使用。下面奉上使用方法:
首先描述下安装包中的内容:
建议使用
Qt5.14.2
搭建Qt安卓开发环境。
【使用步骤】
将下载后的压缩包解压缩,将得到如下图所示的三个文件:
首先安装Qt5.14.2,安装完成后,用鼠标双击jdk-8u281-windows-x64.exe,将安装jdk,安装步骤详见上文第二小节。接着将android-sdk.zip解压缩。然后打开QtCreator,依次点击:工具->选项->设备->Android,会进入如下界面:
JDK location
这一项为安装好的jdk的路径:android-sdk
路径:android-sdk
路径下的ndk\21.3.6528147
目录路径:如果全部配置成功,最后提示信息如下:
接下来,就愉快的开始Qt安卓开发之旅了。
如果在编译构建官方demo时,出现以下类似的报错:
aidl.exe E 10-25 07:29:40 864900 864984 io_delegate.cpp:50] Failed to GetFullPathName(D:\releasetesting\514\Examples\Qt-5.14.0\gui\build-analogclock-Android_for_armeabi_v7a_arm64_v8a_x86_x86_64_Clang_Qt_5_14_0_for_Android-Debug\android-build\build\generated\aidl_source_output_dir\debug\compileDebugAidl\out\org\kde\necessitas\ministro\IMinistro.java)
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':compileDebugAidl'.
> 1 exception was raised by workers:
java.lang.RuntimeException: java.lang.RuntimeException: java.io.IOException: com.android.ide.common.process.ProcessException: Error while executing process D:\Android\Sdk\build-tools\28.0.3\aidl.exe with arguments {-pD:\Android\Sdk\platforms\android-29\framework.aidl -oD:\releasetesting\514\Examples\Qt-5.14.0\gui\build-analogclock-Android_for_armeabi_v7a_arm64_v8a_x86_x86_64_Clang_Qt_5_14_0_for_Android-Debug\android-build\build\generated\aidl_source_output_dir\debug\compileDebugAidl\out -ID:\releasetesting\514\Examples\Qt-5.14.0\gui\build-analogclock-Android_for_armeabi_v7a_arm64_v8a_x86_x86_64_Clang_Qt_5_14_0_for_Android-Debug\android-build\aidl -ID:\releasetesting\514\Examples\Qt-5.14.0\gui\build-analogclock-Android_for_armeabi_v7a_arm64_v8a_x86_x86_64_Clang_Qt_5_14_0_for_Android-Debug\android-build\src\debug\aidl -ID:\releasetesting\514\5.14.0\android\src\android\java\src -ID:\releasetesting\514\Examples\Qt-5.14.0\gui\build-analogclock-Android_for_armeabi_v7a_arm64_v8a_x86_x86_64_Clang_Qt_5_14_0_for_Android-Debug\android-build\src -dC:\Users\eskil\AppData\Local\Temp\aidl6920309767147390351.d D:\releasetesting\514\5.14.0\android\src\android\java\src\org\kde\necessitas\ministro\IMinistro.aidl}
解决方法:找到项目路径将其复制到一个新的短路径下编译构建即可解决。