公众号:字节数组
希望对你有所帮助 🤣🤣🤣
闲着无事,来写篇文章,推荐几个我正在密集更新的个人开源项目,再附带几篇相关联的介绍文章,也许对你有所帮助 🤣🤣🤣
一、Matisse
Matisse 是一个用 Jetpack Compose 实现的 Android 图片/视频 选择框架
Matisse 的特点 & 优势:
- 适配到 Android 13
- 解决了多个系统兼容性问题
- 按需索取权限,极简的权限声明
- 完全用 Kotlin & Jetpack Compose 实现
- 支持同时选择图片和视频,或者单独选择两者之一
- 支持精细自定义主题,提供了日夜间两套默认主题
- 支持多种拍照策略,可以自由选择是否要申请权限
知乎的 Matisse 应该有蛮多的 Android 开发者有了解过或者是曾经使用过,这是知乎在 2017 年开源的一个 Android 端图片选择框架,可惜近几年知乎官方已经不再对 Matisse 进行维护更新了,上一次提交记录还停留在 2019 年,累积了四百多个 issues 一直没人解答,很多高版本系统的兼容性问题和内部 bug 也一直得不到解决。我公司的项目也使用到了 Matisse,随着 Android 系统的更新,时不时地就会有用户来反馈问题,无奈我也只能 fork 了源码自己来维护
一直这么小修小补终究不太合适,而且如果不进行完全重写的话,Matisse 的一些交互体验问题也没法得到彻底解决。因此我在 2022 年 6 月份的时候就自己动手实现了一个新的媒体选择框架并开源到了 Github,并用了和知乎一样的名字。至今已经有一年多的时间了,期间一共发布了十几个版本,最近版本号也终于更新到了 1.0.1
关于 Matisse 我也先后写了两篇文章,读者可以一并看看,以此来了解 Matisse 的设计思路
Matisse 的 Github 地址:Matisse
二、compose_chat
compose_chat 也是一个 Jetpack Compose 项目,底层通过接入腾讯云 IM SDK 来实现消息通信功能,支持私聊和群聊,上层则完全用 Jetpack Compose 来实现
2021 年 7 月份的时候,Google 正式发布了 Jetpack Compose 的 1.0 版本。我看到后,想着马上就接入到公司项目里也不太现实,就干脆先来尝试做一个功能比较丰富的个人项目得了,因此在 8 月份的时候就开源了 compose_chat
我在 Github 上对 compose_chat 的简介是:Jetpack Compose 最佳实践,用 Jetpack Compose 写一个 IM APP。这也是我对 compose_chat 的定位,每当我想尝试下 Jetpack Compose 的一些新特性或新的设计模式时,基本都是先在 compose_chat 上进行实践,因此这两年来我陆陆续续都会做一些更新
关于 compose_chat 我也先后写了两篇文章,从 Jetpack Compose 的设计理念到上手实操都有涉及到,自认还算作是比较不错的 Jetpack Compose 入门教程
compose_chat 的 Github 地址:compose_chat
三、compose_tetris
compose_tetris 又又又是一个 Jetpack Compose 项目,是一个俄罗斯方块小游戏,同时支持 Android 和 Windows 平台
compose_tetris 的开源时间比 compose_chat 还早,是我在 2021 年 6 月份的时候发布的,最初只是我在 Android 平台上的一个实践小项目。后来看到 JetBrains 发布了适用于多个平台的声明式 UI 开发框架 Compose Multiplatform 的 1.0 正式版本,就又将 compose_tetris 移植到了 Windows 平台,所以现在 compose_tetris 在 Github 上的简介又变成了:不止 Android,Compose Multiplatform 实现 Android + Desktop 俄罗斯方块
前阵子我更新了下 compose_tetris,然后似乎被 Github 官方推荐了,在两三天时间里 Star 数量就从三十多个涨到了一百多个,最近又停下来了
关于 compose_tetris 我也先后写了两篇文章,从 Jetpack Compose 实践到 Compose Multiplatform 初探
compose_tetris 的 Github 地址:compose_tetris
四、asm-samples
asm-samples 是一个关于 Android 字节码插桩实战的项目,是我在 2021 年 12 月份发布的
一开始的时候,我是想为公司的项目增加一个应用双击防抖的功能,对于一个代码库已经比较庞大的项目来说,这种功能就比较适合于通过字节码插桩的方式来实现。我先去 Github 上找有没有直接可用的开源项目,最终发现要么是实现得不够全面,要么就是很久没有更新了,都无法满足我的需求,最后就自己来动手实现了
同时,我也写了一篇文章来详细介绍了双击防抖功能具体的实现思路以及需要考虑到的方方面面。后来看到京东发布了一篇介绍如何用字节码插桩进行线程整治的文章,又遇到工信部要求我公司的项目进行隐私合规整改,就写了一系列关于 Android 字节码插桩的功能,也陆陆续续发表了六篇文章,分别从不同方向进行介绍,并开源了全部的实现代码
- ASM 字节码插桩:实现双击防抖
- ASM 字节码插桩:进行线程整治
- ASM 字节码插桩:助力隐私合规
- ASM 字节码插桩:监控大图加载
- ASM 字节码插桩:从 Lambda 表达式讲起
- ASM 字节码插桩:Jetpack Compose 实现双击防抖
最近我主要是对 asm-samples 进行了两次更新,一次是更新到了 Gradle 8.0,一次是对功能模块进行了拆分,从而使得整个项目更加贴近技术潮流,且代码更加易于理解
此外,asm-samples 虽然开源了全部实现代码,但如果开发者想要引入到自己项目中的话,还需要手动引入源代码,不太方便。因此最近我有打算将其中一两个插件抽取出来并托管到公共 maven,以便开发者可以直接远程依赖使用
asm-samples 的 Github 地址:asm-samples
五、Monitor
Monitor 是一个适用于 OkHttp / Retrofit 的可视化抓包工具
在使用 OkHttp 或者 Retrofit 的时候,我觉得大部分开发者做得最多的自定义实现就是拦截器了。因为 OkHttp 的拦截器真的是太有用了,我们的很多需求:添加 Header、计算并添加签名信息、网络请求记录 等都可以通过拦截器来自动完成,只要定义好规则,就可以覆盖到全局的 OkHttp 网络请求了
Monitor 就是通过 OkHttp 的拦截器实现的一个开源库,只需要为 OkHttpClient 添加 MonitorInterceptor,就可以自动记录并缓存所有的网络请求信息,并提供可视化页面进行查看
关于 Monitor 最早可以追溯到 2020 年的 10 月份,那时候的国庆假期我闲着无聊,就想着来写一系列关于 Android 开源库源码解析和实战演练的文章,初定下的目标是 EventBus、ARouter、LeakCanary、Retrofit、Glide、OkHttp、Coil 等七个知名开源库,并且每写一篇源码解析文章,就再写一篇自定义实现或者是扩展阅读的文章,而 Monitor 就是我写完了 OkHttp 源码详解的文章后写的一个 OkHttp 相关的开源库
- 三方库源码笔记(1)-EventBus 源码详解
- 三方库源码笔记(2)-EventBus 自己实现一个
- 三方库源码笔记(3)-ARouter 源码详解
- 三方库源码笔记(4)-ARouter 自己实现一个
- 三方库源码笔记(5)-LeakCanary 源码详解
- 三方库源码笔记(6)-LeakCanary 扩展阅读
- 三方库源码笔记(7)-Retrofit 源码详解
- 三方库源码笔记(8)-Retrofit 与 LiveData 的结合使用
- 三方库源码笔记(9)-Glide 源码详解
- 三方库源码笔记(10)-Glide 你可能不知道的知识点
- 三方库源码笔记(11)-OkHttp 源码详解
- 三方库源码笔记(12)-OkHttp / Retrofit 开发调试利器
- 三方库源码笔记(13)-可能是全网第一篇 Coil 的源码分析文章
最近我也对 Monitor 进行了一次升级,主要是解决一些兼容性问题
Monitor 的 Github 地址:Monitor
六、AndroidGuide
目前,我的文章的发布渠道主要有三个:微信公众号、掘金、Github。AndroidGuide 正是我在 Github 上专门用于存档文章的项目,我每发布一篇文章,相应的 Markdown 文档也都会同步保存到 AndroidGuide
由于在微信公众号发表的文章基本就没法修改,因此有时候文章需要勘误的话,我就只能修改在掘金和 AndroidGuide 上发布的文章。如果读者想要查看上面几个开源库相关联的文章的话,建议到我的掘金主页或者 Github 上进行查看,微信公众号比较适合于实时看到有文章发布
掘金:业志陈
Github:AndroidGuide