当前位置:   article > 正文

如何在Qt上进行安卓开发(实体安卓机和模拟器)_qt安卓开发

qt安卓开发

Android

环境准备

  1. 使用QT自带的管理工具(Qt Maintenance)先下载Qt的Android环境并安装:

    • 在这里插入图片描述
  2. 安装完成后Qt关于Android开发的套件(Kit)可能会是有红色感叹号不能使用的;此时需要下载JDK、SDK并配置环境变量;

  3. 下载Java8的JDK:下载链接

    • 可能需要甲骨文的账号,注册一个就好了;下载位置在网页中间部分,注意别下错了;
    • 在这里插入图片描述
  4. 下载安卓的SDK:下载链接

    • 在这里插入图片描述
  5. NDK可以后续自动下载,这里暂不需要手动下载,容易下错版本;

    • 在这里插入图片描述

安装和配置

注意:以下所有安装路径不要有中文!

  1. 安装JDK:

    • 在这里插入图片描述

    • 一直下一步就好了;

    • 在这里插入图片描述

    • 可以更改安装位置,开发工具可选功能默认不要动;

    • 安装进度条跑完之后会出现JRE的安装界面,直接和JDK安装到同一目录下就好:

    • 在这里插入图片描述

  2. 配置系统环境变量:

    • 新建一个系统变量,变量名填JAVA_HOME;变量值是刚刚安装的JDK的路径;

    • 在这里插入图片描述

    • 然后配置jar库的路径,同样新建一个系统变量;变量名填CLASSPATH;变量值填.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar

    • 在这里插入图片描述

    • 然后依次点击确定;

  3. 配置用户环境变量(可选)

    • 这里选择配置一下用户的环境变量,方便后面使用命令行不需要进目录;

    • 在这里插入图片描述

    • xxxxx\android-sdk-windows\platform-toolsxxxxx\android-sdk-windows\tools\bin新建到Path里;

    • 方便后续使用adbsdkmanager命令;

  4. 安装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
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
      • 36
      • 37
      • 38
      • 39
      • 40
      • 41
      • 42
      • 43
      • 44
      • 45
      • 46
      • 47
      • 48
      • 49
      • 50
      • 51
      • 52
      • 53
      • 54
      • 55
      • 56
      • 57
      • 58
      • 59
      • 60
      • 61
      • 62
      • 63
      • 64
      • 65
      • 66
      • 67
      • 68
      • 69
      • 70
      • 71
      • 72
      • 73
      • 74
      • 75
      • 76
      • 77
      • 78
      • 79
      • 80
      • 81
      • 82
      • 83
      • 84
      • 85
      • 86
      • 87
      • 88
      • 89
      • 90
    • 如果有对应的Usage,则忽略这步;

    • 完成上面所有步骤后,依次运行下面的命令。(需要按顺序执行,如果需要同意协议则输入y,注意目录需要换成自己所安装的SDK的目录,例如"D:\xxxxx\xxxxx\android-sdk-windows")这里的例子是用CMD输入的:

      1. sdkmanager "build-tools;30.0.2" --sdk_root="你安装的sdkmanager的目录"
      2. sdkmanager "ndk;21.3.6528147" --sdk_root="你安装的sdkmanager的目录"
      3. sdkmanager "platform-tools" --sdk_root="你安装的sdkmanager的目录"
      4. sdkmanager "platforms;android-30" --sdk_root="你安装的sdkmanager的目录"
      5. sdkmanager "cmdline-tools;latest" --sdk_root="你安装的sdkmanager的目录"
      6. sdkmanager "extras;google;usb_driver" --sdk_root="你安装的sdkmanager的目录"
    • 安装完成就可以了(忽略警告,如果出现done就代表OK)

    • 补充说明:可以用sdkmanager --list命令看是否上述包都装好了,例如:

    • 在这里插入图片描述

