• Stars
    star
    570
  • Rank 77,956 (Top 2 %)
  • Language
    C++
  • License
    Apache License 2.0
  • Created about 3 years ago
  • Updated 4 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

⛄ 基于OpenCV开源的微信二维码引擎移植的二维码扫码识别库

WeChatQRCode

Download MavenCentral JitPack CI CircleCI API License Blog QQGroup

基于OpenCV开源的微信二维码引擎移植的封装库。又一个扫码相关的轮子,之所以说又,是因为这样的轮子已经开源三个了;几个轮子之间的优缺点,各有千秋,请自寻选择(小孩子才做选择,我全都要)。

基于ZXing的扫码轮子 ZXingLite

基于MLKit的扫码轮子 MLKit

基于OpenCV的扫码轮子 WeChatQRCode

GIF 展示

GIF

你可以直接下载 演示App 体验效果

各Module相关说明

app

示例App:主要用于提供WeChatQRCode的演示效果

opencv

OpenCV:编译好的OpenCV

opencv-armv7a

OpenCV:armeabi-v7a 的libopencv_java4.so

opencv-armv64

OpenCV:arm64-v8a 的libopencv_java4.so

opencv-x86

OpenCV:x86 的libopencv_java4.so

opencv-x86_64

OpenCV:x86_64 的libopencv_java4.so

opencv-qrcode

OpenCV二维码识别:封装好的API,通过 OpenCVQRCodeDetector 你可以很轻松的拥有OpenCV中开源的二维码识别功能

opencv-qrcode-scanning

OpenCV二维码扫码:有了上面的OpenCV二维码识别功能,基本的扫码相关界面还是需要有个的,扫码加识别完美搭配;

opencv-qrcode-scanning 相当于CameraScan的衍生库。

wechat-qrcode

微信二维码识别:封装好的API,通过 WeChatQRCodeDetector 你可以很轻松的拥有OpenCV中开源的微信二维码识别功能

wechat-qrcode-scanning

微信二维码扫码:有了上面的微信二维码识别功能,基本的扫码相关界面还是需要有个的,扫码加识别完美搭配;

wechat-qrcode-scanning 相当于CameraScan的衍生库。

Java版本(点击查看java分支)

引入

Gradle:

  1. 在Project的 build.gradlesetting.gradle 中添加远程仓库

    repositories {
        //...
        mavenCentral()
        maven { url 'https://jitpack.io' }
    }
  2. 在Module的 build.gradle 里面添加引入依赖项

    // OpenCV基础库(*必须)
    implementation 'com.github.jenly1314.WeChatQRCode:opencv:2.0.1'
    implementation 'com.github.jenly1314.WeChatQRCode:opencv-armv7a:2.0.1'
    
    // OpenCV的其他ABI(可选),根据你的需要选择想要支持的SO库架构
    implementation 'com.github.jenly1314.WeChatQRCode:opencv-armv64:2.0.1'
    implementation 'com.github.jenly1314.WeChatQRCode:opencv-x86:2.0.1'
    implementation 'com.github.jenly1314.WeChatQRCode:opencv-x86_64:2.0.1'
    
    // OpenCV二维码识别功能(可选)
    implementation 'com.github.jenly1314.WeChatQRCode:opencv-qrcode:2.0.1'
    // OpenCV二维码扫码功能(可选)
    implementation 'com.github.jenly1314.WeChatQRCode:opencv-qrcode-scanning:2.0.1'
    
    // 微信二维码识别功能(可选)
    implementation 'com.github.jenly1314.WeChatQRCode:wechat-qrcode:2.0.1'
    // 微信二维码扫码功能(可选)
    implementation 'com.github.jenly1314.WeChatQRCode:wechat-qrcode-scanning:2.0.1'
    

温馨提示

关于WeChatQRCode版本与编译的SDK版本要求

使用 v2.x 以上版本时,要求 compileSdkVersion >= 33

如果 compileSdkVersion < 33 请使用 v1.x版本

ABI过滤

在Module的 build.gradle 里面的 android{} 中设置支持的 SO 库架构(可选,支持多个平台的 so, 支持的平台越多,APK体积越大)

    defaultConfig {
    
        //...
        
        ndk {
            //设置支持的 SO 库架构(开发者可以根据需要,选择一个或多个平台的 so)
            abiFilters 'armeabi-v7a' // , 'arm64-v8a', 'x86', 'x86_64'
        }
    }

使用

初始化

