做安卓逆向,经常用到qtscrcpy,来了兴趣,准备手搓这个轮子,开搞!
qtscrcpy码云连接
作者出的课程
ok,走你
环境:qt与vs
工欲善其事必先利其器,造轮子到后面qt和vs版本问题就不可避免。
我一开始用的是vs2022和qt6.4,引入ffmpeg的时候,打不开lib;qmake、cmake、用最新编译后的ffmpeg库都试过,都不行。只能乖乖滚去用旧vs2017+qt5.12,这下能打开lib了。
但是,debug报错找不到obj文件,一通分析,我用的kit是msvc 2017 64bit,调用一个c函数。试试msvc 32bit,没安装…而且在MaintenanceTool里没找到update…卸了重装,通过。
vs2017 + qt5 + msvc 32bit
vs2017_download
qt5_download(要科学上网)
在安装qt记得勾选msvc 2017 32 bit
tips
- 安装qt之后要配置环境变量
- 高版本不支持QRegExp,使用QRegularExpression代替
- SkipEmptyParts高版本从QString移到Qt
- QProcess的finished信号在qt5中重载,需用函数指针connect;在qt6直接使用宏就ok
- QDir::currentPath(); 当前工作目录
QCoreApplication::applicationDirPath(); 程序所在目录
QT的帮助写的很详细
cmake与qmake
qmake
- include ($$PWD/xxx/xxx.pri) #添加子工程
- INCLUDEPATH += \
- LIBS += \ -L"路径" -l库名 #外部库
- QT += #内部库
cmake
- cmake中我没有添加子模块,直接加了一个包含cpp的文件夹
- cmake内部库 find_package(Qt6 REQUIRED COMPONENTS Network) + target_link_libraries
- cmake外部库 link_directories(所在路径) + target_link_libraries(项目 PRIVATE 库)
- ${CMAKE_CURRENT_SOURCE_DIR} CMakeLists.txt所在目录
报错
LINK2005,(一般)头文件重复包含
多线程
QMutex互斥锁、QMutexLocker更方便的互斥锁(当QMutexLocker创建时上锁;当被销毁时,解锁);在QMutexLocker下使用QWaitCondition,传入上锁的QMutex,调用QWaitConditino.wait时,当操作系统执行阻塞的瞬间QMutex解锁;当另一线程wake后,另一线程第一时间将mutex上锁。
第三方库
ffmpeg
使用ffmpeg中avioctx、avformatctx、avcodec、avcodecctx
avcodec_send_packet返回-11,在这卡住,分析发现目标avframe没初始化…
avcodec_receive_frame返回-11,缓冲区没存满,解决缓存区未存满的延时需过掉-11
a_r_f return-11
opengl
opengl文档
opengl:glTexImage2D加载纹理单元,文档中使用GL_RGB,但是片段着色器中的源代码out是vec4,也就是GL_RGBA,改掉就能正常显示纹理
git
使用git做一个管理
git_push
Recv failure