1. 关于权限设置,在早期的安卓版本,所有权限都写在全局配置文件AndroidManifest.xml中,这种叫安装时权限,就是安装的时候告诉安卓系统当前app需要哪些权限。大概从安卓6开始,部分权限需要动态申请,这种叫动态权限,这种申请到的权限也可以动态撤销,就是要求程序再次执行代码去向系统申请权限,比如拍照、存储读写等。也不是所有的权限都改成了动态申请,意味着兼容安卓6以上的系统你既要在AndroidManifest.xml中写上要求的权限,也要通过checkPermission申请你需要的权限。

  2. android studio 新建并生产jar包步骤。

  • 第一步:文件(File)-》新建(new)-》项目(new project)-》空白窗体(empty activity)。
  • 第二步:刚才新建好的项目鼠标右键新建(new)-》模块(new module)-》安卓库(android library)。
  • 说明:如果选择的不是安卓库(android library)而是java库(Java Library),则直接编译出来的就是jar文件,默认包名 com.example.lib.MyClass。推荐选择java库,编译后不用去一堆文件中找jar文件。
  • 第三步:写好库名字,根据项目需要选择好最低sdk版本-》完成。
  • 第四步:在刚才新建好的库项目mylibrary,依次找到子节点src/main/java/com.example.mylibrary上鼠标右键新建-》class类。切记是这个节点不是java节点或者其他节点。
  • 第五步:写好你的类方法函数等。
package com.example.mylibrary;
public class Test {public static int add(int a, int b) {return a + b;}
}
  • 第六步:选中库项目mylibrary,菜单执行编译(build)-》编译库(make module xxx)。
  • 第七步:此时在mylibrary/build目录下有outputs目录和intermediates目录,其中outputs/aar目录下是生成的Android库项目的二进制归档文件,包含所有资源,class以及res资源文件全部包含。有时候我们仅仅需要jar文件,只包含了class文件与清单文件 ,不包含资源文件,如图片等所有res中的文件。需要到intermediates/aar_main_jar/debug目录下,可以看到classes.jar,将这个拷贝出来使用即可。当然你也可以对刚才的aar文件用解压缩软件解压出来也能看到classes.jar,是同一个文件。
  • 其他:调用jar包非常简单,只需要将jar文件放在你的项目的libs目录下即可,对应的包名和函数一般jar包提供者会提供,没有提供的话,可以在android studio中新建空白项目,切换到project视图,找到libs目录,鼠标右键最下面作为包动态库添加到项目,导入包完成以后会自动在libs目录列出,双击刚刚导入的包然后就自动列出对应的类和函数。
  1. Qt安卓使用jar包步骤。
  • 第一步:将classes.jar放到android/libs目录下,为啥是这个目录?因为这是安卓的规则约定,这个目录就是放库文件,放在这个目录下的文件会自动打包编译到apk文件中。
  • 第二步:调用jar文件之前,前提是你知道jar文件中的函数详细信息,这个一般jar提供者会提供好手册,如果代码没有混肴的话,你可以在android studio中双击打开查阅具体的函数。
  • 第三步:如果jar文件中的函数简单,直接拿到结果不需要绕来绕去,可以直接写Qt类来调用;如果还是很复杂,建议再去新建java类处理完再交给Qt,当然也可以让jar的作者尽可能封装函数的时候就做好,尽量提供最简单的接口返回需要的数据。比如返回图片数据可以做成jar内部存储好图片,然后返回图片路径即可,不然有些数据转换也挺烦。
  • 第四步:编写最终的调用函数。