初始化 OpenCVWeChatQRCodeDetector (建议在 MainActivityonCreate 方法中初始化)

        //初始化OpenCV
        OpenCV.initAsync(context)

        //初始化WeChatQRCodeDetector
        WeChatQRCodeDetector.init(context)

识别二维码

WeChat QRCode

识别二维码 (wechat-qrcode中的WeChatQRCodeDetector)

    //识别二维码;results是一个List<String>集合,可能会有多个结果,如果只识别一个码,可以取List中第0个就可以
    val results = WeChatQRCodeDetector.detectAndDecode(bitmap)

识别二维码并返回二维码位置信息 (wechat-qrcode中的WeChatQRCodeDetector)

    // 检测结果:二维码的位置信息
    val points = ArrayList<Mat>()
    //通过WeChatQRCodeDetector识别图片中的二维码并返回二维码的位置信息
    val result = WeChatQRCodeDetector.detectAndDecode(bitmap, points)
    points.forEach { mat ->
        // 扫码结果二维码的四个点(一个矩形)
        Log.d(TAG, "point0: ${mat[0, 0][0]}, ${mat[0, 1][0]}")
        Log.d(TAG, "point1: ${mat[1, 0][0]}, ${mat[1, 1][0]}")
        Log.d(TAG, "point2: ${mat[2, 0][0]}, ${mat[2, 1][0]}")
        Log.d(TAG, "point3: ${mat[3, 0][0]}, ${mat[3, 1][0]}")
    }

OpenCV QRCode

识别二维码 (opencv-qrcode中的OpenCVQRCodeDetector)

    val openCVQRCodeDetector = OpenCVQRCodeDetector()
    //识别二维码
    val results = openCVQRCodeDetector.detectAndDecode(bitmap)

识别二维码并返回二维码位置信息 (opencv-qrcode中的OpenCVQRCodeDetector)

    // 检测结果:二维码的位置信息
    val points = Mat()
    //通过WeChatQRCodeDetector识别图片中的二维码并返回二维码的位置信息
    val result = openCVQRCodeDetector.detectAndDecode(bitmap, points)
    // 扫码结果二维码的四个点(一个四边形);需要注意的是:OpenCVQRCode识别的二维码和WeChatQRCode的识别的二维码记录在Mat中的点位方式是不一样的
    Log.d(TAG, "point0: ${points[0, 0][0]}, ${points[0, 0][1]}")
    Log.d(TAG, "point1: ${points[0, 1][0]}, ${points[0, 1][1]}")
    Log.d(TAG, "point2: ${points[0, 2][0]}, ${points[0, 2][1]}")
    Log.d(TAG, "point3: ${points[0, 3][0]}, ${points[0, 3][1]}")

完整示例

通过继承 wechat-qrcode-scanning 中的 WeChatCameraScanActivity或者WeChatCameraScanFragment可以很轻松的实现扫码功能

class WeChatQRCodeActivity : WeChatCameraScanActivity() {

    override fun onScanResultCallback(result: AnalyzeResult<List<String>>) {
        if (result.result.isNotEmpty()) {
            // 停止分析
            cameraScan.setAnalyzeImage(false)
            Log.d(TAG, result.result.toString())
            // 当初始化 WeChatScanningAnalyzer 时,如果是需要二维码的位置信息,则会返回 WeChatScanningAnalyzer.QRCodeAnalyzeResult
            if (result is WeChatScanningAnalyzer.QRCodeAnalyzeResult) { // 如果需要处理结果二维码的位置信息

                val buffer = StringBuilder()
                val bitmap = result.bitmap?.drawRect { canvas, paint ->
                    // 扫码结果可能有多个
                    for ((index, data) in result.result.withIndex()) {
                        buffer.append("[$index] ").append(data).append("\n")
                        result.points?.forEach { mat ->
                            // 扫码结果二维码的四个点
                            Log.d(TAG, "point0: ${mat[0, 0][0]}, ${mat[0, 1][0]}")
                            Log.d(TAG, "point1: ${mat[1, 0][0]}, ${mat[1, 1][0]}")
                            Log.d(TAG, "point2: ${mat[2, 0][0]}, ${mat[2, 1][0]}")
                            Log.d(TAG, "point3: ${mat[3, 0][0]}, ${mat[3, 1][0]}")

                            val path = Path()
                            path.moveTo(mat[0, 0][0].toFloat(), mat[0, 1][0].toFloat())
                            path.lineTo(mat[1, 0][0].toFloat(), mat[1, 1][0].toFloat())
                            path.lineTo(mat[2, 0][0].toFloat(), mat[2, 1][0].toFloat())
                            path.lineTo(mat[3, 0][0].toFloat(), mat[3, 1][0].toFloat())
                            path.lineTo(mat[0, 0][0].toFloat(), mat[0, 1][0].toFloat())
                            // 将二维码位置在图片上框出来
                            canvas.drawPath(path, paint)
                        }
                    }
                }

                val config = AppDialogConfig(this, R.layout.qrcode_result_dialog).apply {
                    content = buffer
                    onClickConfirm = View.OnClickListener {
                        AppDialog.INSTANCE.dismissDialog()
                        // 继续扫码分析
                        cameraScan.setAnalyzeImage(true)
                    }
                    onClickCancel = View.OnClickListener {
                        AppDialog.INSTANCE.dismissDialog()
                        finish()
                    }
                    val imageView = getView<ImageView>(R.id.ivDialogContent)
                    imageView.setImageBitmap(bitmap)
                }
                AppDialog.INSTANCE.showDialog(config, false)

            } else {
                // 一般需求都是识别一个码,所以这里取第0个就可以;有识别多个码的需求,可以取全部
                val text = result.result[0]
                val intent = Intent()
                intent.putExtra(CameraScan.SCAN_RESULT, text)
                setResult(RESULT_OK, intent)
                finish()
            }

        }
    }

