- 博客(1001)
- 资源 (81)
- 收藏
- 关注

原创 [ Spring ] Spring Boot Mybatis++ 2025
[ Spring ] Spring Boot Mybatis++ 2025
2025-02-03 15:25:28
3086
2

原创 [ Compose ] Detailed Explanation of Side Effect Handlers
[ Compose ] Detailed Explanation of Side Effect Handlers
2025-01-21 08:53:03
1018

原创 [ Compose ] Detailed Explanation of State Remember
[ Compose ] Detailed Explanation of State Remember
2025-01-21 08:51:19
1430

原创 【Coroutines】Cascade Mechanism of Exception and Cancellation
[ Coroutines ] Cascade Mechanism of Exception and Cancellation
2025-01-06 15:18:17
1584

原创 【Gradle】Build Multiple Android Variants in KTS
【Gradle】Build Multiple Android Variants in KTS
2024-10-29 08:22:30
1398

原创 【Gradle】Build Multiple Android Variants in Groovy
【代码】【Gradle】Build Multiple Android Variants in Groovy。
2024-10-29 08:19:30
346

原创 【Coroutines】Full Understanding of Kotlinx.Corutines Framework
【Coroutines】Full Understanding of Kotlinx.Corutines Framework
2024-10-28 10:34:44
1078

原创 【JVM】Efficient Memory Leak Checker
【代码】【JVM】Efficient Memory Leak Checker
2024-10-18 09:34:28
353

原创 【Coroutines】Deep and Deep Into Kotlin Coroutines
【代码】【Coroutines】Deep and Deep Into Kotlin Coroutines
2024-10-14 10:09:37
1841

原创 【Coroutines】Implement Lua Coroutine by Kotlin - 2
【代码】【Coroutines】Implement Lua Coroutine by Kotlin - 2
2024-10-09 10:20:36
1789

原创 【Coroutines】Implement Lua Coroutine by Kotlin - 1
【代码】【Coroutines】Implement Lua Coroutine by Kotlin - 1
2024-10-07 23:28:44
2022

原创 【Kotlin】在Kotlin项目中使用AspectJ
AOP编程在Java开发中是一个非常火热的话题,最著名的库为AspectJKotlin项目中,通过Gradle插件,也能够使用该库,这是我们下面讲解的重点由于AspectJ的原理是在预编译阶段,通过插件修改代码,生成代理对象属于编译阶段的功能,因为非常依赖编译工具的版本这里用的版本是Gradle8.7,如果不兼容记得调整版本号Gradle脚本代码,用的也是Gradle8.7+KotlinScript的语法,记得根据版本调整。
2024-08-19 10:06:37
559

原创 【Android】Android AOP 编程框架
AOP编程全称Aspect Oriented Programming,面向切面编程主要功能是在不改变原代码的前提下,对特点代码节点进行修改,预处理,后期处理如果不想写表达式,可以在想要拦截的方法上加一个切入点注解再定义一个切入点处理器,与注解绑定,来处理拦截工作即可此外,注解还可以携带一些参数,用于扩展需要): Any?!!target!!pointcut可以看到,Activity的背景自动变成黄色了,完全不用改动原代码!而且还能看到,在拦截过程中,我们是可以对原有方法执行流程进行调整的。
2024-08-19 10:05:46
1817

原创 Android Irregular View
An android view that enable clip foreground and background into irregular shape
2024-08-05 21:31:21
2016

原创 【Android】自定义换肤框架05之Skinner框架集成
加载后重新调用setContentView生效,不需要重启Activity或应用。Skinner教程到此结束啦,祝大家工作顺利,学习进步,心情愉悦!在所有功能前调用即可,建议在Application中初始化。在应用该皮肤包前安装即可,建议预安装,或应用皮肤前安装。直接将皮肤资源,保持和原安装包同名,放在res目录下。自定义的资源目录,需要在Gradle中进行配置。在Activity应用皮肤前安装即可,建议在。生成apk格式的压缩包,即可作为皮肤包使用。并且,皮肤包的包名,要和原安装包保持一致。
2024-07-07 08:34:29
486

原创 【Android】自定义换肤框架04之Skinner框架设计
到上一章为止,我们已经完整讲解了换肤所用到的所有技术点这一章,我们来梳理下,如何从整体和细节上,进行代码设计毕竟,我们不止是简单实现功能,要做到功能清晰,使用灵活。
2024-07-06 13:13:52
705