int AndroidJar::add(int a, int b)
{#ifdef Q_OS_ANDROIDconst char *className = "com/example/mylibrary/Test";jint result = QAndroidJniObject::callStaticMethod<jint>(className, "add", "(II)I", (jint)a, (jint)b);return result;
#endif
}
  1. Qt6中对安卓支持部分做了大的改动,目前还不完善,如果是不涉及到与java交互的纯Qt项目,可以正常移植,涉及到的暂时不建议移植到Qt6,等所有类完善了再说。
  • 移除了安卓插件androidextras,将其中部分功能类移到core模块中,不需要额外引入。
  • 类名发生了变化,比如QAndroidJniObject改成了QJniObject、QAndroidJniEnvironment改成了QJniEnvironment,可能是为了统一移动开发平台类,弱化安卓的影响。
  • 对应的安卓jdk要用jdk11而不是jdk1.8,Qt5.15两个都支持,建议就统一用jdk11。
  • 对应封装的java类包名去掉了qt5标识,org.qtproject.qt5.android.bindings.QtActivity改成了org.qtproject.qt.android.bindings.QtActivity、org.qtproject.qt5.android.bindings.QtApplication改成了org.qtproject.qt.android.bindings.QtApplication。
  • 对安卓最低sdk有要求,所以建议在配置AndroidManifest.xml文件的时候不要带上最低版本要求。
  • 对AndroidManifest.xml文件内容有要求,之前Qt5安卓的不能在Qt6安卓下使用,具体内容参见示例下的文件。
  • 对应示例demo在 C:\Qt\Examples\Qt-6.3.0\corelib\platform 目录下,之前是 C:\Qt\Examples\Qt-5.15.2\androidextras ,目前就一个示例,可能因为其他类还没有移植好。
  1. 如果想要安卓全屏遮挡住顶部状态栏,可以在main函数中将show改成showFullScreen即可,当然也可以采用java的方式在onCreate函数中加一行 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

  2. 横竖屏切换的识别,在Qt中会同时反映到resizeEvent事件中,你可以在这个是尺寸变化后读取下当前屏幕是横屏还是竖屏,然后界面上做出调整,比如上下排列改成左右排列。

  3. 由于不同Qt版本对应的安卓配置文件 AndroidManifest.xml 内容格式不一样,高版本和低版本模板格式互不兼容,所以建议使用自己的Qt版本创建的 AndroidManifest.xml 文件,创建好以后如果使用的是自己重新定义的java文件的启动窗体则需要将 AndroidManifest.xml 文件中的 android:name=“org.qtproject.qt5.android.bindings.QtActivity” 换掉就行。

  4. 如果自己用android studio编译的jar文件放到Qt项目的libs目录下,导致编译通不过,提示 com.android.dx.cf.iface.ParseException: bad class file magic 之类的,那是因为jdk版本不一致导致的,你可能需要在android studio项目中找到模块编jdk版本设置的地方降低版本,比如你用的ndk是r14,则需要选择jdk1.6或者jdk1.7。一般来说高版本兼容低版本,因为ndk版本太低无法兼容jdk1.8。后面发现如果直接新建的是java库(Java Library)则不存在这个问题,如果选择的是安卓库(android library)就可能有这个问题。

  5. 安卓项目配置文件是固定的名字 AndroidManifest.xml ,改成其他名字就不认识,不要想当然改成其他名字导致无法正常识别。

  6. AndroidManifest.xml文件中的package="org.qtproject.example"是包名,也是整个apk程序的内部唯一标识,如果多个apk这个包名一样,则会覆盖,所以一定要注意不同的程序记得把这个包名改成你自己的。这个包名也决定了java文件中需要使用资源文件时候的引入包名 import org.qtproject.example.R; 如果包名不一样则编译都通不过。

安卓综合应用示例 https://qtchina.blog.csdn.net/article/details/123940153

