WeChatQRCode 是一个基于 OpenCV 开源的微信二维码引擎(WeChat QR Code Detection & Decoding)移植并封装的 Android 二维码识别库。
该库作者还维护了另外两套扫码方案,供开发者按需选择:
- ZXingLite:基于 ZXing 的扫码方案
- MLKit:基于 ML Kit 的扫码方案
- WeChatQRCode:基于 OpenCV 的扫码方案
各方案优劣互补,建议根据实际场景选用。
模块说明
| 模块名称 |
说明 |
app |
示例 App,用于演示 WeChatQRCode 的识别与扫码效果 |
opencv |
编译好的 OpenCV 基础库 |
opencv-armv7a |
armeabi-v7a 架构的 libopencv_java4.so |
opencv-armv64 |
arm64-v8a 架构的 libopencv_java4.so |
opencv-x86 |
x86 架构的 libopencv_java4.so |
opencv-x86_64 |
x86_64 架构的 libopencv_java4.so |
opencv-qrcode |
封装 OpenCV 原生二维码识别 API,通过 OpenCVQRCodeDetector 调用 |
opencv-qrcode-scanning |
基于 opencv-qrcode 的完整扫码界面实现,为 CameraScan 的衍生库 |
wechat-qrcode |
封装微信开源二维码识别 API,通过 WeChatQRCodeDetector 调用 |
wechat-qrcode-scanning |
基于 wechat-qrcode 的完整扫码界面实现,为 CameraScan 的衍生库 |
注:Java 版本代码位于项目的 java 分支。
引入方式(Gradle)
1、添加仓库(Project 级 build.gradle 或 settings.gradle)
repositories {
// ...
mavenCentral()
}
2、添加依赖(Module 级 build.gradle)
// OpenCV 基础库(必须)
implementation 'com.github.jenly1314.WeChatQRCode:opencv:2.4.0'
// ABI 支持(至少选一个)
implementation 'com.github.jenly1314.WeChatQRCode:opencv-armv7a:2.4.0'
implementation 'com.github.jenly1314.WeChatQRCode:opencv-armv64:2.4.0'
implementation 'com.github.jenly1314.WeChatQRCode:opencv-x86:2.4.0'
implementation 'com.github.jenly1314.WeChatQRCode:opencv-x86_64:2.4.0'
// OpenCV 二维码识别(可选)
implementation 'com.github.jenly1314.WeChatQRCode:opencv-qrcode:2.4.0'
// OpenCV 扫码界面(可选)
implementation 'com.github.jenly1314.WeChatQRCode:opencv-qrcode-scanning:2.4.0'
// 微信二维码识别(可选)
implementation 'com.github.jenly1314.WeChatQRCode:wechat-qrcode:2.4.0'
// 微信扫码界面(可选)
implementation 'com.github.jenly1314.WeChatQRCode:wechat-qrcode-scanning:2.4.0'
注意事项
1、SDK 版本要求
- v2.1.x 及以上:
compileSdkVersion >= 34
- v2.0.x 及以上:
compileSdkVersion >= 33
- 若
compileSdkVersion < 33,请使用 v1.x 版本
2、ABI 过滤(减小 APK 体积)
在 android.defaultConfig 中配置:
ndk {
abiFilters 'armeabi-v7a' // 可按需添加 'arm64-v8a', 'x86', 'x86_64'
}
使用方法
1、初始化
// OpenCV 初始化(v2.1.0+)
OpenCV.initOpenCV();
// WeChatQRCodeDetector 初始化(需在 OpenCV 初始化之后)
WeChatQRCodeDetector.init(context);
2、识别二维码(WeChat 引擎)
// 仅获取内容
val results: List<String> = WeChatQRCodeDetector.detectAndDecode(bitmap)
// 同时获取内容和位置(四个角点)
val points = ArrayList<Mat>()
val result = WeChatQRCodeDetector.detectAndDecode(bitmap, points)
// points 中每个 Mat 包含 4 个点,格式:[x0,y0], [x1,y1], [x2,y2], [x3,y3]
3、识别二维码(OpenCV 原生引擎)
val detector = OpenCVQRCodeDetector()
val results = detector.detectAndDecode(bitmap)
val points = Mat()
val result = detector.detectAndDecode(bitmap, points)
// points 为 1×4 的 Mat,每列为一个点 (x, y)
4、快速实现扫码界面
继承 WeChatCameraScanActivity:
class WeChatQRCodeActivity : WeChatCameraScanActivity() {
override fun onScanResultCallback(result: AnalyzeResult<List<String>>) {
// 处理识别结果
val text = result.result[0]
// 若需位置信息,判断 result 是否为 QRCodeAnalyzeResult 类型
}
override fun createAnalyzer(): Analyzer<MutableList<String>> {
return WeChatScanningAnalyzer(true) // true 表示返回位置信息
}
}
版本演进(2.x 主要变化)
- 移除对
mlkit-camera-core 的依赖
- 改为基于独立库 CameraScan 实现相机功能
- 默认集成 ViewfinderView(扫描框动画)
WeChatCameraScanActivity 和 OpenCVCameraScanActivity 内置手电筒按钮与默认 UI
- 包名结构调整,升级 1.x → 2.x 需注意 import 路径变更
完整使用方式请参考 CameraScan 和 ViewfinderView 的官方技术文档。
核心类对照表
| 功能 |
子模块 |
Analyzer 实现 |
Activity/Fragment 基类 |
| 二维码扫码识别 |
wechat-qrcode-scanning |
WeChatScanningAnalyzer |
WeChatCameraScanActivity / WeChatCameraScanFragment |
| 二维码扫码识别 |
opencv-qrcode-scanning |
OpenCVScanningAnalyzer |
OpenCVCameraScanActivity / OpenCVCameraScanFragment |
体验与源码
演示 App:可直接下载体验识别效果(含 GIF 展示)
完整示例:见 app 模块中的 WeChatQRCodeActivity、WeChatMultiQRCodeActivity、OpenCVQRCodeActivity 等
项目效果

项目源码
Gitee: https://gitee.com/jenly1314/WeChatQRCode
这是一个非常实用的 Android开发 工具库,尤其适合对二维码识别速度和精度有较高要求的场景。如果你正在寻找比传统 ZXing 方案更强大的替代品,不妨试试这个基于微信开源引擎的 开源项目。更多类似的技术实践和资源分享,欢迎访问 云栈社区 进行交流。