配置QtCreator

  1. 到QtCreator的首选项中去设置刚刚装上的JDK和SDK的路径:

    • 然后检测一下所需SDK正常情况,第一次设置点击右边的SetUpSDK会弹出:

    • 配置一下即可,自动下载所缺失的包;

  2. 配置完成后,如果出现下面的错误:

    • 则是刚刚安装的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"
        }
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
    • 例如这里是Windows平台则使用:https://dl.google.com/android/repository/commandlinetools-win-9123335_latest.zip

    • 可能需要科学上网可以下载快一点;

    • 或者使用自带的SDKManager下载:

  3. 所有配置好的状态:

  4. 然后下载OpenSSL,这里不用点Download OpenSSL,直接去网站下好就行(实测配置了git,科学上网下几次也没成),下载网址:

  5. 下载完成后也在SDK安装目录中创建文件夹openSSL,然后把解压的内容拷贝进去,最后在Qt Creator中设置位置(上图有);

  6. 最后可以看到Kit构建套中关于安卓的已经正常了:

实际运行

  • 选择安卓的构建套件新建一个工程;
  • 第一次构建会自动下载gradle构建工具,建议使用科学上网或者直接下好对应版本导入到编译报错提示的目录中;
    • 网址:Gradle Distributions
    • 目录:C:\Users\XXXXX\.gradle\wrapper\dists\gradle-5.6.4-bin\xxxxxxxxxxxxx(这里是一长串字符串)\
    • 然后直接把下好的压缩包移动到这个文件夹中,不用解压,然后重新编译就好了;
    • 版本有可能不同,注意对应,比如我用到是gradle-8.3-bingradle-5.6.4-bin
  • 编译时Qt会自动选择Android SDK中已经安装的最新的API版本;
用USB线连接实体安卓机
  1. 刚刚安装的extras;google;usb_driver就是为了使用USB连接安卓机;首先在安卓机中打开开发者选项(自行搜索不同机型如何打开),允许USB调试USB安装应用等给一系列权限;

  2. 可能其他版本QtCreator会有提示连入的设备,但是打开设备查看当前的设备都是可以显示的,例如:

  3. 然后在构建套件中选择运行的设备,这里选择实体安卓机QtCreator就会把编译好的app通过USB安装到安卓机中运行,日志、Debug啥的可以Creator中查看的;

    • 对与不同版本(我的是12.0.2)的Creator也可以在下面切换运行的设备:

  4. 然后编译运行,就能直接在实体安卓机中测试了;

用模拟器
  1. 这里使用夜神模拟器:夜神安卓模拟器,或者其他带有adb功能的模拟器都行,有的模拟器需要打开ADB调试功能;

  2. 安装完成后,还需要进行一些设定,否则 qtcreator 无法正确连接到设备(老版本 qtcreator 是可以自动连接,但更新到 10.0.2 之后的版本,需要手动连接)

  3. 首先检查安卓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的一致;

    • 下图是完成后的:

  4. 然后连接到模拟器:

    • 先打开模拟器,不同的模拟器可能用的不同的序列号(IP)和端口,这点可以网上查到,例如夜神模拟器的就是127.0.0.1:62001
    • 同样需要在模拟器目录打开命令行输入:
    • .\nox_adb.exe connect 127.0.0.1:62001
    • 执行完后再输入:
    • adb devices
    • 这里的adb是之前配的全局环境变量的,也就是SDK的adb.exe,如果没配置环境变量也可以执行对应目录的adb;
  5. 然后打开Qt Creator(这里用的版本:12.0.2):

    • 可以看到和模拟器的安卓机是一致且可以使用的;

  6. 新建一个项目前的准备(Qt Kits 配置)

    • 在用Qt新建一个安卓项目前,需要知道所用的模拟器是什么CPU架构的:

    • 使用adb shell getprop ro.product.cpu.abi命令查看:

    • 关于这个请查看:Android设备的Architecture架构:arm64-v8a armeabi-v7a

    • 模拟器大多数都是x86架构的,所以我这里在Qt的套件这里克隆一个专门的x86/x86_64构建套件,其实使用自带检测的也可以:

  7. 然后新建一个项目,Qt Quick或者GUI任意一个都行;

    • 注意这里的ABIs一定要对应上CPU架构,不然会报错!

    • 全选也可以,或者单独选对应的也可以,如果全选则编译出来的app因兼容问题会比较大;

    • 默认的构建套件可能会选择arm64-v8a这个最新的,如果想在模拟器中编译运行则会报错:

  8. 编译运行

    • 然后编译运行,Qt就会自动把你的应用装到模拟器中了;

    • 忽略错误并运行:


参考连接:

Qt 5.15.1 Android开发环境搭建 - 知乎 (zhihu.com)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/873785
推荐阅读
相关标签
  

闽ICP备14008679号