原创 【Android】自定义换肤框架03之自定义LayoutInflaterFactory
在上一章,我们实现了自定义AssetManager和Resources,但不知道在哪里去应用它们现在我们知道,View是通过InflaterFactory创建的如果我们能让Factory使用自定义Resources,那么基本就实现了换肤的功能先上代码,让大家心里有个底) {代码其实非常简单,如果是自己实现的话,以下点需要注意InflaterFactory一旦创建,不可再被修改,除非通过反射强制去修改。
2024-07-06 13:12:44
1161

原创 【Android】自定义换肤框架02之自定义AssetManager和Resource
在上一章中,我们已经讲过,apk中有个资源索引文件其中保存了每个资源对应的id,name,type,path资源文件的解析,主要涉及两个类,AssetManager和Resource拷贝测试皮肤包到存储卡这里我们将测试包放在asset文件夹里面,在应用启动时拷贝到存储卡,从而省去人工操作通过指定皮肤包初始化SkinnerAssetManager使用自定义的SkinnerAssetManager加载资源十万个为什么到目前为止,我们已经实现了从指定apk中加载同名资源下一步问题是,如何让Acti
2024-07-05 08:32:52
757

原创 【Android】自定义换肤框架01之皮肤包制作
目前为止,市面上主流的安卓换肤方案,其实原理都是差不多的虽然大多都号称一行代码集成,但其实想要做到完全适配,并不简单这个系列,就是让大家从零开始,完全掌握这方面知识,这样才能对框架不支持的点自己进行补充该系列,我将使用小步慢跑的方式,每篇博客都是教会大家一个小知识点,直到完全掌握。
2024-07-05 08:32:08
604

原创 SVG从零基础到完全掌握
首先,毫无疑问,这是一份非常完善且简洁的SVG学习教程它包含了SVG所有的核心内容,而且有说明和示例对于更复杂的细节,最后附有官方文档,我们一般也用不上defs标签,可以包含若干元素,这些元素可以被其它地方引用或复用defs标签下的元素,在被复用前,都不会被展示复用通过use标签来实现,引用通过#来连接其id
2024-07-04 09:49:20
975

原创 【加密与解密】【08】Java加密算法详解
常用的摘要算法有MD,Message Digest,如MD5MD5生成的摘要为128位,对应的十六进制字符串为32位MD5已被破解,适合对安全性要求不高的场景,常用于校验文件SHA,Secure Hash Algorithm,如SHA256SHA256生成的摘要为256位,对应的十六进制字符串为64位SHA256常用于数字签名,账号密码加密SHA算法在MD算法的基础上演进而来,安全性更高SHA1算法已被破解,SHA2未来也大概率会被破解,目前SHA2算法仍然是安全的。
2024-07-03 22:45:57
1692

原创 【加密与解密】【07】SSL安全套件全解析
以上案例,都是通过KeyStore来实现KeyManager和TrustManager的管理功能现在我们不用KeyStore,通过自定义规则,来实现秘钥管理和证书验证功能我们以OkHttp框架为例现在我们用OkHttp来替换上面的HttpClient来访问服务器.url(url).get().build()这里我们为了演示,不让问题复杂化,只是简单地信任了所有的证书,并不能起到实际的安全作用。
2024-07-01 08:20:24
2165

原创 Gradle Compressor Plugin
Compress Any File from Any Where into Any Fromat !
2024-06-28 21:11:14
1105

原创 【加密与解密】【06】Java加密套件全解析
数据接收方通过公钥对摘要进行解密,再对数据进行摘要,与解密出的摘要值进行对比,判断是否一致。比如下面的例子,双方通过对称秘钥,可以是DH算法生成的交换秘钥,来加密解密其它秘钥。对于较大的字节数据,不方便通过字节数组一次性读写的,可以通过Stream来操作。可以理解为一个特殊格式的压缩包,可以设置密码,可以保存多份秘钥和证书。秘钥库,用于保存秘钥和证书,比较常见的是JKS和PKCS12格式。通过对一段完整数据,进行特定的运算,可以得到一串散列值。散列运算是不可逆的,且同样的数据,生成的散列值是固定的。
2024-06-24 17:49:58
1792

原创 【Gradle】IntelliJ Idea 或 Android Studio 调试Gradle代码
命令行参数不要写在properties文件里面,写在Gradle Run / Debug的Options里面。因为Gradle的运行效果可以由很多因素来决定,因素太多出了问题不好排查。这里我的建议是,统一使用Gradle Run / Debug来执行程序。不容易和系统默认版本的Gradle或JDK产生端口冲突,或者参数冲突。此外,在同一个机子上,可能存在多个版本的Gradle和JDK。这样Gradle和JDK固定使用的就是IDE配置的版本。除了在脚本内部添加断点,也可以在报错代码的位置添加断点。
2024-05-17 10:27:35
509

原创 通过GroovySDL实现GradleScript
DSL的语法更加简洁,对专业编程能力要求低,尤其适合用于编写命令脚本,比如Gradle脚本就是这种风格。核心的内容上面已经讲解完了,这一节我们简单演示一下,Groovy内置的一些DSL风格的编译组件。一些比较新的语言,都提供了这种风格的调用方式,比如Groovy DSL,Kotlin DSL。但DSL的简洁性背后,往往都有专业的面向对象风格代码在支撑,但是用户只和DSL这一层打交道。可以看到,上半部分是面向对象风格的代码,下半部分是DSL风格的代码。Groovy提供了专门的类来解析和执行脚本,主要有。
2024-03-18 22:54:48
843

原创 【Android】主流单元测试组件,一网打尽!
Android的测试的组件比较多,像JUnit,Espresso,UiAutomator,MockitoAndroid的测试范围也包括很多种,比如Java代码测试,Android逻辑测试,AndroidUI测试每个框架的侧重点各有不同,这里我们专门来介绍前三个Google官方推荐的测试框架有些测试组件是只在AndroidTest中可用的,在JavaTest目录下如果访问不了,不用大惊小怪。
2024-03-08 11:10:11
730

原创 【RxJava】RxJava3核心功能讲解和源码分析
一个是Observable的订阅顺序,一个是doOnSubscribe的执行顺序,Observable的订阅顺序上面已经得出结论了,是从后往前执行的。当没有指定ObserveOn,但是指定了SubscribeOn时,由于onNext代码是从最上游的Observable.subscribeActual开始的,所以所有的onNext都会在最近一个SubscribeOn指定的线程中执行。reduce:将上游Observable的相邻两个数据进行运算,再拿结果与下一个数据进行运算,如此循环,得到一个最终值。
2024-02-27 12:10:22
1371

原创 【Android】Dagger2 通过 AndroidInjector 简化模版代码
前面我们已经详细讲解过,如何通过 Component 和 Module 向 Activity 注入对象这是基本的使用方法,它的缺点是当 Activity 特别多时,就需要非常多的 Component 和 Module 类现在我们来讲解,如何通过 AndroidInjector 向基类进行统一注入。
2023-11-15 09:59:30
521

原创 【Android】Dagger2 框架设计理念和使用方式详解
现在我们已经知道,可以通过@Singleton来实现全局单例那么如果我们想在实现在某个类里面单例共享,不同类之间允许多例,要怎么做呢我们可以通过 Dagger 的自定义 Scope 特性来实现这个目标,步骤如下首先,自定义一个注解,表示被标记的类在里面是单例共享的Retention;Scope;@Scope实际上,@Singleton和一样,只是一个被@Scope标记的自定义注解,用来标记单例作用域的下一步,指定 Component 的作用域。
2023-11-08 09:53:07
618

原创 【RxJava】map过程中各个Observable生命周期分析
发生异常时,所有的OnSubscribe都会执行发生异常时,所有的OnFinally都会执行发生异常时,所有的OnComplete都不会执行发生异常时,后续的OnError都会执行发生异常时,后续的OnNext都不会执行发生异常时,后续的Function都不会执行。
2023-11-01 12:26:22
1377
8
原创 [ Linux ] Docker Compose Overview on Ubuntu24
[ Linux ] Docker Compose Overview on Ubuntu24
2025-02-10 09:12:02
580
原创 [ Linux ] Docker Overview on Ubuntu24
[ Linux ] Docker Overview on Ubuntu24
2025-02-10 09:11:17
942
原创 [ Compose ] Handle Tap Press Drag Scroll Swipe Transform Events
[ Compose ] Handle Tap Press Drag Scroll Swipe Transform Events
2025-02-08 08:25:37
319
1
原创 [ Compose ] Implement Vertical Scroll Bar with Low Level API
[ Compose ] Implement Vertical Scroll Bar with Low Level API
2025-02-08 08:24:49
173
原创 [ Spring ] Integrate Spring Boot Service Monitor Prometheus and Grafana
[ Spring ] Integrate Spring Boot Service Monitor Prometheus and Grafana
2025-02-07 09:24:54
452
原创 [ Spring] Integrate Spring Boot Dubbo with Nacos 2025
[ Spring] Integrate Spring Boot Dubbo with Nacos 2025
2025-02-06 09:29:46
482
原创 [ Spring ] Integrate Spring Distributed-Transanction-Framework Seata on Ubuntu24
[ Spring ] Integrate Spring Distributed-Transanction-Framework Seata on Ubuntu24
2025-02-06 09:28:39
333
原创 [ Javascript ] TypeScript Serialize with Decorator
[ Javascript ] TypeScript Serialize with Decorator
2025-02-05 09:07:38
200
nmview.zip-so库函数签名查看工具.zip
2023-12-23
Dagger2完整用法Demo.zip
2023-11-08
tensor-flow-lite-android-handwritten-digit-classifier.zip
2023-11-01
webrtc-m89-android.7z
2022-04-26
CH34xMultiUART.zip
2022-01-08
音视频开发工资真的高吗
2022-12-15
TA创建的收藏夹 TA关注的收藏夹
TA关注的人