windows下基于QT5.11.2的Android开发环境搭建

参考文档:

https://blog.csdn.net/qq_28643619/article/details/86589252 用这个教程里面对于NDK的版本没有仔细说明,只说了10是不行的,用了9.但我现在官方已经找不到9这个版本了。导致我第一次搞不知道因为这里的NDK版本和Qt版本没有一致,一直出不来QV Version。搞了我两天时间。

https://blog.csdn.net/corner_kew/article/details/82881784 这个里面的Qt是5.11和我的一样,用的NDK版本是我打算模仿的。希望可以成功。结果果然成功了,这个由于Qt版本和NDK版本不一致导致的问题搞了我整整两天时间。卧槽。。。。。。

背景介绍

B1 qmake 

qmake -project (用于创建.pro文件,将所有的cpp文件编译成一个与平台无关的pro工程文件)

qmake(将所有的cpp文件编译成两个文件):

      一个makefile文件,用于linux下用make调用gcc/g++编译成Linux下的可执行程序;

      一个pro文件,同上。

参考:Qt编程中qmake的使用详解

 

开发环境搭建步骤:

1 JDK   Java SE Development kit(JDK)     java开发工具包

JDK全称Java SE Development kit(JDK),即java标准版开发包,是Oracle提供的一套用于开发java应用程序的开发包,它提供编译,运行java程序所需要的各种工具和资源,包括java编译器,java运行时环境,以及常用的java类库等。

 JRE   Java Runtime Environment(JRE) Java运行环境

Java运行环境,它的全称Java Runtime Environment(JRE) ,因此也被称为JRE,它是运行java的必需条件。

JVM  Java Virtual Machine

Java虚拟机,JRE包含JVM。JVM是运行java程序的核心虚拟机,还需要其他的类加载器,字节码校验器,以及大量的基础类库。JRM除了包含JVM之外,还包含运行java程序的其它环境支持。安装配置环境变量成功的标志是在cmd命令行输入 java 和 javac 都有输出

Java JDK JRE下载与环境变量配置,详细参考菜鸟教程

JAVA_HOME :C:\Program Files\Java\jdk1.8.0_144

CLASSPATH:  .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;

注意上面CLASSPATH变量第一个字符是点.

Path:添加

%JAVA_HOME%\bin
%JAVA_HOME%\jre\bin

安装成功的标志:

java -version

javac -version

 

sdk与ndk的区别

  android sdk (Android Software Development Kit, 即android软件开发工具包)可以说只要你使用java去开发Android这个东西就必须用到。他包含了SDK Manager 和 AVD Manage,对于android系统的一些开发版本的管理以及模拟器管理。它只能运行纯java程序,有了它模拟器才可以使用。

  而ndk (Native Development Kit)跟sdk差不多的是它也是一个开发工具包。用它开发c/c++是很方便的。他有一个强大的编译集合。Java调C、C++(jni接口),是一些java如何调C的代码。它会把C代码编译成一个.SO的动态库,通过jni接口用java代码去调用它,有了它我们可以直接在android代码中去添加C代码。

2 andriod sdk

开发安卓专属的开发工具包。也是Java的语言,但是Java访问的是一个安装手机系统的屏幕,配置文件,内存,等等。

安装andriod sdk有两种方式:andriod studio,或者单独的installer.exe

start Andriod sdk manager

该下载安装的都替你勾选了,点击install 17 packages 

选择accept,install

时间有点久,耐心等待。

配置环境变量:参考https://www.cnblogs.com/gufengchen/p/11038029.html

首先,新建一个系统环境变量,变量名为ANDROID_SDK_HOME,变量值为你的SDK安装路径,这里我的安装路径为D:\android\android-sdk,如图所示:

然后就是在系统的Path变量后,追加:

%ANDROID_SDK_HOME%\platform-tools

%ANDROID_SDK_HOME%\tools

如图所示:

验证的方法就是命令行输入adb有输出:

3 Andriod_NDK

NDK必须和对应的QT版本保持兼容。确定,我用的最新的NDK20无法和QT的5.11.2兼容!!!!!

就是下面的这个问题搞了我两天整的时间:

can not create kits for all architectures 

qt versions are missing for the following architectures:arm-linux-android-elf-64bit, x86-linux-android-elf-64bit

其实这个问题并不是问题,不碍事,不用关心

重新下载了NDK版本r12b之后,表面看没什么变化,其实QT VERSION已经正常了

 

但是我想要的东西出来了,Android GCC编译器出来了

 

构建套件里有Andriod for 就说明QT可以开发安卓程序了

4 生成APK

Qt Creator 》文件》新建文件或项目》Application》选一个支持Andriod平台的就行

选择项目名称和路径