    override fun createAnalyzer(): Analyzer<MutableList<String>>? {
        // 分析器默认不会返回结果二维码的位置信息
//        return WeChatScanningAnalyzer()
        // 如果需要返回结果二维码位置信息,则初始化分析器时,参数传 true 即可
        return WeChatScanningAnalyzer(true)
    }

    companion object {
        const val TAG = "WeChatQRCodeActivity"
    }

}

更多完整示例如下:

opencv-qrcode-scanning

扫描识别二维码实现示例:通过直接继承 WeChatCameraScanActivity 实现的示例 WeChatQRCodeActivity

扫描识别多个二维码实现示例:通过直接继承 WeChatCameraScanActivity 实现的示例 WeChatMultiQRCodeActivity

wechat-qrcode-scanning

扫描识别二维码实现示例:通过直接继承 OpenCVCameraScanActivity 实现的示例 OpenCVQRCodeActivity

特别说明

从2.0.0版本开始 wechat-qrcode-scanningopencv-qrcode-scanning 都是以CameraScan作为基础库去实现具体的分析检测功能,所以关于 CameraScan 的使用和自定义扫码界面布局都完全遵循CameraScan 的使用方式。

关于CameraScan的使用,你可以直接去看CameraScan的使用说明;

关于扫描框动画,你可以查看ViewfinderView的使用说明;

2.x版本的变化

1.x2.x 主要变化如下:

  • 1.x版本中 wechat-qrcode-scanningopencv-qrcode-scanning 默认依赖的 mlkit-camera-core 被移除了;

从2.0.0版本开始 wechat-qrcode-scanningopencv-qrcode-scanning 都改为依赖CameraScan;(CameraScan是一个独立的库,单独进行维护)

从2.0.0版本开始 wechat-qrcode-scanningopencv-qrcode-scanning 都已默认依赖 ViewfinderViewViewfinderView

从2.0.0版本开始 OpenCVCameraScanActivityWeChatCameraScanActivity 默认布局包含了扫描动画 ViewfinderView 和手电筒按钮,集成步骤更简单。

基于以上两点主要差异:2.x的主要使用方式和1.x基本类似,部分细节有所变更。

如果你是从 1.x 版本升级至 2.x 版本,那么你需要知道上面所说的差异;特别是独立出去单独维护的库,其包名都有所变化,这一点需要注意一下,大部分变动只需变更导入的包名即可完成升级。

如果你使用的是1.x版本的话请直接查看v1.x分支版本

2.x版本的使用

2.x版本的实现主要是以CameraScan作为基础库去实现具体的分析检测功能,所以你可以直接去看CameraScan的使用说明,只要知道了CameraScan的基本使用方式,自然就会使用 wechat-qrcode-scanningopencv-qrcode-scanning了。

二维码扫码识别

下面就列一下 opencv-qrcode-scanningwechat-qrcode-scanning 实现扫二维码功能的核心类;主要包括实现扫描二维码的Analyzer 和便于快速实现扫描检测的 BaseCameraScanActivityBaseCameraScanFragment 的子类。

