自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 收藏
  • 关注

原创 Android 视频采集/预览——原生实现

书接上回,上一篇文章说了怎么播放对端 flv 文件流,这一回讲一讲怎么显示本地的视频画面,以及本地音视频内容的采集。视频采集和本地渲染都是在 explorer-device-video 这个模块中实现的。示例源码下载本地视频采集视频采集依赖了 RecordThread 这个类,这就是一个采集线程,主要就是通过 MediaCodec 对采集到音视频进行编码,编码方式是 H264(H265 的编码格式采集粗来的无法正常播放)public class RecordThread extends Thread

2021-12-03 15:46:57 4733 2

原创 android 使用 IJKPlayer 播放视频流

最近在做音视频相关的内容,这就无法避开视屏采集和播放的问题了,然后播放器使用的是 ijkplayer,这个东西使用 url 播放倒是没啥问题,只是我们的方案是接收 flv 的视频裸流,下面来看看是怎么播放裸流的,也可以用于播放本地文件。实现 IAndroidIO 接口播放类的实现class ReadByteIO private constructor(): IAndroidIO { companion object { private var instance: ReadBy

2021-11-23 12:54:51 4277 30

原创 ARCore 使用 SceneForm 框架 —— 使用云锚点功能(上)(环境准备)

基于 SceneForm 的云锚点实现(一)(环境准备)注:云锚点的开发需要翻墙!翻墙!翻墙!重要的事情说三遍哈准备 google-services.json 文件就是下面截图标注的文件,这个文件是根据包名生成的,需要翻墙登录 Firebase 生成创建一个自己的项目项目名称可自定义没啥好说的,继续 就好了还是一样 继续添加 Firebase 的账号,点击 添加 Fire...

2020-01-08 11:30:09 6593 13

原创 ARCore 使用 SceneForm 框架 —— 使用云锚点功能(下)(功能实现)

基于 SceneForm 的云锚点实现(二)(代码实现)上一篇文章介绍了云锚点的开发,需要依赖什么文件和服务,本文主要会介绍云锚点的功能是怎么实现的布局文件先看一下布局文件,布局文件很简单,两个提示框,statusTips 提示框提示当前云锚点同步的状态,editText 提示框显示云锚点的 ID;两个按钮,clean 用于清空界面的锚点,ayns 用于加载云锚点<?xml vers...

2019-12-03 10:31:08 5610 4

原创 Nginx 支持 ws 协议的 MQTT

nginx 支持 ws 的 mqtt

2022-06-29 08:00:00 1716

原创 部署 EMQX 的集群服务

emqx 支持 mqtt 的集群服务

2022-06-28 21:00:00 1371 1

原创 搭建 EMQX 的 MQTT 服务

EMQ 搭建 MQTT 服务

2022-06-27 21:00:00 627

原创 Android SDK 加壳加固

Android 加壳加固流程,支持 SDK 和 APK

2022-06-24 11:34:26 1093 10

原创 移动端 SDK 的自动化测试

砸到头上的新活我们可以看到各种各样的 UI 自动化测试的框架,比较常见的有 appnium,对于开发 APP 的同学这可以提供极大的方便。想起自己的经历,自从工作以来,实际开发一个 app 的项目并不多,很多都是开发 SDK。那移动端 SDK 有没有什么比较好用的自动化测试框架么,我就翻啊翻,找啊找,好像并没有什么有用的建议。就咨询了一位专门做测试的朋友,给出的答案也是否定的,建议自研一套自动化测试系统。没有办法只能硬着头皮上了。开始搬砖一顿操作猛如虎,搞了小半年,自研了一套针对移动端 SDK 功能测

2022-05-26 15:37:03 679

原创 Android 配置 junit 单元测试

一般单元测试用在后台的 API,但是如果不巧,要做客户端的 sdk,好像后台的这个单元测试的流程,也是可以用的,下面来看看怎么配置 android sdk 的单元测试build.gradle 配置dependencies { // ..... testImplementation 'junit:junit:4.12' testImplementation "androidx.test:core:1.1.1" testImplementation "androidx.test.e

2021-08-03 16:08:32 967 2

原创 gradle 生成 JavaDoc

生成 javadoc 本身算是比较没什么难度的事情,android studio 先天就是支持的,但是实际的开发中,我们需要编译的过程中自动生成,这个就有点挠头了,如果时 android 的还好,假如是 java 的 library 呢,好吧,头发就要掉完了依赖 gradle 生成 android 的 javadoctask javaDoc(type: Javadoc) { delete("javadoc/") #清理旧的 javadoc options{ encodi

2021-07-28 20:38:09 2223 9

原创 如何删除已经发布到 mavenCentral 中的包

记得最开始写 java 的程序,很多时候时候都要下载一个 jar 包,然后导入到工程,就可以使用第三方的功能;后来很多都依赖 maven 实现远程构建,对我们码农来说,确实很方便,写代码也更友好了。从使用者角度触发,不知道到大家有没有想过,假如有一天提供支持库的作者一下子不开心,把这些库删除了或者禁用了,怎么办,会不会心里有一万只神兽在奔腾。从作者角度来看(因为第一次处理,一个很不专业的作者,发布了一个不应该存在的包),其实大家不用这么担心,作者也不是神仙,作者也会出错,我搞错了怎么办,我能不能撤销,网

2020-08-15 11:24:03 4605

原创 Android studio 编译 aidl 中文注释乱码

使用 AS 导入新的工程,编译不通过。发现存在中文注释的 aidl 无法生成完整的 java 接口文件,同时中文注释也会变成乱码。build 窗口提示如下信息:解决方法 1如果将 aidl 文件中的中文注释删掉,就可以顺利编译了。解决方法 2很多时候注释对编码有很大帮助,不想删除。关闭 android studio,打开 android studio 安装目录下的 bin 目录:打开android studio 安装目录下的bin目录:找到 studio.exe.vmoptions,st

2020-08-06 12:51:02 2490 3

原创 在 Android Studio 上运行 Java 的 main 函数

下班临时有个小的功能,也都算不上功能。在 Android Studio 中运行 Java 的 main 函数,想想好像也是没有问题的,毕竟也是使用 Java 来实现的 app。想着应该不难,但是还是被打脸了,run 的时候提示了下面的错误,从提示来看,还依赖了 gradle* What went wrong:A problem occurred configuring project ':app'.> Could not create task ':app:MainJava.main()'.

2020-08-04 00:04:32 1376

原创 Android studio 依赖远程构建的库, 实现 sdk 依赖关系的传递

停更有一段时间了,并不是自己不想写。主要是不知道写什么内容,自己没有试过的,直接搬过来没有什么意义,还是想写写自己经历过的;再一个就是,工作比较忙,也没什么时间去看看新的内容,这点在大厂好像都差不多,其他不好说,至少菊花厂和鹅厂是这样的。这次的内容和最近的工作内容有关,最近在做 Android sdk 的开发,开发 sdk 的时候,内部使用了一些第三方库,有的是远程构建,有的是依赖 libs 下的 aar/jar。如果使用的 sdk 依赖了第三方的库,但是没有做一些特殊处理(sdk 依赖的传递,或者把本地

2020-07-25 11:19:56 1470 2

原创 Centos 启动 nginx 失败 —— 端口被占用

启动 nginx 的时候提示不能绑定nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)nginx: [emerg] bind()

2020-05-31 14:57:32 1166

原创 linux(ubuntu16.04) 安装 cmake

最近几个月发生了一些糟糕的事情,虽然最终的结果还算可以接受,但是还是心态被搞炸了,也就断更了好久,后续的更新的频率应该也会慢下来了。大环境下最弱势的还是我们一线的码农,让我深刻的认识到。不要轻易相信别人的承诺,尤其是小公司的承诺;什么东西都要白纸黑字,还要先看到白纸黑字,不要是入职以后的协议,因为入职以后,签不签都要签了。最近需要搭建一个虚拟机的环境,运行 c 程序,编译 c 需要用到 cmake 也就有了这篇文章。这次的文章主要用来给自己做一个记录。安装 cmake1、安装 g++ 和 gcc,如

2020-05-18 15:44:45 1123 2

原创 Android 打包 —— aar 嵌套引用本地 aar 的打包

Android studio 的 module 打包一般会打包成 aar 的形式。如果 module 引用了一个本地的 aar,在打包的时候,这个被引用的 aar 是不会打包进去的,这种设计思想是比较好的,可以很好的避免包冲突的问题。例如 App 引用了两个 aar(1.aar 和 2.aar),1.aar 和 2.aar 都依赖了第三方的 3.aar,如果1.aar 和 2.aar 都把 3.a...

2020-04-15 13:56:46 8315 9

原创 Springboot 集成 MQTT —— web 服务端实现(apollo 客户端)

基于 MQTT 可以实现很多场景,例如现在使用比较多的物联网,还有消息的实时推送。联网的设备连接上 apollo 服务器以后,一直监听 apollo 推送过来的信令/消息即可。1、web 服务端向联网的设备推送信令/消息,上述截图的流程(1.1-1.2)。1.1、web 服务端向 apollo 服务器发送信令/消息。1.2、联网的设备通过订阅的主题,收到 web 服务端推送的信令/消息。...

2020-04-05 22:50:03 3291 2

原创 Springboot 集成 MQTT —— 搭建 apollo 服务器(Windows)

Apache Apollo 是代理服务器,可以支持 AMQP、MQTT、SSL等协议。说白了是一个发布订阅中心,发送者向发布订阅中心发数据,接受者从发布订阅中心获取数据,从而实现消息的推送。Apollo 则是消息中转站的角色。apollo 下载路径1、下载 apollo 的资源包示例使用的是 apache-apollo-1.7.1-windows-distro 压缩包2、安装 apol...

2020-04-05 00:15:29 2689 4

原创 Ubuntu 安装 docker-ce 提示 Package docker-ce is not available, but is referred to by another package.

打开 /etc/apt/sources.list.d/docker.list 中添加下面内容deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable更新并安装sudo apt-get update如果 sudo apt-get update 的过程很慢,可以尝试使用国内的镜像sudo apt-get...

2020-03-22 10:47:22 14141

原创 解决点击 Docker Quickstart Terminal 弹出 “windows 正在查找 bash.exe”

当安装 DockerToolbox 完成后,点击 Docker Quickstart Terminal 一直弹出既然这里启动程序依赖了 bash.exe,看看是怎么依赖的。好吧,这里因为之前安装过 Git 而且是自定义的安装路径,标记部分的路径并不存在。解决方法将上述的依赖的 Git 下 bash.exe 路径改为本地真实存在的路径。修改完成后就可以长长启动了...

2020-03-21 15:35:51 2379

原创 Springboot 集成 RabbitMQ —— Windows 环境下 RabbitMQ 的单机多实例集群(普通模式+镜像模式)

为了使得 RabbitMQ 可以达到高可用,需要允许消费者和生产者在 RabbitMQ 节点崩溃的情况下可以继续工作,所以一般线上部署的都会是集群。因为在自己的电脑上部署集群,没有那么多的机器,部署真正的多机多实例的情况;所以就有了这篇,单机多 RabbitMQ 实例集群的搭建。基础概念RAM node:内存节点将所有的队列、交换机、绑定、用户、权限和 vhost 的元数据存储在内存,这样可以...

2020-02-19 10:12:56 5119 4

原创 Redis 面试 —— 缓存雪崩、缓存击穿、缓存穿透

1、缓存雪崩在给 key 设置过期时间的策略上没有限制,给一大堆的 key 设置了相同的过期时间,当达到过期时间的时,在某一刻有一堆的 key 都被清除了,这个时候,新来的请求全部去数据库请求,数据库瞬时访问压力过重而扛不住的情况。假如这个时候挂的是一个用户服务的数据库,这个时候所有依赖这个库的接口都会报错,就算重启,用户的请求依旧会把数据库搞挂,反复来个几次,用户也不玩了。解决办法最简单的...

2020-02-13 21:44:54 3153

原创 Redis 面试 —— 主从、持久化、淘汰的原理

1、为什么使用 Redis在前面的几篇文章里,介绍了如何在 Spring 框架下集成 Redis,但是,我们为什么要是用 Redis 呢???这里就必须提到 Redis 的几个优点了。Redis 是基于内存存储的,同时,是 单进程 单线程 模型的 KV 数据库,使用 C 语言实现的(比 JAVA 更高效的语言),官方声称可以达到 10w+ 的QPS(每秒可以查询的次数)。因为是基于内存存储的,...

2020-02-12 11:30:03 2887

原创 cookie,session,token 的理解

最开始的服务器基本上就是支持文档的浏览, 只支持浏览功能,使用场景简单,不需要记录用户在某一段时间内的浏览记录,每次请求都是独立的 http 请求。随着交互式应用的兴起,如线上购物,都需要验证用户后再进行操作,这样,就会有一个问题,如何管理交互的会话,从而知道那哪些操作是哪些用户发起的(用户添加购物车、结账等操作),因为 http 请求本身是无状态的;这个时候就需要会话标识(session ID...

2020-02-10 16:42:38 3009

原创 Springboot 集成 Redis —— 配置 Windows 环境的主从哨兵模式

在《Springboot 集成 Redis —— 单机形式》一文中介绍了最简单的 Redis 的使用方式,但是,这种使用 Redis 的模式,很难在日常的开发中简单,实际意义小于测试意义.。Redis 有持久化功能,这可以使 Redis 在服务器重启的情况下也不会丢失(或少量丢失)数据,持久化会把内存中数据保存到硬盘上,重启会从硬盘上加载数据。但是由于数据是存储在一台服务器上的,如果这台服务器出现...

2020-01-19 17:51:28 4323

转载 Android 内存管理

初识内存优化在 Android 的性能优化的各个部分里,内存的问题绝对是最令人头疼的一部分,虽然 Android 有垃圾自动回收机制不需要手动干预,但也恰因为此,出现内存问题如内存泄漏和内存溢出等,如果对内存管理机制不熟悉,会更加难以排查问题。内存分配谈 Android 的内存,就不能不提 Java 的内存管理。Java 程序在运行的过程中会将其管理的内存分为若干个不同的数据区方法区:方...

2020-01-16 16:42:56 1687 2

原创 Springboot 集成 Redis —— 单机形式

前面有一篇文章介绍了在 windows 系统里面搭建一个 Redis 环境,环境我们都搭建好了,总不至于搭着玩玩吧,接下来就会介绍,怎么样在最基础的单机形式下使用 Redis(循序渐进嘛,毕竟还有主从、哨兵和集群的形式,一下子也说不完)引入 Redis 的依赖在 pom.xml 文件中加入 Redis 的依赖截图标注部分 <dependency> ...

2020-01-08 17:38:47 1734 4

原创 Windows 搭建 Redis 环境

Redis 是 key-value 存储系统。支持多种 value 类型存储,包括 String (字符串)、List (链表)、Set (集合)、Zset (有序集合)和 Hash(哈希类型),都支持 push / pop、add / remove 以及取交集并集和差集等操作,且操作都是原子性的。同时,Redis 支持多种不同方式的排序,为了保证操作效率,数据均缓存在内存中。Redis 会周期性...

2020-01-06 16:36:33 1759

原创 ARCore 使用 SceneForm 框架 —— 使用 ObjectAnimator 实现旋转、移动动画

对应 Sceneform 框架,官方给出了几个示例代码,其中一个示例工程 solarsystem (太阳系),给出了旋转动画是如何实现的旋转动画为了使代码看着简单,对示例代码中实现旋转的部分做了简化,就有了旋转类 —— RotatingNodeclass RotatingNode : Node() { var rotationAnimation: ObjectAnimator? = ...

2020-01-06 12:56:50 5321

原创 ARCore 使用 SceneForm 框架 —— 自定义每个单元格都有点击响应的 3D 规则镂空多面体

Sceneform 框架下绘制锥形规则多面体通常情况下,显示一个 3D 模型,只要有对应的资源就可以实现了,但是这个仅仅是通常情况,肯定会有特殊情况的,这不刚好憋了好长时间,需要憋出一个特殊情况的大招;实现一个规则锥形多面体,不过在此基础上支持配置成圆柱形规则多面体先看看效果图多面体实现思路看起来是一个很复杂的东西,不过拆解出来后,思路就会变得比较简单了先确定一个加载点的位置,然后加载...

2019-12-31 11:57:55 2453

原创 Springboot 集成 RabbitMQ —— 发布订阅模式的广播实现

Springboot 集成 RabbitMQ —— 发布订阅模式的广播实现通过前面的学习,可以发现,消息都是通过交换器发送至队列的,一条消息只能被一个消费者处理,实际开发中还会有一种情况,就是一条消息需要被多个消费者处理,就是广播的形式;广播的模式需要使用到 FanoutExchange (散列交换器),FanoutExchange 会将消息发送至每一个与之绑定的队列中FanoutExchan...

2019-12-30 17:25:52 5532 3

原创 Springboot 集成 RabbitMQ —— 消息确认机制

Springboot 集成 RabbitMQ 后的消息确认机制上一篇文章介绍了 Springboot 如何集成 RabbitMQ,同时也形成了最基本的实现,不过这个实现好像有一点点问题,记得还在菊厂培训的时候,记得有一篇培训 PPT 讲过,极其健壮的服务需要达到一年下来,平均只有一两个小时不能提供服务。反过来就是说,程序可能会在这一两个小时中宕机,宕机意味着数据丢失,就例如我们讲到的 Rabbi...

2019-12-25 19:08:57 2422

原创 Springboot 集成 RabbitMQ —— 消息队列

Springboot 集成 RabbitMQ 消息队列上一篇文章介绍了如何搭建 RabbitMQ 环境,我们构建 RabbitMQ 环境,就是为了使用他的消息队列机制,本文会介绍怎么使用最基本的消息队列模型配置 RabbitMQ server我们需要在我们的 Springboot 的项目里配置我们需要连接的 RabbitMQ Server 相关数据spring.rabbitmq.host...

2019-12-24 16:22:22 2604

原创 Windows 下搭建 RabbitMQ 环境

RabbitMQ 环境搭建这两年也写了很多后端的程序,不过都是东一块西一块的,现在好好整理一下,也算是一个回顾吧。SSM 框架介绍的有很多,要完全搭建一个也会有比较多的内容,例如 mybatis 的对数据库的逆向生成操作,用户的权限管理等等。今天调皮一下,这些都不涉及,主要介绍一下 MQ 环境的搭建,MQ 本身也是常用的中间件技术之一。...

2019-12-21 04:08:13 2112

原创 ARCore 使用 SceneForm 框架 —— 三维空间中,通过三个点绘制平面(Plane)

Sceneform 框架下通过三个点绘制平面(Plane)两个点确定一条直线,三个点确定一个平面,绘制直线的比较好处理,凭空添加平面就很少见了,这篇文章就是基于这个需求做的...

2019-12-10 18:03:56 5809 17

原创 ARCore 使用 SceneForm 框架 —— Image(通过 acquireCameraImage 获取)转 Bitmap

Sceneform 框架中 Image(通过 acquireCameraImage 获取)转 Bitmap调试工程的时候,提出需要接管 sceneform 框架的视频数据,说白了就是接管帧数据,也就意味着,处理完帧数据以后,需要手动转为可以显示的图片资源;网上一大片 ImageView 转 bitmap 什么鬼的,已经不是帧数据了,要想从 sceneform 框架中获取当前摄像头的帧数据可以通过...

2019-12-06 17:32:18 2515 12

原创 ARCore 使用 SceneForm 框架 —— 实现的子弹射击(下)(子弹击中目标的撞击测试)

基于 ARCore 的 SceneForm 框架实现 3D 场景中的子弹射击目标效果在之前的一篇文章《基于 SceneForm 实现的子弹射击(绘制子弹运行轨迹)》实现了子弹射击的效果,一般第一人称射击游戏,是需要实现击中目标的效果,本文将阐明子弹是如何击中目标首先先看一下实现的效果图射击与击中目标思路1、加载目标模型2、在 3 维空间中随机生成若干个目标3、加载一个子弹模型4、规...

2019-11-25 18:11:35 4311

原创 Kotlin 语法学习笔记(下)

Kotlin 语法学习笔记(下)写了好长时间的移动端程序,都是基于 Java 的,时代在改变,现在有好多 Kotlin 的示例,虽然不一定以后会用到 Kotlin 去构建工程,但是不好说会有需要参考的 Kotlin 示例,直接看 Kotlin 的工程感觉有点吃力,学一点新的语言,丰富一下自己的技术宽度。注:以下示例都是基于 Android 平台Kotlin 泛型泛型一般来说是比较不常用的,...

2019-11-25 14:47:15 1647

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除