选择编译的目标平台

 

编译的时候需要Qt Creator用管理员权限编译。不然报错:

Could not initialize analytics, treating as opt-out.

java.io.FileNotFoundException: C:\Program Files (x86)\Android\android-sdk\analytics.settings (鎷掔粷璁块棶銆

 选择编译版本

点击“锤子”构建项目

第一次生成会很慢,因为要下载Gradle.

生成完了之后拷贝到手机上安装说CPU版本不对

原因是没有签名https://blog.csdn.net/qq_37603131/article/details/89515730

加了签名重新构建安装打开

5 Android项目中的armeabi,armeabi-v7a和x86

这三者都表示的是CPU类型,早期的Android系统几乎只支持ARMv5的CPU架构,但是现在已经有7种了。ARMv5,ARMv7 (从2010年起),x86 (从2011年起),MIPS (从2012年起),ARMv8,MIPS64和x86_64 (从2014年起),每一种都关联着一个相应的ABI(应用程序二进制接口(ApplicationBinary Interface)定义了二进制文件(尤其是.so文件)如何运行在相应的系统平台上,从使用的指令集,内存对齐到可用的系统函数库)。Android现在的主流CPU是armeabi-v7a。armeabi-v7a是针对有浮点运算或高级扩展功能的ARMv7 CPU。 参考:https://www.jianshu.com/p/ed9c3fea3584
例如:Android for armeabi-v7a (GCC 4.9, Qt 5.11.2 for Android ARMv7) ,可以看出来,这个是从C++代码到机器指令的一个工具。因为GCC Qt都是C++的编译器。

5.1  Android设备如何加载.so文件

   当一个应用安装在设备上,只有该设备支持的CPU架构对应的.so文件会被安装。不同CPU架构的Android手机加载时会在libs下找自己对应的目录(生成apk文件的时候会把各个cup架构下的so文件一起打包走),从对应的目录下寻找需要的.so文件;如果没有对应的目录,就会去armeabi下去寻找,如果已经有对应的目录,但是如果没有找到对应的.so文件,也不会去armeabi下去寻找了。
   以x86设备为例,x86设备会在项目中的 libs文件夹寻找是否含有x86文件夹,如果含有x86文件夹,则默认为该项目有x86对应的so可运行文件,只有x86文件夹而文件夹下没有so,程序运行也是会出现findlibrary returned null的错误的;如果工程本身不含有x86文件夹,则会寻找armeabi或者armeabi-v7a文件夹,兼容运行。以armeabi-v7a设备为例,该Android设备当然优先寻找libs目录下的armeabi-v7a文件夹,同样,如果只有armeabi-v7a文件夹而没有 so也是会报错的;如果找不到armeabi-v7a文件夹,则寻找armeabi文件夹,兼容运行该文件夹下的so,但是不能兼容运行x86的so。所以项目中如果只含有x86的so,在armeabi和armeabi-v7a也是无法运行的。以上就是不同CPU架构运行时加载so的策略。

5.3 适配不同的平台

   目前主流的Android设备是armeabi-v7a架构的,然后就是x86和armeabi了。如果同时包含了 armeabi,armeabi-v7a和x86,所有设备都可以运行,程序在运行的时候去加载不同平台对应的so,这是较为完美的一种解决方案,但是同时也会导致包变大。
   armeabi-v7a是可以兼容armeabi的,而v7a的CPU支持硬件浮点运算,目前绝大对数设备已经是armeabi-v7a了,所以为了性能上的更优,就不要为了兼容放到armeabi下了。x86也是可以兼容armeabi平台运行的,另外需要指出的是,打出包的x86的so,总会比armeabi平台的体积更小,对于性能有洁癖的童鞋们,还是建议在打包so的时候支持x86。

 

6 模拟器调试

报错:cannot create a AVD for ABI armeabi-v7a 

  1. 当搭建qt 安卓环境时候出现AVD报错时,需要安装android studio 并且打开AVD,就OK
  2. 用jdk8

安装 android-studio-bundle-162.4069837-windows.exe 

参考:https://blog.csdn.net/hanjuefu5827/article/details/98345358

 

 

QT 与 VS

这里说一下QT与VS的关系

1 QT Creator和VS都是IDE,但是VS只能开发运行在Windows上的程序;QT可以开发出能运行在各个平台的程序。

2 QT的工程用pro文件,是跨平台的,VS的 vcxproj工程是只能编译Windows上运行的exe

3 Qt同时也是一个类库。或者说同时还是一个界面库。如果你用VS C++开发Windows应用程序,想使用Qt的界面库和其他类,引用进来需要一个Qt Visual Studio Tools工具。

 

 

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C++程序员Carea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值