功能 所属子模块 对应的Analyzer实现 对应的BaseCameraScanActivity子类
二维码扫码识别 opencv-qrcode-scanning OpenCVScanningAnalyzer OpenCVCameraScanActivity/OpenCVCameraScanFragment
二维码扫码识别 wechat-qrcode-scanning WeChatScanningAnalyzer WeChatCameraScanActivity/WeChatCameraScanFragment

更多使用详情,请查看app中的源码使用示例或直接查看 API帮助文档

其他

opencv-qrcode与wechat-qrcode检测识别二维码对比

opencv-qrcode

  • 一次识别单个二维码速度一般;(一次识别多个二维码时好像有点问题)
  • 二维码检测的位置信息是一个四边形。

wechat-qrcode

  • 一次能识别多个二维码,识别速度更快;
  • 二维码检测的位置信息是一个矩形。

总结成一句话来说就是:wechat-qrcode 识别速度更快,opencv-qrcode 二维码定位更准。

以上观点纯属个人测试总结得出;随着版本的迭代,不保证观点与事实的一致性。你也可以直接下载 演示App进行测试比对。

相关推荐

MLKit 一个强大易用的工具包。通过ML Kit您可以很轻松的实现文字识别、条码识别、图像标记、人脸检测、对象检测等功能。

ZXingLite 基于zxing实现的扫码库,优化扫码和生成二维码/条形码功能。

CameraScan 一个简化扫描识别流程的通用基础库。

ViewfinderView ViewfinderView一个取景视图:主要用于渲染扫描相关的动画效果。

版本记录

v2.0.1:2023-9-13

  • 更新CameraScan至v1.0.1
  • 更新ViewfinderView至v1.1.0

v2.0.0:2023-8-14

  • wechat-qrcode-scanningopencv-qrcode-scanning 中移除原依赖(mlkit-camera-core),现改为依赖CameraScan
  • wechat-qrcode-scanningopencv-qrcode-scanning 添加默认依赖ViewfinderView
  • 优化扫描分析过程的性能体验(优化帧数据分析过程)

v1.3.0:2023-4-16

  • 新增OpenCV二维码扫码识别库(opencv-qrcode和opencv-qrcode-scanning)
  • 更新mlkit-camera-core至v1.4.0
  • 更新compileSdkVersion至33
  • 更新Gradle至v7.5

v1.2.1:2023-2-27

  • 优化细节

v1.2.0:2022-8-4

  • 更新OpenCV至v4.6.0

v1.1.1:2021-11-2

  • 优化细节
  • 更新mlkit-camera-core至v1.0.3

v1.1.0:2021-8-6

  • 编译多种ABI支持
  • 更新mlkit-camera-core至v1.0.2

v1.0.0:2021-7-24

  • WeChatQRCode初始版本

赞赏

如果您喜欢WeChatQRCode,或感觉WeChatQRCode帮助到了您,可以点右上角“Star”支持一下,您的支持就是我的动力,谢谢 😃

您也可以扫描下面的二维码,请作者喝杯咖啡 ☕

关于我

Name: Jenly

Email: jenly1314#gmail.com / jenly1314#vip.qq.com

CSDN: jenly121

CNBlogs: jenly

GitHub: jenly1314

Gitee: jenly1314

加入QQ群: 20867961

More Repositories

1

ZXingLite

🔥 ZXing的精简极速版,优化扫码和生成二维码/条形码,内置闪光灯等功能。扫描风格支持:微信的线条样式,支付宝的网格样式。几句代码轻松拥有扫码功能 ,ZXingLite让集成更简单。(扫码识别速度快如微信)
Java
2,981
star
2

KingTV

📺 【停止维护】高仿全民直播(全民TV),项目采用 MVP + RXJava + Retrofit + OKHttp + Material Design + Dagger2 + Base + Glide + GreenDao构建。因为全民TV已经凉了,导致App已经连不上了。在这里特意向你推荐MVPFrame: https://github.com/jenly1314/MVPFrame 和你值得拥有的MVVMFrame快速开发框架: https://github.com/jenly1314/MVVMFrame
Java
1,604
star
3

AppUpdater

🚀 AppUpdater一个专注于App更新,一键傻瓜式集成App版本升级的轻量开源库。(集成步骤超简单)
Java
876
star
4

MLKit

🌝 MLKit是一个强大易用的工具包。通过ML Kit您可以很轻松的实现文字识别、条码识别、图像标记、人脸检测、对象检测等功能。
Java
866
star
5

CircleProgressView

🎡 CircleProgressView是一个圆形渐变的进度动画控件(支持外环显示刻度,内环随之变化,配置参数完全可配),动画效果纵享丝滑。
Java
430
star
6

