自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

我是黄大仙

每天进步一点点

  • 博客(172)
  • 资源 (49)
  • 收藏
  • 关注

原创 Android跨进程渲染

以下是服务端的代码示例,服务端收到客户端传递过来的 displayId,hostToken,width 和 height 之后,创建 SurfaceControlViewHost,然后创建一个 view 给到 SurfaceControlViewHost ,接着将 surfacePackage 传递给客户端。在一些 3d 的应用场景,当多个应用需要显示时,就可以使用跨进程渲染,这样做的好处就是,客户端进程比较轻量,无需每个客户端都引入 3d 引擎,减少包大小,减少内存占用。

2024-01-04 11:37:35 613

原创 使用docker创建自己的Android编译容器

每次拿到新机器或者系统重装,最麻烦的就是各种环境配置,最近学习了一下docker的知识,用dockerfile创建一个Android编译容器,这样就不用每次都吭哧吭哧的配置各种环境,至少编译可以方便点,开发环境还是得手动配的。需要注意的是,RUN和COPY指令都会增加容器的层级,所以我们尽可能的将可以合并的指令通过 && 连接起来,以此来减少容器的层级,减少容器的大小。再clone一个工程,尝试编译,发现能够编译成功。我们用这个镜像创建一个容器,并进入到这个容器中。发现已经有java的环境变量了。

2023-12-22 10:29:01 1112

原创 机器学习入门笔记

其中,sklearn集成了常见的一些机器学习的算法,可以让我们直接调用,https://www.scikitlearn.com.cn/。anaconda可以帮助我们创造虚拟的python环境,并在环境当中安装各种所需要的包,而且每个虚拟环境都是互相独立的,非常方便。其中data就是影响房价的因素,如当地的犯罪率,房屋年龄,房屋间数,和就业中心的距离等等,target就是房价。我们需要将原始的数据集拆分成训练集和测试集,这里是三七分,当然拆分的比例我们可以自定义。最近学习了一些关于机器学习的内容,做个笔记。

2023-12-10 12:59:28 211

原创 硬盘坏掉之后

硬盘坏掉的解决方案

2023-04-24 23:42:09 688 2

原创 MVI的模板代码分享

从 mvc 到 mvp,mvvm 再到 mvi,目的是让代码结构更清晰,更容易维护。我们在进行一些逻辑运算之后,会获取到各种数据,然后将这些数据封装成 uistate。将 view 的一些操作封装各种 Intent。例如,以下是登录界面的各种意图。例如,登录界面的各种状态。

2023-04-20 16:41:02 434

原创 kotlin的一些标准函数

kotlin的标准函数有 run,let,with 等等,平时用的时候没有太在意他们之间的差异,现在来总结对比一下。返回自己,和 apply 标准函数一样返回自己,只不过 apply 提供的是 this 上下文。平时比较常用到的有 map,reduce,filter,flatMap 等。最后一行代码作为返回值,功能和 with 一样,只不过调用方式有差异。输出:[Apple, Tree, Hello, World]输出:[1, 2, 3, 4, 5, 6, 7, 8, 9]包括 let,also。

2023-04-13 16:39:45 503

原创 第三方登录踩坑记录

最近做了注册登录的功能,其中涉及到第三方登录,就是通过 QQ 或微信或 FaceBook 等的账号进行登录。这种通过第三方的账号进行登录的逻辑都差不多,就是通过第三方的 sdk 拿到对应的 token,然后再用 token 向自己的业务后台进行注册,后台可以通过 token 获取到第三方平台的用户信息。

2023-03-26 15:47:34 148

原创 多语言解决方案

多语言是一个比较麻烦的事情,特别是当 App 比较大的时候,还会涉及到多个部门的开发以及翻译人员,这中间可能会存在比较大的沟通成本,而且还可能会阻塞开发的进度。以下是我们在具体开发过程当中使用的一个方案,通过管理端+流水线自动同步的方式来解决。

2023-02-23 11:30:31 1042

原创 基于配置系统和流水线的热更新方案

最近我们要在一个新的 App 上增加热更新的能力,按照以往的设计思路,需要后台一起参与,并提供对应的接口

