有这么一个需求,需要通过Android升级OpenWrt的固件(Firmware)。参考OpenWrt提供的升级方案,可以使用SSH的scp
命令将固件上传到路由器的/tmp目录下,然后执行命令sysupgrade -v /tmp/firmware_name.bin
升级固件。
JSON解析之Gson
Android中Java类加载耗时问题
自己的练习项目Brush,是一个功能简单的绘制书写应用,在最后一个提交add simulate after launch之前,都存在一个问题,就是每次启动应用后,绘制第一条曲线的开始部分都是直线。原因是Android会根据应用的处理能力(UI线程的处理速度),控制
MotionEvent
的上报频率,也就是onTouchEvent
的触发频率。如果在UI线程中处理了耗时任务,那么onTouchEvent
的触发频率就会非常低,在这种情况下,只通过MotionEvent
的getX
和getY
方法来获取坐标值,根据数量极少的坐标点绘制贝塞尔曲线,有时就会出现近似直线的情况。Brush绘制第一条曲线的开始部分都是直线的问题,可以肯定的是UI线程中做了耗时操作,而且只有第一次中才存在。经过各种尝试,最后确定了是Java类加载耗时造成的。
Android中使用OpenSLES播放PCM音频
本文主要介绍在Android中使用OpenSLES提供native接口播放PCM音频。已经有现成的java类AudioTrack可以使用,为什么要使用OpenSLES?有些时候需要在native层接收音频流,如果把音频流传到java层,再使用Android java API播放音频流,那么native层和java层之间传递数据需要花费一定的时间(虽然不是很大),既然native层有API就没有必要使用java层的API了。
那为什么不在java层接收音频流呢?网络连接与接收数据部分的代码用java实现就不方便移植到其他平台。
Clang-Format简单配置
最近可是接触C/C++项目,在Linux上尝试了Vim、VSCode和QTCreator等工具进行开发,每个工具的默认代码格式化风格都不一样,如果团队成员使用的是不同的开发工具,那么代码的自动格式化必须要解决,幸好Clang-Foramt解决了这个难题。Clang-Format是一个代码格式化工具,可以配合Vim、QTCreator、VSCode和Xcode一起使用。接下来以Clang-Format最简单的配置开始。
Linux音频采集
声波通过气体、液体和固体等介质传播。麦克风内置碳膜受空气中声波的挤压产生振动,根据振动的频率和幅度产生相应的电信号(模拟电信号)。此时的模拟电信号还不能进行传输和存储,需要将其转换为数字信号(二进制bit
位表示),模拟信号的数字化过程称为采样量化。采样量化后的数据称为PCM(Pulse Code Modulation)。如何进行采样量化呢?

Linux Screen Capture
Linux屏幕捕获最简单的方式就是使用FFmpeg,一些Linux上的开源录屏软件也是基于FFmpeg开发的,如vokoscreen。如果需要在Linux上实现录屏功能(单一屏幕捕获方式、单一编码格式),只需要使用FFmpeg中的一小部分功能,然而又不想把FFmpeg引到自己的项目中,那么可以参考FFmpeg实现自己的功能。第一、可以熟悉Linux屏幕的捕获方法;第二、如果出现bug(虽然FFmpeg出bug的可能性比较小),也便于自己调试和修复。本文主要介绍使用xcb实现Linux上的屏幕捕获功能。
Xcode-LearnOpenGL-Templates
最近通过LearnOpenGL教程学习OpenGL,里面有详细的例程帮助我快速了解OpenGL的编程思路。刚开始在教程的每一小节中,我都按照教程里面讲解的步骤一步一步的敲击着代码,但是当我熟悉之后,发现每创建一个Xcode项目,我必须每一次都要设置相同的编译选项和参数,并且需要写重复的GLFW代码。因此我写了一个OpenGL的Xcode的项目模板,利用这个模板,在每次创建OpenGL的Xcode项目时可以节省一些时间。