WanAndroid

🏄 基于Architecture Components dependencies (Lifecycles,LiveData,ViewModel,Room)构建的WanAndroid开源项目。 你值得拥有的MVVM快速开发框架:https://github.com/jenly1314/MVVMFrame
Java
417
star
7

MVVMFrame

🏰 MVVMFrame for Android 是一个基于Google官方推出的JetPack构建的快速开发框架。从此构建一个MVVM模式的项目变得快捷简单。
Kotlin
357
star
8

ArcSeekBar

🎡 ArcSeekBar 一个弧形可拖动进度条控件。弧形大小,弧度,颜色渐变等配置完全可定制化
Java
313
star
9

Base

🍁 Base是针对于Android开发封装好一些常用的基类,主要包括通用的Adapter、Activity、Fragment、Dialog等、和一些常用的Util类,只为更简单。
Java
261
star
10

GiftSurfaceView

🌷 直播间送礼物拼图案动画控件
Java
237
star
11

KingKeyboard

🎹 KingKeyboard 是一个自定义键盘。内置了满足各种场景的键盘需求:包括但不限于混合、字母、数字、电话、身份证、车牌号等可输入场景。还支持自定义。集成简单,键盘可定制化。
Java
230
star
12

SuperTextView

🎀 SuperTextView for Android 是一个在TextView的基础上扩展了几种动画效果的控件。
Java
187
star
13

NeverCrash

🌍 全局捕获Crash。信NeverCrash,永不Crash。
Java
184
star
14

FlutteringLayout

🎈 一个直播间点赞桃心飘动效果的控件
Java
160
star
15

SplitEditText

🔢 SplitEditText 是一个灵活的分割编辑框。常常应用于验证码输入 、密码输入等场景。
Java
112
star
16

MVPFrame

🏰 MVPFrame for Android 是一个集合了 Retrofit2 + RXJava2 + OkHttp3 + Mosby3 二次封装构建的MVP快速开发框架,为敏捷开发而生。
Java
102
star
17

MapHelper

🌏 MapHelper是一个整合了高德地图、百度地图、腾讯地图、谷歌地图等相关路线规划和导航的地图帮助类库
Kotlin
100
star
18

WaveView

🏄 WaveView 一个水波纹动画控件视图,支持波纹数,波纹振幅,波纹颜色,渐变色,波纹速度,波纹方向等属性完全可配。
Java
98
star
19

UltraSwipeRefresh

🏄 一个可带来极致体验的Compose刷新组件;支持下拉刷新和上拉加载,可完美替代官方的SwipeRefresh;并且支持的功能更多,可扩展性更强。
Kotlin
93
star
20

RadarView

🍳 RadarView for Android 是一个雷达扫描动画后,然后展示得分效果的控件。
Java
85
star
21

DrawBoard

🎨 DrawBoard 是一个自定义 View实现的画板;方便对图片进行编辑和各种涂鸦相关操作
Java
70
star
22

AppPay

💸 AppPay专注于App支付的库,几句代码轻松搞定微信支付、支付宝支付、银联支付。集成更简单。
Java
70
star
23

ANetty

✉️ ANetty 是基于Netty二次封装的Android链路通讯库,用以快速开发高性能,高可靠性的网络交互。在保证易于开发的同时还保证其应用的性能,稳定性和伸缩性。轻松实现长连接通讯。
Java
67
star
24

KingPlayer

🎬 一个专注于 Android 视频播放器的基础库,无缝切换内核。(IjkPlayer、ExoPlayer、VlcPlayer、MediaPlayer)
Java
59
star
25

Location

📍 Location 是一个通过 Android 自带的 LocationManager 来实现的定位功能
Kotlin
56
star
26

ImageViewer

🌅 ImageViewer是一个图片查看器(类似微信查看图片效果),一般用来查看图片详情或查看大图时使用,支持多张查看。简单易用。
Java
56
star
27

SuperSlidingPaneLayout

SuperSlidingPaneLayout 是基于SlidingPaneLayout扩展修改,新增几种不同的侧滑效果。
Java
55
star
28

SlideBar

SlideBar for Android 一个很好用的联系人字母快速索引
Java
51
star
29

SpinCounterView

🎡 一个类似于码表变化的旋转计数器动画控件
Java
51
star
30

ViewfinderView

🎯 ViewfinderView 是一个取景视图:主要用于渲染扫描相关的动画效果。其样式主要分为两大类:经典样式(带扫描框)、流行样式(不带扫描框);可任意定制。
Java
51
star
31