2023-01-10 11:26:50 349

原创 PAD 踩坑记录

PAD 踩坑记录

2022-11-07 10:19:11 1762

原创 Unity-huatuo热更新调研

Unity-huatuo热更新调研

2022-11-04 18:00:38 1842

原创 徒手搭建个人博客

徒手搭建一套个人的博客系统

2022-09-18 17:09:46 331

原创 效率提升的好物分享

作为一个程序员,平时的工作已经非常的繁忙,加班更是家常便饭,如何提升效率,将有限的精力放在更重要的事情上,让自己少加班,是需要我们持续关注和思考的。以下是博主在平时工作当中总结出,能够帮助我们提升工作效率的好物,希望能够帮助大家早点下班。

2022-08-20 13:41:50 2327

原创 愉快无负担的跨进程通信方式2

跨进程版的EventBus 2.0

2022-07-10 17:05:37 567 1

原创 冷启动的最优解决方案

冷启动任务的最优解决方案

2022-06-18 22:00:05 993

原创 愉快无负担的跨进程通信方式

跨进程版本的EventBus

2022-06-10 21:01:24 727

原创 sdk开发经验总结

文章目录1. 降低接入成本1.1 接入简单1.2 文档和 demo1.3 api接口设计1. 接口保持精简,不要提供过多的接口2. 每个接口均应当提供详细的接口说明3. 接口参数不应过多4. 接口方法过多,应当提供默认实现5. 接口尽可能和系统或者业内标准保持一致1.4 向后兼容2.稳定性2.1 plan B2.2 监控2.3 错误指引3.其他3.1 易扩展3.2 关注性能3.3 鉴权3.4 合规3.5 sdk接入标准化4. 总结博主之前做过一些 sdk 的开发,也对接过一些 sdk ,有一些 sdk 设

2022-04-26 23:32:43 9010 1

原创 使用DSL增加代码的可读性

1.背景2.具体实现2.1 lambda表达式2.2 invoke约定+中缀表达式+扩展函数

2022-04-21 21:36:07 2076

原创 使用协成将异步转同步

