开发环境:

  • OS,Microsoft Windows [Version 10.0.17134.523]
  • Qt,5.11.1
  • Qt Creator,4.6.2
  • JDK,1.8.0_181
  • Android SDK,26.1.1
  • NDK,18.1

 
 

起因

心血来潮,突然想产生用Qt编写Android程序,根据网上的教程,在Tools-Options-Devices-Android配置好JDK、Android SDK、NDK后:

 
 

均提示配置成功,但无法像教程一样,自动生成Android Kit,新建工程时,无法选择Android:

 
 

网上查找到的教程都是使用Qt Creator 3作为例子,于是猜测是Qt Creator版本的问题。

之后Google上找到一篇文章,有人在Qt Creator 4.6.2上安装成功了:

https://developernote.com/2018/05/setting-up-qt-creator-4-6-1-for-android-development-on-windows-10/

 
 

于是下载Qt Creator 4.6.2源码,分析下原因。

 
 

分析

初步分析后,定位到在保存设置的时候,会自动创建Android Kit:

 
 

进入AndroidConfigurations::updateAutomaticKitList()查看,找到关键代码:

自动生成的Android Kit使用的是自动检测的编译工具链,如果自动检测的编译工具链中找不到API匹配的编译工具链,则不会创建对应ABI的Android Kit。

那么可推测,成功的人应该能在NDK中自动检测到编译工具链,那么为什么我这里检测不到?回到刚刚保存配置的函数,发现有注册新编译工具链的函数,猜测该函数用于自动检测NDK中的编译工具链:

进入AndroidConfigurations::registerNewToolChains()查看,发现的是这样:

继续分析AndroidToolChainFactory::autodetectToolChainsForNdk(),发现只会捕获GCC编译器。

 
 

查看NDK的更新公告

https://developer.android.google.cn/ndk/downloads/revision_history

发现在r18b版本后,移除了GCC编译器,使用Clang编译器代替:

 
 

查看自己的NDK版本,为18.1,那么应该是这个问题了。并且网上的教程都是在2018年前发布的,版本低于r18,所有能够配置成功。不知道新版本的Qt Creator是否修复了这个bug。

 
 

总结

在NDK版本高于r18b时,移除了GCC编译器工具,使用了Clang编译器代替。Qt Creator 4.6.2版本只会检测GCC编译器,当找不到编译器后 ,Android Kit就不会自动创建。

Qt Create 4.6.2无法自动生成Android Kit的更多相关文章

  1. Android开发——自动生成Android屏幕适配的dimens.xml文件

    使用dimens.xml解决屏幕适配问题是Android官方解决方案,本文主要讲述了如何自动生成Android屏幕适配的dimens.xml,减少了工作量,在维护dimens.xml文件时更加省时省力 ...

  2. 不自动生成Android Dependencies的解决方式

    今天遇到的奇怪问题是网上下载的demo导入第三方包运行后Android: NoClassDefFoundError的错误,原因是第三方的jar包并没有打包进apk里,运行是肯定要出错的. 网上百度了N ...

  3. Flutter - 自动生成Android & iOS图标

    对于要发布的app来说,做图标是一个麻烦的事,你需要知道N个图标的分辨率,然后用PhotoShop一个个修改导出. PS好图标之后,按照各自的位置放进去. ********************** ...

  4. SpringBoot13 利用mybatis-plus自动生成entity、dao、service、controller

    1 环境配置 = 2 新建一个新的springboot项目 2.1 选择一些必要的依赖 web jpa mysql <?xml version="1.0" encoding= ...

  5. C++解析头文件-Qt自动生成信号声明

    目录 一.瞎白话 二.背景 三.思路分析 四.代码讲解 1.类图 2.内存结构声明 3.QtHeaderDescription 4.私有函数讲解 五.分析结果 六.下载 一.瞎白话 时间过的ZTMK, ...

  6. C++解析头文件-Qt自动生成信号定义

    目录 一.概述 二.实现思路 三.代码讲解 1.类图 2.QtCppDescription 3.测试 四.源代码 一.概述 上一篇文章C++解析头文件-Qt自动生成信号声明我们主要讲解了怎么去解析C+ ...

  7. Qt自动生成.rc文件并配置对应属性 程序图标 版本 描述等

    Qt项目配置文件pro里需要如下配置,进行qmake,build后会自动生成.rc文件,并将对应的信息写入文件中 VERSION = 1.0.0.1 RC_ICONS = "http.ico ...

  8. SQL Server镜像自动生成脚本

    SQL Server镜像自动生成脚本 镜像的搭建非常繁琐,花了一点时间写了这个脚本,方便大家搭建镜像 执行完这个镜像脚本之后,最好在每台机器都绑定一下hosts文件,不然的话,镜像可能会不work 1 ...

  9. 9.1.3 .net framework通过业务逻辑层自动生成WebApi的做法

    首先需要说明的是这是.net framework的一个组件,而不是针对.net core的.目前工作比较忙,因此.net core的转换正在编写过程中,有了实现会第一时间贴出来. 接下来进入正题.对于 ...

随机推荐

  1. asp.net mvc 反射应用

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  2. 九度OJ 1355:扑克牌顺子 (模拟)

    时间限制:2 秒 内存限制:32 兆 特殊判题:否 提交:1676 解决:484 题目描述: LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^). ...

  3. Linux安装Nginx使用负载均衡

    1.实验准备准备三台计算机 nginx1 192.168.13.121 作为nginx负载均衡器nginx2 192.168.13.24  web服务,提供一个页面        nginx3 192 ...

  4. Linux mariadb(Mysql)的主从复制架构

    mysql的主从复制架构,需要准备两台机器,并且可以通信,安装好2个mysql,保持版本一致性 mysql -v 查看数据库版本 1.准备主库的配置文件  /etc/my.cnf 写入开启主库的参数[ ...

  5. isinstance/issubclass/type的区别?

    type() 判断某个对象是否是该类创建的,只看一层,如果是继承类,也不会考虑继承类的类型.. Issubclass() 判断该类是否是另一个类的派生类,也就是子类,参数为类. isinstance( ...

  6. centos7 Authentication failure

    root@localhost ~]#su bash-4.2$ su Password: su: Authentication failure //这里切换的是系统用户,现在还不清楚为什么postgre ...

  7. ABAP内表数据做层次XML输出

      *&---------------------------------------------------------------------**& Report  Z_BARRY ...

  8. python微信库 --- itchat

    python实现微信接口——itchat模块 安装 pip install itchat 登录 itchat.auto_login() # 这种方法将会通过微信扫描二维码登录,但是这种登录的方式确实短 ...

  9. rewrite_static

    <?php class MyObject { public static $myStaticVar = 0; function myMethod() { self::$myStaticVar + ...

  10. ubuntu 安装 phpstorm

    phpstorm是用JAVA开发的,所以在安装之前需要先安装jdksudo apt-get install default-jdk从官网上下载phpstorm 的linux版本 http://www. ...