BaseUrlManager

⛵ BaseUrlManager的设计初衷主要用于开发时,有多个环境需要打包APK的场景,通过BaseUrlManager提供的BaseUrl动态设置入口,只需打一次包,即可轻松随意的切换不同的开发环境或测试环境。在打生产环境包时,关闭BaseUrl动态设置入口即可。
Java
49
star
32

ASocket

🌐 ASocket 是一个TCP/UDP协议的封装库,方便快速实现TCP的长连接与UDP的单播、组播、广播等相关通信
Java
46
star
33

CounterView

一个数字变化效果的计数器视图控件
Java
43
star
34

KingsGirls

👩 项目采用RXJava + Retrofit + OKHttp + Material Design + Base + Glide构建,数据来自gank.io。是一款以瀑布流的形式展示美女福利的App
Java
41
star
35

CameraScan

📷 CameraScan一个简化扫描识别流程的通用基础库
Java
34
star
36

AppTemplate

🎭 App快速构建模板,致力于快速开发实现App提供解决方案
Kotlin
34
star
37

DragPolygonView

⭐ 一个支持可拖动多边形,可拖动多边形的角改变其形状的任意多边形控件
Java
33
star
38

RetrofitHelper

💪 RetrofitHelper是一个支持配置多个BaseUrl,支持动态改变BaseUrl,动态配置超时时长的Retrofit帮助类
Java
32
star
39

MVVMFrameComponent

🏰 基于 MVVMFrame 框架 采用 JetPack (Lifecycle,LiveData,ViewModel,Room) + Dagger + DataBinding + Retrofit + OkHttp + Glide + Kotlin coroutines + ARouter等 为核心基础库构建的组件化方案
Kotlin
30
star
40

KingWeather

☁️ 一个基于Jetpack构建的MVVM天气预报APP。你值得拥有的MVVM快速开发框架:https://github.com/jenly1314/MVVMFrame
Kotlin
29
star
41

SuperSwipeRefreshLayout

SuperSwipeRefreshLayout是在SwipeRefreshLayout的基础之上扩展修改,让其支持上拉刷新,基本用法与SwipeRefreshLayout一致。
Java
26
star
42

AWebSocket

🌐 AWebSocket一个基于okhttp封装的WebSocket,简洁易用。
Kotlin
25
star
43

KVCache

📝 KVCache 是一个便于统一管理的键值缓存库;支持无缝切换缓存实现
Kotlin
23
star
44

GuidePage

📄 GuidePage是一个App欢迎引导页库。一般应用于首次打开App时的场景,通过引导页指南,概述App特色等相关信息。(链式调用,一行代码搞定)
Kotlin
23
star
45

CodeTextField

🔢 CodeTextField 一个使用 Compose 实现的验证码输入框
Kotlin
20
star
46

libyuv

🌈 基于Google的libyuv编译封装的YUV转换工具库,主要用途是在各种YUV与RGB之间进行相互转换、裁减、旋转、缩放、镜像等。(用法超简单)
C++
16
star
47

LoadingView

🍭 LoadingView 是一个圆弧加载过渡动画,圆弧个数,大小,弧度,渐变颜色,完全可配。
Kotlin
15
star
48

AppMonitor

🎯 AppMonitor 可以轻松的监听App的前后台状态变化;Activity的活跃状态变化;设备的开关屏状态变化
Kotlin
12
star
49

EasyNote

📑 EasyNote 是一个遵循 Clean Architecture 分层,使用 Jetpack Compose 实现的笔记App
Kotlin
9
star
50

compose-component

🍇 compose-component 是一个Jetpack Compose的组件库;主要提供了一些小组件,便于快速使用。
Kotlin
9
star
51

WordPOI

👍 WordPOI是一个将Word接口文档转换成JavaBean的工具库,主要目的是减少部分无脑的开发工作。
Java
7
star
52

LogX

🚩 LogX 一个小而美的日志记录框架;好用不解释。
Kotlin
7
star
53

jenly1314.github.io

This is my personal blog repository. https://jenly1314.github.io
HTML
4
star
54

GradlePublish

Gradle 一些常用配置
4
star
55

JavaFieldGenerator

☕ JavaFieldGenerator 是一个可以根据字符串内容快速生成Java字段的插件
Java
3
star
56

Http

Http
Java
2
star
57

KingVolley

KingVolley 是Volley的二次封装
Java
1
star
58

King

实现android基本网络通信和常用工具类封装的简易框架
Java
1
star