Android
环境准备
- 使用QT自带的管理工具(Qt Maintenance)先下载Qt的Android环境并安装:
- 安装完成后Qt关于Android开辟的套件(Kit)大概会是有红色感叹号不能使用的;此时需要下载JDK、SDK并设置环境变量;
- 下载Java8的JDK:下载链接
- 大概需要甲骨文的账号,注册一个就好了;下载位置在网页中心部分,注意别下错了;
- 下载安卓的SDK:下载链接
- NDK可以后续自动下载,这里暂不需要手动下载,轻易下错版本;
安装和设置
注意:以下所有安装路径不要有中文!
- 安装JDK:
-
- 不停下一步就好了;
-
- 可以更改安装位置,开辟工具可选功能默认不要动;
- 安装进度条跑完之后会出现JRE的安装界面,直接和JDK安装到同一目录下就好:
-
- 设置系统环境变量:
- 新建一个系统变量,变量名填JAVA_HOME;变量值是刚刚安装的JDK的路径;
-
- 然后设置jar库的路径,同样新建一个系统变量;变量名填CLASSPATH;变量值填.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
-
- 然后依次点击确定;
- 设置用户环境变量(可选)
- 这里选择设置一下用户的环境变量,方便后面使用命令行不需要进目录;
-
- 把xxxxx\android-sdk-windows\platform-tools和xxxxx\android-sdk-windows\tools\bin新建到Path里;
- 方便后续使用adb和sdkmanager命令;
- 安装AndroidSDK;
- 解压到空目录,然后运行SDK Manager.exe
- 需要等进度条跑完后,只安装下面两个:
-
- 默认最前面的两个最新的安装就行;
- 安装完成后进入tools/bin/目录,在这里打开命令行工具,输入./sdkmanager.bat --help检察守理工具是否可用:
-
- 假如是CMD命令行,则进到相应的目录运行,例如我这里安装到D盘,则:
- d:
- cd xxxx复制你的链接xxxx\android-sdk-windows\tools\bin
- sdkmanager --help
- 假如提示没有sdkmanager则把下面内容拷贝到bin目录新建的记事本文件中,然后改名为sdkmanager.bat,然后重复之前步骤运行;
- @if "%DEBUG%" == "" @echo off
- @rem ##########################################################################
- @rem
- @rem sdkmanager startup script for Windows
- @rem
- @rem ##########################################################################
- @rem Set local scope for the variables with windows NT shell
- if "%OS%"=="Windows_NT" setlocal
- set DIRNAME=%~dp0
- if "%DIRNAME%" == "" set DIRNAME=.
- set APP_BASE_NAME=%~n0
- set APP_HOME=%DIRNAME%..
- @rem Add default JVM options here. You can also use JAVA_OPTS and SDKMANAGER_OPTS to pass JVM options to this script.
- set DEFAULT_JVM_OPTS="-Dcom.android.sdklib.toolsdir=%~dp0\.."
- @rem Find java.exe
- if defined JAVA_HOME goto findJavaFromJavaHome
- set JAVA_EXE=java.exe
- %JAVA_EXE% -version >NUL 2>&1
- if "%ERRORLEVEL%" == "0" goto init
- echo.
- echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
- echo.
- echo Please set the JAVA_HOME variable in your environment to match the
- echo location of your Java installation.
- goto fail
- :findJavaFromJavaHome
- set JAVA_HOME=%JAVA_HOME:"=%
- set JAVA_EXE=%JAVA_HOME%/bin/java.exe
- if exist "%JAVA_EXE%" goto init
- echo.
- echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
- echo.
- echo Please set the JAVA_HOME variable in your environment to match the
- echo location of your Java installation.
- goto fail
- :init
- @rem Get command-line arguments, handling Windows variants
- if not "%OS%" == "Windows_NT" goto win9xME_args
- if "%@eval[2+2]" == "4" goto 4NT_args
- :win9xME_args
- @rem Slurp the command line arguments.
- set CMD_LINE_ARGS=
- set _SKIP=2
- :win9xME_args_slurp
- if "x%~1" == "x" goto execute
- set CMD_LINE_ARGS=%*
- goto execute
- :4NT_args
- @rem Get arguments from the 4NT Shell from JP Software
- set CMD_LINE_ARGS=%$
- :execute
- @rem Setup the command line
- set CLASSPATH=%APP_HOME%\lib\sdklib-25.3.0-dev.jar;%APP_HOME%\lib\layoutlib-api-25.3.0-dev.jar;%APP_HOME%\lib\dvlib-25.3.0-dev.jar;%APP_HOME%\lib\repository-25.3.0-dev.jar;%APP_HOME%\lib\gson-2.2.4.jar;%APP_HOME%\lib\commons-compress-1.8.1.jar;%APP_HOME%\lib\httpclient-4.1.1.jar;%APP_HOME%\lib\httpmime-4.1.jar;%APP_HOME%\lib\common-25.3.0-dev.jar;%APP_HOME%\lib\kxml2-2.3.0.jar;%APP_HOME%\lib\annotations-25.3.0-dev.jar;%APP_HOME%\lib\annotations-12.0.jar;%APP_HOME%\lib\jimfs-1.1.jar;%APP_HOME%\lib\httpcore-4.1.jar;%APP_HOME%\lib\commons-logging-1.1.1.jar;%APP_HOME%\lib\commons-codec-1.4.jar;%APP_HOME%\lib\guava-18.0.jar
- @rem Execute sdkmanager
- "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %SDKMANAGER_OPTS% -classpath "%CLASSPATH%" com.android.sdklib.tool.SdkManagerCli %CMD_LINE_ARGS%
- :end
- @rem End local scope for the variables with windows NT shell
- if "%ERRORLEVEL%"=="0" goto mainEnd
- :fail
- rem Set variable SDKMANAGER_EXIT_CONSOLE if you need the _script_ return code instead of
- rem the _cmd.exe /c_ return code!
- if not "" == "%SDKMANAGER_EXIT_CONSOLE%" exit 1
- exit /b 1
- :mainEnd
- if "%OS%"=="Windows_NT" endlocal
- :omega
复制代码- 假如有对应的Usage,则忽略这步;
- 完成上面所有步骤后,依次运行下面的命令。(需要按顺序执行,假如需要同意协议则输入y,注意目录需要换成本身所安装的SDK的目录,例如"D:\xxxxx\xxxxx\android-sdk-windows")这里的例子是用CMD输入的:
- sdkmanager "build-tools;30.0.2" --sdk_root="你安装的sdkmanager的目录"
- sdkmanager "ndk;21.3.6528147" --sdk_root="你安装的sdkmanager的目录"
- sdkmanager "platform-tools" --sdk_root="你安装的sdkmanager的目录"
- sdkmanager "platforms;android-30" --sdk_root="你安装的sdkmanager的目录"
- sdkmanager "cmdline-tools;latest" --sdk_root="你安装的sdkmanager的目录"
- sdkmanager "extras;google;usb_driver" --sdk_root="你安装的sdkmanager的目录"
- 安装完成就可以了(忽略警告,假如出现done就代表OK)
- 增补分析:可以用sdkmanager --list命令看是否上述包都装好了,例如:
-
设置QtCreator
- 到QtCreator的首选项中去设置刚刚装上的JDK和SDK的路径:
-
- 然后检测一下所需SDK正常情况,第一次设置点击右边的SetUpSDK会弹出:
-
- 设置一下即可,自动下载所缺失的包;
- 设置完成后,假如出现下面的错误:
-
- 则是刚刚安装的Android SDK Command-line Tools版本太高了,重新使用下面链接下载并替换android-sdk-windows/cmdline-tools/latest/文件夹里所有的内容即可:
- "sdk_tools_url": {
- "linux": "https://dl.google.com/android/repository/commandlinetools-linux-9123335_latest.zip",
- "linux_sha256": "0bebf59339eaa534f4217f8aa0972d14dc49e7207be225511073c661ae01da0a",
- "windows": "https://dl.google.com/android/repository/commandlinetools-win-9123335_latest.zip",
- "windows_sha256": "8a90e6a3deb2fa13229b2e335efd07687dcc8a55a3c544da9f40b41404993e7d",
- "mac": "https://dl.google.com/android/repository/commandlinetools-mac-9123335_latest.zip",
- "mac_sha256": "d0192807f7e1cd4a001d13bb1e5904fc287b691211648877258aa44d1fa88275"
- }
复制代码
- 例如这里是Windows平台则使用:https://dl.google.com/android/repository/commandlinetools-win-9123335_latest.zip
- 大概需要科学上网可以下载快一点;
- 大概使用自带的SDKManager下载:
-
- 所有设置好的状态:
- 然后下载OpenSSL,这里不消点Download OpenSSL,直接去网站下好就行(实测设置了git,科学上网下几次也没成),下载网址:
- KDAB/android_openssl: OpenSSL scripts and bins for Android (useful for Qt on Android apps) (github.com)
- 下载完成后也在SDK安装目录中创建文件夹openSSL,然后把解压的内容拷贝进去,末了在Qt Creator中设置位置(上图有);
- 末了可以看到Kit构建套中关于安卓的已经正常了:
现实运行
- 选择安卓的构建套件新建一个工程;
- 第一次构建会自动下载gradle构建工具,发起使用科学上网大概直接下好对应版本导入到编译报错提示的目录中;
- 网址:Gradle Distributions
- 目录:C:\Users\XXXXX\.gradle\wrapper\dists\gradle-5.6.4-bin\xxxxxxxxxxxxx(这里是一长串字符串)\
- 然后直接把下好的压缩包移动到这个文件夹中,不消解压,然后重新编译就好了;
- 版本有大概差别,注意对应,比如我用到是gradle-8.3-bin和gradle-5.6.4-bin;
- 编译时Qt会自动选择Android SDK中已经安装的最新的API版本;
用USB线连接实体安卓机
- 刚刚安装的extras;google;usb_driver就是为了使用USB连接安卓机;首先在安卓机中打开开辟者选项(自行搜刮差别机型怎样打开),答应USB调试、USB安装应用等给一系列权限;
- 大概其他版本QtCreator会有提示连入的装备,但是打开装备检察当前的装备都是可以表现的,例如:
- 然后在构建套件中选择运行的装备,这里选择实体安卓机QtCreator就会把编译好的app通过USB安装到安卓机中运行,日记、Debug啥的可以Creator中检察的;
-
- 对与差别版本(我的是12.0.2)的Creator也可以在下面切换运行的装备:
-
- 然后编译运行,就能直接在实体安卓机中测试了;
用模拟器
- 这里使用夜神模拟器:夜神安卓模拟器,大概其他带有adb功能的模拟器都行,有的模拟器需要打开ADB调试功能;
- 安装完成后,还需要举行一些设定,否则 qtcreator 无法精确连接到装备(老版本 qtcreator 是可以自动连接,但更新到 10.0.2 之后的版本,需要手动连接)
- 首先检查安卓SDK的adb版本和模拟器的adb是不是同等的:
- 到刚刚安装的SDK目录xxxxx\android-sdk-windows\platform-tools中用cmd大概power shell打开(具体怎么跳转目录和运行就不说了,上面说过):
- .\adb.exe --version
-
- 然后进入模拟器安装目录xxxxx\Nox\bin,运行:
- .\nox_adb.exe version:
- 大概会发现差别等的情况,然后把模拟器中的nox_adb.exe复制备份一下nox_adb_backup.exe;
- 把SDK中的adb.exe拷贝过来更名为nox_adb.exe,其实就是让模拟器的adb和SDK的同等;
- 下图是完成后的:
-
- 然后连接到模拟器:
- 先打开模拟器,差别的模拟器大概用的差别的序列号(IP)和端口,这点可以网上查到,例如夜神模拟器的就是127.0.0.1:62001;
- 同样需要在模拟器目录打开命令行输入:
- .\nox_adb.exe connect 127.0.0.1:62001
- 执行完后再输入:
- adb devices
- 这里的adb是之前配的全局环境变量的,也就是SDK的adb.exe,假如没设置环境变量也可以执行对应目录的adb;
- 然后打开Qt Creator(这里用的版本:12.0.2):
- 新建一个项如今的准备(Qt Kits 设置)
- 在用Qt新建一个安卓项如今,需要知道所用的模拟器是什么CPU架构的:
- 使用adb shell getprop ro.product.cpu.abi命令检察:
-
-
- 关于这个请检察:Android装备的Architecture架构:arm64-v8a armeabi-v7a
- 模拟器大多数都是x86架构的,以是我这里在Qt的套件这里克隆一个专门的x86/x86_64构建套件,其实使用自带检测的也可以:
-
- 然后新建一个项目,Qt Quick大概GUI任意一个都行;
- 注意:这里的ABIs肯定要对应上CPU架构,不然会报错!
-
- 全选也可以,大概单独选对应的也可以,假如全选则编译出来的app因兼容问题会比较大;
- 默认的构建套件大概会选择arm64-v8a这个最新的,假如想在模拟器中编译运行则会报错:
-
- 编译运行
- 然后编译运行,Qt就会自动把你的应用装到模拟器中了;
- 忽略错误并运行:
-
-
参考连接:
- 【安卓】Windows下Qt for Android开辟环境搭建 博客园 (cnblogs.com)
- 【Qt】最具体教程,怎样从零设置Qt Android安卓环境
- Qt | Qt For Android、Qt5.14.2安卓开辟环境搭建具体步骤
- 纪录:Qt Creator 10设置安卓开辟环境
- QT5.15.2搭建Android编译环境及使用模拟器调试(全)
- Qt 5.15.1 Android开辟环境搭建 - 知乎 (zhihu.com)
- Android装备的Architecture架构:arm64-v8a armeabi-v7a - 知乎 (zhihu.com)
- 使用adb connect命令连接多个Android装备(WIFI方式)-CSDN博客
Qt 5.15.1 Android开辟环境搭建 - 知乎 (zhihu.com)
- Android装备的Architecture架构:arm64-v8a armeabi-v7a - 知乎 (zhihu.com)
- 使用adb connect命令连接多个Android装备(WIFI方式)-CSDN博客
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |