q2nAmor
QT/C++、opengl、opencl、音视频
展开
-
C++结合Android解码&渲染的通用方法
本文简单记录了在C++场景下如何在android上复合渲染或者如何前后端分离解码和渲染。原创 2023-01-09 14:42:43 · 272 阅读 · 1 评论 -
【血泪教训】/system/lib/libz.so (__gnu_Unwind_Resume+4) 错误原因
/system/lib/libz.so (__gnu_Unwind_Resume+4) 问题解决原创 2022-06-20 16:32:51 · 584 阅读 · 0 评论 -
【QT6】56:1: error: Parse error at “__attribute__“ 问题原因和解决办法
QT6 采坑原创 2022-06-06 17:42:23 · 1377 阅读 · 2 评论 -
Qt for Android(22) —— Android 设置时区和Ntp对时
背景 我们的产品有个功能是同步播放,即要求多台设备在相同的时刻播放相同的内容,考虑到应用场景和精准度,我们需要实现QT for Android的局域网Ntp同步。设置时区与时间windows是可以搭建简单的Ntp服务器的,详见:https://blog.csdn.net/JoshYueby/article/details/88804362假设我们windows电脑的IP地址是:192.168.1.100,则我们的Ntp服务器地址便是192.168.1.100,端口默认123。首先看下Androi原创 2021-09-30 14:31:50 · 824 阅读 · 0 评论 -
Qt for Android(21) —— 如何一次安装两个APK?(静默安装守护进程)
背景 有一种场景,就是我们为了APP运行过程中的崩溃重启,都会有一个守护进程,但是我们总不能让客户装两个APK吧,那这个时候守护APK怎么安装呢?方案想要静默安装必须要有root权限,使用pm install安装。① 将你要静默安装的apk命名为xxx.apk。② 将xxx.apk放到assest目录下,关于qt如果将资源文件放到assest下,参考:Qt for Android(四) —— QT 中如何添加 assest 资源文件③ 在Android的Activity中将xxx.apk拷贝到原创 2021-09-26 18:15:33 · 736 阅读 · 0 评论 -
Qt for Android(二十) ——Android 用ScheduledFuture替换Timer解决修改系统时间引起定时器挂起的问题
背景 基于上一篇文章,本来做好的NTP对时功能,结果发现一个致命缺陷,将系统时间修改到未来某个时间,然后启动定时器,此时如果再将系统时间改回当前的正确时间,发现定时器挂起了,不运转了。遂查找资料,发现是定时器内部实现的原因。原因分析这个问题我们可以简单跟踪下Timer的源码,Timer中有两个重要的对象,一个是TaskQueue,一个是TimerThread。 TaskQueue 是一个队列,里面放的就是我们调用Timer.schedule时传的参数task。TimerThread 是一个线程,继承原创 2021-08-19 19:31:26 · 850 阅读 · 0 评论 -
Qt for Android(19) —— QT for Android 开发中Native异常捕获与跟踪
背景 QT for Android 的开发不同于纯Android开发,如果是Android端的崩溃我们都是能通过try catch捕获到的,在稳定性运行过程中也能写入文件方便后期排查。但是当发生native异常时android端是无法捕获到的,且有时候logcat也打印不完整,这对于不能稳定复现的问题来说排查问题就会碰到很大的障碍。方案一 幸运的是,在项目初期,我们就可以集成一些第三方工具帮助我们捕获到发生的native异常。所以本文我要提到两个工具,一是我们很早就提到的bugly——http:/原创 2021-08-13 17:37:33 · 646 阅读 · 0 评论 -
Qt for Android(18) —— Android Q 适配之Http请求
升级android 10 后发现项目的Http请求竟然失败了,经过查阅资料,发现在android9.0以上由于安全性高了,如果想要使用http请求的,有以下3种解决方法:1、降级targetSdkVersion的版本未27以下,但是这会导致你的设备又无法运行在android 10 上了,因此相当于没说。2、在manifest.xml文件的application标签下添加android:usesCleartextTraffic="true",它的作用是指示应用程序是否打算使用明文网络流量,例如明文H原创 2021-08-13 16:14:36 · 602 阅读 · 0 评论 -
Qt for Android(17) —— Android 10 适配之开机自启动
背景 项目以前基于android7.0以下运行,静态监听系统的开机广播,然后拉起自己的activity。但是在Android 10 之后,发现方法失效了。经过查阅资料发现:Android 10 (API 级别 29) 及更高版本对后台应用的启动做了限制。Android10中, 当App的Activity不在前台时,其启动Activity会被系统拦截,导致无法启动。详见:google:从后台启动 Activity 的限制这里摘一些概要:Android 10 (API 级别 29) 及更高版本对后原创 2021-08-12 18:25:30 · 1849 阅读 · 1 评论 -
Qt for Android(16) —— Android Q 适配之静默安装
背景 因为项目的特殊性,客户有静默升级的需求。比如说有新版本了,要在不干扰的情况下进行新版本的自安装,完成后自动打开。前提是我们的板卡是有root权限的。在Android Q之前,我们用的方式是通过adb命令:pm install -r实现APK的静默安装。但是在Android Q之后,哪怕拥有了root权限,此方案也行不通了。新方案注:新方案要求APP具有系统签名。首先添加权限:<!--静默安装权限--><uses-permission android:name="原创 2021-08-12 11:56:25 · 880 阅读 · 0 评论 -
Qt for Android(15) —— Android Q 适配之截图
背景 之前项目的截图方式是使用的screencap -p命令,在QT中调用android的cmd函数实现截图,但是这个方法的缺陷是慢,截图有时候需要5S。其实在QT中,我们有更好的截图方式。方案介绍在QT5.12版本上,我们尝试过QScreen 的 grabWindow方法,尝试过QWidget的grab方法。这两个方法在android上都没法实现完美截图。基于一些原因,我们升级了QT版本到QT5.15,因为考虑到screencap -p方法的效率比较低,为了优化,便尝试了QPixmap grabW原创 2021-08-12 11:16:40 · 570 阅读 · 0 评论 -
Qt for Android(14) —— Android Q 适配之无法接受广播
背景 项目迁移到Android Q之后,发现之前的各种广播都收不到了,包括开机广播、自定义广播等。会提示错误:Background execution not allowed: receiving Intent { act=izis_MinaPushServiceOpen_kyteach flg=0x10 (has extras) } to cn.izis.kyteach/.receiver.DataReceiverPublic后来了解到在Android 8.0之后所有的广播都需要动态注册,也就是以前原创 2021-08-12 10:58:54 · 704 阅读 · 0 评论 -
Qt for Android(13) —— Android Q 适配之获取唯一标识
背景 之前的唯一标识是通过android.os.Build.SERIAL或者getSerial() 获取,但是Q之后会返回unknow或者空。因此在Android Q 之后此方法便不可行了。我们的项目是运行在瑞星微板卡上的LCD广告机应用,是有有线网口的。在Android Q之后,虽然无线的mac地址会被随机化,但是有线的网口mac地址肯定不会变化了,因此我们的方案是获取etho的mac地址。代码 public String getSerialNumber() { String s原创 2021-08-12 10:42:44 · 664 阅读 · 0 评论 -
《Qt for Android(12) —— QT for Android 多媒体播放器JNI交互原理和源码分析 | 寻找C站宝藏》
背景 本文旨在对qml的mediaplayer和android的mediaplayer是怎样交互的,qml mediaplayer的play、pause等函数是这样向下传递的,和android mediaplayer的回调函数是怎样响应到qml的槽函数的进行简要的分析和梳理,以便于对这块的内容有一个大概的了解,并清楚原理。建议下载qt5.15的源码,用source insight阅读。源码流程(QT端)1、首先我们在QML中使用MediaPlayer组件,并设置了相关属性,增加了play、pause原创 2021-06-16 16:49:56 · 1109 阅读 · 3 评论 -
《Qt for Android(11) —— Android Q (10)适配外部存储权限 | 寻找C站宝藏》
背景 之前我们的项目一直是运行在Android5.1和Android7.1.2的系统下,后面有新的需求呀要运行在Android 10下面,当时不知道有多少坑,以为只需要简单的适配即可。但由于我们的应用有一些特殊的需求(后面会提到),因此适配过程中还是有不少坑。问题 从Android Q(即 Android 10)开始,应用访问外部存储的私有目录(即Context.getExternalFilesDir())不需要申请READ_EXTERNAL_STORAGE 或 WRITE_EXTERNAL_ST原创 2021-06-04 17:17:12 · 1239 阅读 · 1 评论 -
Qt for Android(十) —— APP需要全屏显示,如何获取设备的真实宽高?
背景:在做QT for Android 的时候,我们的APP是一个播放类的APP,会有一个全屏显示的需求。在尝试了QT的各种全屏方案之后,发现根本无法做到全屏,要不就是包含了导航栏,要不就是包含了状态栏。因此我们必须另辟蹊径达到全屏效果。在阅读这篇文章之前,建议先阅读之前的文章,因为本文需要有一定的QT 和 Android 交互基础。Qt for Android(一) —— QT 中如何调用android方法Qt for Android(二) —— QT 中调用自定义Android方法详细教程Qt原创 2021-01-22 11:27:08 · 689 阅读 · 0 评论 -
Qt for Android(九) ——APP 崩溃卡死拉起保活实战
这篇文章要基于前面的基础,我们才能继续下面的内容,建议阅读。Qt for Android(一) —— QT 中如何调用android方法Qt for Android(二) —— QT 中调用自定义Android方法详细教程(获取Android设备的SN号)背景首先,本文的案例环境基于一些特殊的 android 设备,比如瑞星微的RK系列,在该设备上不会熄屏,没有锁屏键,运行的应用也仅限于几个 APP,大部分不会存在应用被系统杀死的可能。应用拉起说白了就是进程保活,关于Android 的进程保活文章原创 2020-12-31 19:23:22 · 2619 阅读 · 5 评论 -
Qt for Android(八) —— QT 监听 Android 的返回键,或者其他Activity 事件
这篇文章要基于前面的基础,我们才能继续下面的内容,建议阅读。Qt for Android(一) —— QT 中如何调用android方法Qt for Android(二) —— QT 中调用自定义Android方法详细教程(获取Android设备的SN号)Qt for Android(三) —— QT 中获取 Android 的Services,并调用需要Context参数的 c方法(设置音量、亮度等)背景QT 监听 Android设备的返回键有两种方式,一种是在 QT 层监听,第二种是在 And原创 2020-12-27 22:27:25 · 1568 阅读 · 0 评论 -
Qt for Android(七) —— QT 如何使用第三方jar包和so库
这篇文章要基于前面的基础,我们才能继续下面的内容,建议阅读。Qt for Android(一) —— QT 中如何调用android方法Qt for Android(二) —— QT 中调用自定义Android方法详细教程(获取Android设备的SN号)Qt for Android(三) —— QT 中获取 Android 的Services,并调用需要Context参数的 c方法(设置音量、亮度等)这个比较简单,我就大概说一下。基于文章二,在android 目录下新建 libs 文件夹,如果是原创 2020-12-27 21:56:04 · 1925 阅读 · 0 评论 -
Qt for Android(六) —— 如何开机自启动
这篇文章要基于前面的基础,我们才能继续下面的内容,建议阅读。Qt for Android(一) —— QT 中如何调用android方法Qt for Android(二) —— QT 中调用自定义Android方法详细教程(获取Android设备的SN号)Qt for Android(三) —— QT 中获取 Android 的Services,并调用需要Context参数的 c方法(设置音量、亮度等)背景在前面我们讲了一些基础操作,包括怎么在 qt 添加 java代码,如何去调用这些代码等。要做原创 2020-12-27 21:40:29 · 1102 阅读 · 0 评论 -
Qt for Android(五) ——构建APK时,过程试图写入的管道不存在
具体信息:Running Android tool to create package definition. -- Command: C:/Users/HiWin10/AppData/Local/Android/Sdk/tools/android.bat update project --path E:/VPlayer_git/release/armeabi-v7a/android-build/ --target android-29 --name QtApp过程试图写入的管道不存在。过程试图写原创 2020-11-26 12:06:28 · 386 阅读 · 0 评论 -
Qt for Android(四) —— QT 中如何添加 assest 资源文件
首先,要基于前面的基础,我们才能继续下面的文章,建议阅读。Qt for Android(一) —— QT 中如何调用android方法Qt for Android(二) —— QT 中调用自定义Android方法详细教程(获取Android设备的SN号)Qt for Android(三) —— QT 中获取 Android 的Services,并调用需要Context参数的 c方法(设置音量、亮度等)背景在 QT for Android 开发中,有时候我们会碰到一些需求,比如有一些xml配置文件、原创 2020-12-27 21:06:23 · 991 阅读 · 0 评论 -
Qt for Android(三) —— QT 中获取 Android 的Services,并调用需要Context参数的系统方法(设置音量、亮度等)
背景有了前两篇文章的基础,这篇文章就主要是说明一下如何调用一些位于Context包下基于系统提供的方法。因为这些方法都需要一个 context 对象,所以我们要知道怎么获取这个 context 对象。案例此处以设置系统音量和获取系统音量为例:androidActivity() 方法会返回应用主 Activity 的句柄,即我们需要的 context。由于 Android 的 SERVICE 都是定义在 Context 包下,且都是静态定义的名字,像下面这样:因此如果要调用 getSystem原创 2020-12-27 20:43:37 · 1763 阅读 · 0 评论 -
Qt for Android(二) —— QT 中调用自定义Android方法详细教程(获取Android设备的SN号)
背景:有时候我们使用 QT 的方法无法满足我们的需求,比如获取设备的 sn 号,使用 QT 方法是无法完成这个功能的,因此我们必须得借助 Android原生的函数完成这个功能。有了第一篇文章的基础,接下来的工作就变得很简单了。Qt for Android(一) —— QT 中如何调用android方法第一步——android代码添加基于 Qmake 项目,在构建中选择 Create Templates,此时会在你的 pro 同级目录创建出 android 文件夹,这是一个默认的qtcreator原创 2020-12-27 20:11:38 · 1948 阅读 · 0 评论 -
Qt for Android(一) —— QT 中如何调用android方法
背景:最近项目迁到 Android 平台下运行,因此涉及了不少 Qt for Android 的开发,遂记录下来并分享出来给大家。QT 想要调用 android 的方法少不了 QAndroidJniObject 这个类,QT 官方文档对它有充分的解释说明:https://doc.qt.io/qt-5/qandroidjniobject.html#本篇文章是专栏系列的基础,只要学会 QAndroidJniObject 的使用,Qt for Android 就掌握大半了。QAndroidJniObjec原创 2020-12-21 15:14:46 · 13267 阅读 · 0 评论