Qt安卓开发经验021-030相关推荐

  1. Qt安卓开发经验011-020

    安卓中一个界面窗体对应一个Activity,多个界面就有多个Activity,而在Qt安卓程序中,Qt这边只有一个Activity那就是QtActivity(包名全路径 org.qtproject.q ...

  2. 如何在Windows下搭建Qt安卓开发环境?

    一.导读 本文描述如何在Windows下搭建Qt安卓开发环境,由于Qt维护的安卓开发环境和安卓开发环境在很大程度上不兼容,所以在选择Qt版本的时候需要注意:在JDK和Android SDK环境的选择上 ...

  3. Qt安卓开发:调用java代码的获取usb权限

    最近换了工作,新工作是负责用qml做qt安卓开发. 工作中遇到一个问题:安卓设备有USB口,需要插入一个U盘在程序里读写U盘中的文件,由于安卓系统的安全性的问题导致QFile.c++的文件操作相关方法 ...

  4. Qt/C++开发经验小技巧131-140

    Qt新版本往往会带来一些头文件的更新,比如以前使用QPainter绘制,不需要额外包含QPainterPath头文件,而5.15版本开始就需要显示主动引入#include "qpainter ...

  5. 模拟共享单车开发之路-APP客户端开发之Qt安卓环境的搭建(二)

    今天将电脑重装了系统,将VS2019,Qt等重新安装了, 需要的开发环境如下图所示: 值得注意的是, Qt中要新增安装组件:选中有关Android这一项 然后设置QtCreator编译路径:打开QtC ...

  6. Qt安卓app开发,蓝牙通信调试助手,经典蓝牙通信调试工具

    目录 软件说明 app界面 源码下载地址 软件说明 1.基于Qt开发,QBluetoothSocket通信: 2.开/关蓝牙.搜索/停止搜索设备.Ascii/Hex收发.收发延迟设置.收发计数等功能: ...

  7. QT安卓web使用mysql_Qt使用MySQL笔记一

    原始日期:2015-08-20 18:01 今天开发项目时,遇到一个问题,经过自己不断尝试,终于找到了解决办法,于是赶紧记下来,不然过段时间可能又忘了呵呵,从而重蹈覆辙,浪费时间~ 问题是这样的:在插 ...

  8. Linux 下 QT 安卓开发环境搭建

    1.采用QT5.14.2,主要是安装1.jdk 2.SDK 3.NDK 三个工具包,版本要匹配上: 备注:配置SDK需要注意: 解压SDK,进入到tools目录下,运行android可执行文件,会打开 ...

  9. 程序员进阶攻略-笔记-021~030

    信息:过载与有效      "忙碌.充实而疲倦"的虚幻假象     在这个信息过载的洪流中,需要的就是在这股洪流中筛选信息并建立自己中流砥柱般的 "知识磐石". ...

最新文章

  1. HTML5与CSS3权威指南之CSS3学习记录
  2. s5pv210 uboot-2012-10移植(三) 之支持SPL
  3. 优化JavaScript代码
  4. Go聊天室的思路:一个拨号 一个监听
  5. 2020idea插件怎么同步_VScode 插件整理
  6. SpringMVC上传文件遇到的问题
  7. python mysql 写入_python如何写进MYSQL
  8. 频频霸榜的 Python,竟遭开发者嫌弃!
  9. VB提取字符串中的日期
  10. SSM项目连接远程Linux服务器的mysql 启动tomcat卡在了 Initializing Spring root WebApplicationContext...
  11. HTML5SVG 游戏开发 【起航】
  12. androidpn环境搭建
  13. 解决Linux系统下字体没有宋体和黑体问题
  14. 从零开始学习CANoe(一)—— 新建工程
  15. Scrapy1.0教程 - 目录汇总贴
  16. python 爬虫小案例 8684网站爬取北京公交路线站点信息。
  17. Punte-多功能-wordpress免费主题模板下载
  18. 让你的「文件传输助手」歇一歇吧,你完全有更实用的备忘录工具选择
  19. 计算机 应用期刊模板下载
  20. 如何区分MOS管、三极管(从MOS管、三极管的结构方面理解)

热门文章

  1. 华为注册鸿蒙商标1,华为注册鸿蒙商标 中国首款系统
  2. ng2-file-upload入门
  3. Printworks 2 for Mac(版面设计软件)
  4. 小学五年级下册计算机课程目录,五年级下册信息技术教学计划
  5. 钟汉良日记:自媒体写作要向古代拜师学艺的人取经
  6. php积分获取上限,蚂蚁会员积分获取上限是多少?有哪些获取方法?
  7. nodemcu Ubuntu16自行编译固件--超神丶学院
  8. HarmonyOS数据存储之首选项(含源码)
  9. 提高自己记忆力memory的方法
  10. linux网卡配置详解