最近学习了一下kotlin的协成,发现使用协成能够帮助我们将异步代码转换成同步代码,能够极大的提高代码的可读性。1.普通的异步写法如下所示,为我们常见的一些异步代码,通常情况下,我们会传递一个callback到方法里面,等到异步代码执行完毕之后回调回来。public fun realRequest(response: Callback) { Thread(Runnable { println("start request:" + address) Thread.

2022-03-31 19:16:23 6133

原创 kotlin的属性代理

今天学习了一下kotlin的属性代理,觉的挺有趣的,借助属性代理我们可以实现一些有意思的功能。基本语法class Student{ var name: String by Delegate()}class Delegate{ operator fun <T> getValue(thisRef: Any?, property: KProperty<*>): T{ ... } operator fun <T> setV

2022-03-01 23:24:37 2759

原创 应对隐私检测的各种姿势

文章目录背景隐私检测的流程流程 1.0流程 2.0流程 3.0应对隐私检测的各种姿势1. 提前获取数据和获取频率2. 权限问题3. sdk问题反编译终极大招总结背景去年11月,我们团队就已经宣布解散,但是由于隐私监管的问题,我们还得维护最后一个版本,满足隐私监管的要求。我们团队的隐私问题主要是由我来负责,回想起这一年,真是被各种隐私问题折腾得死去活来,所幸最后一个版本终于上线了,现针对隐私问题总结一下各种应对的方法。隐私检测的流程流程 1.0在刚开始被要求隐私检测的时候,我们的流程是这样

2022-01-28 11:51:34 4002

原创 Lambda 表达式是否会造成内存泄漏

背景匿名内部类 VS Lambda 表达式匿名内部类Lambda 表达式结论背景匿名内部类会持有外部类的引用,因此有造成内存泄漏的风险;那么Lambda 表达式是否会造成内存泄漏呢?匿名内部类 VS Lambda 表达式我们新建一个类TestInner,其中test方法里面包含一个Lambda表达式,test1方法里面包含一个匿名内部类public class TestInner { public void test(){ new Thread(()->{ .

2022-01-17 10:15:31 5507

原创 徒手撸一个gradle插件

1.准备工作1.1创建一个Android module1.2准备maven环境2.实现插件2.1实现插件类2.2编辑properties文件2.3发布插件3.应用插件3.1引入插件3.2应用插件1.准备工作使用java开发gradle插件,基于gradle7.0版本开发,所以一些gradle的API针对低版本已经发生了变化。1.1创建一个Android module创建Android模块GradlePlugin,删除掉res和androidTest这两个目录,在main目录下创建resource.

2022-01-08 13:08:52 1420

原创 反编译更改jar包代码

背景实现步骤1.新建工程,将jar包引入,打包成apk2.使用apktool,将apk转换成smali文件3.找到对应的位置,修改smali代码4.将修改完成的工程,使用apktool将smali打包成dex5.将dex转换成为jar包6.从jar包当中找到对应的class文件,解压,并存放在对应的目录当中7.使用zip -u命令更新原来的jar包背景在某些特殊的场景,我们需要将jar包反编译然后修改里面的源码来实现我们自己的功能。博主前段时间就遇到了这样的问题。由于隐私监控越来越严格,博主所在的部.

2022-01-08 12:34:49 2577

原创 JNI绑定实践

目录背景静态注册1.引入so文件和native方法2.编译生成jni头文件3.实现jni方法4.实现CMakeLists.txt动态注册1.定义对应交互的java方法2.引入c++代码和CMakeLists.txt文件3.编辑c++文件4.实现CMakeLists.txt背景博主之前做的日志组件的结构是java和c++相结合实现。将日志的加密,压缩,文件写入等对性能比较敏感的模块放在c++层实现,而将日志的格式化,日志脱敏等功能放在java层实现。这就会涉及到java和c++的交互,即jni。jni注

2022-01-08 11:35:11 487

原创 活动发布插件化实践

背景开心鼠是一个以内容为主的App,新活动的发布非常频繁。1.活动发布的成本高活动跟版发布,则用户需要频繁的更新App才能够体验最新的活动。App上架,会受到应用市场的制约。2.使用热更新的方式发布活动,风险大热更新的影响范围为整个App。3.App包越来越大随着活动越来越多,如果所有的活动均打包到App里面,那么App的体积会越来越大。根据Cocos的官方文档,从2.4.5版本,Cocos开始支持AssetBundle,能够让我们将某个模块独立出来,以插件的方式加载。所以我们想到,将所

2021-11-25 12:03:40 353

原创 简化Cocos和Native交互利器

背景我们在使用 Cocos 和 Native 进行交互的时候,发现体验并不是特别的友好。如下所示,为我们项目当中的一段代码(代码已脱敏),当检测到发生了 js 异常,我们需要通知 Native 端去做一些处理。jsException: function (scence, msg, stack) { if (cc.sys.isNative && cc.sys.os === cc.sys.OS_ANDROID) { jsb.reflection.callStatic

2021-11-15 11:25:54 897

原创 Cocos热更新的非官方解决方案

背景Cocos 官方提供了一套热更新的解决方案,但我们认为这套方案在以下方面不能完全适合我们的需求:必须要在 Cocos 引擎启动之后才能够开始热更新流程,而我们有些业务场景需要支持在 Cocos 引擎未启动的时候就能够开始热更新流程;文件下载效率低,官方提供的方案是在客户端本地对比本地的文件 manifest 和服务端的文件 manifest,找出其中的差异,然后再将差异的文件下载下来,并逐个校验,效率较低;没有回退兜底策略,若本地进行热更新之后出现异常导致用户无法使用,无法回退到上一个版本;

2021-11-15 11:05:02 753

原创 安全高效可视化的日志解决方案

背景一条工单引发的日志需求我们的业务收到了一个信息泄漏的工单,漏洞是明文打印日志。我们当时使用的是某网络库自带的日志系统(以下简称 A 系统),会直接将明文写入到了日志文件当中,这样就有信息泄漏的风险。我们搜集了当前使用 A 系统的痛点:明文打印,造成隐私泄漏;关键日志丢失;无法方便的打印当前的堆栈,线程等信息;不支持各种格式化输出。为了解决这个问题,我们设计并实现了 TinyLog。TinyLog 能支持日志的加密和压缩,减少日志文件大小并确保隐私不会泄漏;能够支持各种格式化输出,

2021-11-15 10:44:08 629

原创 一个轻量级的任务执行组件

之前做启动优化的时候,把各种任务单独拎出来,做成一个组建,然后根据任务的优先级以及依赖顺序去执行.源码见:https://github.com/huangbei1990/HDemo整个模块主要分成以下四个部分.1.tasktask设置了四个优先级,具体如下所示,不同优先级的task会有不同的执行逻辑.public enum Priority { Immediately,//放入缓存线程池执行 Normal,//放入线程池执行 Idle,//cpu空闲时执行 Main

2020-12-09 17:26:11 171

原创 mock简单使用

最近楼主在做一个sdk,和后台进行协同开发,依赖于后台实现的接口,在开发之前先和后台约定好了接口,然后在开发的过程中可以先mock这个接口,这样就不会阻塞开发的流程.等后台开发好了之后,再一起联调就可以了.1.引入implementation 'org.mockito:mockito-core:1.10.19'implementation 'com.crittercism.dexmaker:dexmaker:1.4'implementation "com.crittercism.dexmaker:d

2020-12-04 10:47:18 647

原创 Android项目模块化最优配置

随着Android项目越来越大,每个项目都会分成各个小模块方便管理,而每个模块都有各自的编译配置,因此统一配置是需要考虑的一个问题.以下是我比较喜欢的一种配置方式.随着Android项目越来越大,每个项目都会分成各个小模块方便管理,而每个模块都有各自的编译配置,因此统一配置是需要考虑的一个问题.以下是我比较喜欢的一种配置方式.1.在根目录新建config.gradle文件.内容如下,其中ext是gradle提供的一个ExtensionAware类型的属性,本质是一个map.ext.config =

2020-11-08 21:15:26 229

原创 树莓派搭建私人nas

最开始玩树莓派也是想能够搭建一个私人nas,能够做数据备份,其中各种折腾,我用的是一块旧的硬盘加nextcloud实现的私人nas,现在记录以下搭建的整个过程。1.安装nextcloudNginx首先需要安装Nginx ,Nginx是web服务器,我们安装的nextcloud会挂载到Nginx上面,这样就可以通过网络访问了。安装参考:https://www.cnblogs.com/xiangzhuo/p/9473812.html安装完成之后启动Nginx服务。Docker接着需要安装docke

2020-10-18 11:32:02 14192 1

原创 树莓派上使用百度网盘

想在树莓派上安装下载百度网盘里面的内容,尝试过以下方法安装官方提供的Linux安装包,实际测试,在树莓派上装不上;使用bypy工具地址:https://github.com/houtianze/bypy,也有图形界面,但是不知道是百度限制了还是怎么会是,按照提供的文档,文件下载不下来;使用baidupcs-go工具地址:https://github.com/felixonmars/BaiduPCS-Go,直接下载release包,运行就能用,但是不带图形界面,使用起来有点费劲。好在有大牛依据ba

2020-10-17 18:34:59 10295 5

原创 树莓派离线下载

最近朋友买了一个私人网盘,可以用于资料的备份,也可以挂机下载,感觉还挺有趣的,自己也想折腾一下,利用树莓派搭载一个私人网盘,用于离线下载,折腾了半天终于弄好了,现在记录一下。1.安装和配置Aria2离线下载我们使用Aria2来实现,Aria2非常轻量级,且支持各种链接和种子下载,以及多线程下载。安装sudo apt-get install aria2配置我是在/home/pi/.config/aria2目录下存放的配置文件mkdir /home/pi/.config/aria2cd /ho

2020-10-11 19:10:57 1157 1

原创 java的io操作

最近在做一个日志组件,考虑到性能和日志的完整性,使用了MMAP,即内存映射的方式写日志,顺便总结一下Java里面的IO操作.1.IOIO是阻塞性的,效率不高,但是很容易理解可以想像成是一个水管,水管里面有空位才能往里写,否则就要等待, 水管里面有水才能读,否则也只能等待.不管IO怎么包装,其操作都是针对字节的.private static void testIO()throws Exception{ File file = new File("test.txt"); //写

2020-10-08 20:33:19 103

原创 Activity的显示

1.Activity的显示Activity的显示原理如下图所示在Activity启动的时候会创建一个PhoneWindow,而这个PhoneWindow会包含一个DecorView,DecorView就是Activity的rootview,其中包含一个bar和contentView,我们自己写的布局会放到contentView当中。对于每个DecorView都有一个对应的ViewRootIm...

2020-03-16 11:44:22 379

原创 Activity的启动流程

1.Activity的启动流程当我们点击桌面的图标时,其实就是启动对应应用的入口Activity。启动Activity主要有两个流程,一个是对应的应用进程存在,一个是对应的进程不存在,以下的流程是对应的进程不存在的流程。如上图所示,当启动一个activity时,会将请求发送至AMS,AMS会判断目标进程是否存在,若不存在,则先发消息给zygote进程,然后从zygote进程当中fork出目标...

2020-03-14 20:11:53 2237

原创 binder调用流程分析

binder是一个非常好的跨进程通信工具,Android对其进行了各种封装,虽然我们用起来简单,但是理解起来却比较困难。1.自己设计一个跨进程通信机制在理解binder之前呢,首先我们想一下,如果我们自己设计一个跨进程通信的机制,那我们会怎么设计呢?如果是我的话,我可能会按照下图设计。图中左边是客户端,右边是服务端,客户端想要调用服务端的call函数,首先我们需要先将函数名称以及参数值进...

2020-03-12 12:19:49 808

原创 只有主线程才能更新view吗?

1.子线程更新产生异常做过Android开发的同学都知道只有在主线程才能够更新view,如果在子线程更新view,则会抛出异常。我们来看下这个异常到底是哪里抛出来的。如下代码所示,新建了一个线程去更新viewnew Thread(() -> { jumpBtn.setText("测试");}).start();这时抛出的异常如下 android.view.View...

2020-02-26 16:09:54 424

嵌入式开发综合技术.CHM

嵌入式技术的基础知识,和嵌入式的应用,pc中断原理,嵌入式操作系统,硬件密码组件与软件密码组件的比较研究

2010-04-24

极限编程方法.chm

介绍了极限编程基础,极限编程的方法,xp设计原则,设计模式与xp等等

2010-04-24

XML实用大全.CHM

xml实用大全包括三个部分,第一部分xml简介,第二部分文档类型定义,第三部分样式语言,第四部分补充技术。

2010-04-24

UML & ROSE & CMM 技术汇集.CHM

UML 和ROSE 和 CMM 技术汇集,uml技术包括学习笔记,建模的知识,建模工具rose学习和com资料

2010-04-24

短信息技术.CHM(短信息系统)

短信息技术的书,包括短信息综合技术,短信息监控系统,移动短信技术,开发短信的方法等

2010-04-24

dotnet技术.CHM

.net的技术,包括三个部分, 第一部分.net技术综述, 第二部分ASP.net技术, 第三个部分C sharp技术。

2010-04-24

DirectX中文编程手册.chm

本书包括三个部分第一部分初级篇,第二部分高级篇,第三篇DirectDraw函数,结构参考。

2010-04-24

c#完全手册.pdf

总共有十八章分成四个部分, 第一部分c#语言概述 第二部分c#程序设计基础 第三部分面向对象的c# 第四部分深入了解c#

2010-04-24

多线程编程技术.CHM

详细介绍了多线程的编程技术,包括断点续传技术和多线程下载等等

2010-04-24

网络编程.chm(c#的各种网络协议)

包括tcp ip协议,ftp协议,pop3协议的详解,学了之后可以编写发送邮件,简单的聊天程序

2010-04-24

SQL Server精华.chm

SQL 关于数据库的一本好书,关于SQL的一些基本操作。想学SQL的同学可以看看

2010-04-24

vc++多媒体编程.chm

vc++多媒体的书,教你如何编写音乐播放器,视频播放器。想自己编写多媒体播放器的同学可以看看

2010-04-24

游戏编程指南.rar

游戏编程指南,压缩文件里面包含有一本书和游戏源码,可以好好的学习一下游戏。

2010-04-24

Flash 8.0 基础入门教程.chm

flash8.0的入门教程,对于想学习flash的同学是一本入门的好书。

2010-04-23

C++指针集锦.chm

这本书专门讲指针,包括了指针的各种各样的情况,帮助学c++的同学掌握好指针这一部分

2010-04-23

ASP.Net XML深入编程技术(中文).pdf

ASP.net深入编程技术,包括xml的简介,ASP。net的数据库访问,动态网页的制作等,是一本好书

2010-04-23

ADO程序员参考.chm

ADO程序员参考 很有帮助的一本书

2010-04-23

电脑故障大全.rar

这本书包含了许多电脑故障,并教你怎么解决这些故障,从此玩电脑不求人

2010-04-23

英语词典.mdb(数据库)

英语词典的数据库,包含上万词条和词组,可以写成英语词典

2010-04-23

新华大字典.mdb(一万六千个字)

收录了一万六千多个字,可以做成一本字典,希望大家多多下载

2010-04-23

成语词典大全.mdb

成语词典大全的数据库,包含三万多条成语,可以供你做成成语词典

2010-04-23

win32API.chm

关于vb的API详解,包括文件处理函数,网络函数,菜单函数,文本和字体函数,硬件与系统函数,控件与消息函数,进程和线程函数等等

2010-04-23

Android跨进程渲染demo

Android跨进程渲染demo

2024-01-04

AIDL-demo源码

压缩包里面包括AIDL的服务端和客户端,可以实现跨APP访问的功能

2017-07-26

Android虚拟ble设备源码

Android虚拟ble设备源码,可以用来接收信息,具体参见博客 http://blog.csdn.net/hbdatouerzi/article/details/74935869

2017-07-11

threadfactory线程池

自己封装的threadfactory,详细使用方法见博客 http://blog.csdn.net/hbdatouerzi/article/details/73715668

2017-06-25

proguard混淆器

自己打包的proguard

2017-03-28

各种排序算法合集

各种排序算法合集,每种排序算法都继承自一个基类,各种具体的算法各自实现

2015-12-06

数独游戏算法

数独游戏算法,包括产生数独棋盘和解决数独问题的算法

2015-10-22

Android拼图游戏

九宫格拼图游戏,打乱八幅图的顺序,然后通过移动拼凑成一幅完整的图。用到了逆序数的概念,从而保证打乱的图片可以通过移动还原。

2014-08-07

可以计算多项式的计算器

实现了输入一个算式,并得出结果。是在Android手机上运行的

2014-08-05

让你在XP下真正体验3D效果桌面.rar

这个软件可以让你在xp的系统下体验3D的桌面效果,效果非常的炫丽。

2010-04-25

英语专题学习资料.chm

英语学习方法与经验,英语语法知识,英语学习实践。

2010-04-24

软件需求分析.chm

教你如何分析问题和需求,如何进行软件需求分析,软件和工程需求实践,需求调研步骤和方法,需求分析阶段的工作计划

2010-04-24

数据库技术资料.chm

包括SQL SEVER知识,MY SQL知识,数据库设计,数据库实践,数据仓库,数据库VC++综合开发技术

2010-04-24

软件体系结构资料.chm

关于软件体系的结构和概念,cs,bs模式,还有几种新型的软件体系结构

2010-04-24

组建综合资料库.chm

组建技术综合资料库,ActiveX控件注册和应用,用vc++来设计Active控件,全面理解com技术

2010-04-24

软件测试综合资料库.chm

包括软件测试基础,概述,设计。软件测试的心理学问题,软件测试计划,方法,经验交流,软件测试误区等等

2010-04-24

vc++图像编程.chm

vc++的图像编程,详细包含图像编程的各种情况。

2010-04-24

vc++编程资料.chm

vc++编程资料的书,有vc++的基本资料和c++builder的资料,包括窗体控制,应用控制,进程和线程,工具条,状态栏,图形处理,消息处理,网络多媒体,文件处理,数据库应用,控件的使用。很适合初学者使用。

2010-04-24

空空如也

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

TA关注的人

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