# BreadKnife **Repository Path**: AWeiLoveAndroid/BreadKnife ## Basic Information - **Project Name**: BreadKnife - **Description**: ButterKnife升级版。 - **Primary Language**: Android - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2024-05-19 - **Last Updated**: 2024-05-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # BreadKnife [![](https://img.shields.io/badge/platform-android-orange.svg)](https://gitee.com/AWeiLoveAndroid/BreadKnife) [![](https://img.shields.io/badge/language-java-yellow.svg)](https://gitee.com/AWeiLoveAndroid/BreadKnife) [![](https://img.shields.io/badge/Jcenter-3.0.0-brightgreen.svg)](https://gitee.com/AWeiLoveAndroid/BreadKnife) [![](https://img.shields.io/badge/build-passing-brightgreen.svg)](https://gitee.com/AWeiLoveAndroid/BreadKnife) [![](https://img.shields.io/badge/license-apache--2.0-green.svg)](https://gitee.com/AWeiLoveAndroid/BreadKnife) [![](https://img.shields.io/badge/api-19+-green.svg)](https://gitee.com/AWeiLoveAndroid/BreadKnife)

数据绑定、布局绑定、控件绑定、事件绑定、数据异常预处理、开发更加简单。 ![](website/static/logo.png) --------------------------------------------------------- ## 特点 * 支持MVVM(Model-View-ViewModel) * 支持任意数据类型绑定(包含自定义控件) * 支持任意类绑定(Activity、Fragment、Dialog、View 如果有需要普通类也可以) * 规避空指针引发的异常(防止项目开发中,数据异常引起的空指针) * 支持View绑定(我不建议你这样做,因为根本没有必要) * 支持点击事件双向绑定(Activity中绑、layout中也可以) * 支持长按点击事件绑定 * 支持library、application * 支持布局绑定 * 支持简单比较运算 --------------------------------------------------------- ## 概述 BreadKnife能够避免在项目开发中一些重复繁琐的工作,规避因数据异常引发的空指针异常,提高开发效率。它量身为[MVVM](https://baike.baidu.com/item/MVVM)框架打造,实现UI逻辑与业务分离,解耦,提高可重用性。 它提供了3种注解方式,9种xml属性完成数据绑定,事件绑定等操作。 9种xml属性: |属性|功能|控件| |:------:|:------:|:------:| |imports|引入需要绑定的类|root view| |viewModel|引入Viewmodel|root view| |bind|绑定数据|view| |click|点击监听|view| |longClick|长按监听|view| |textChanged|文本变化监听|TextView| |checkChanged|选择变化监听|CheckBox| |tabSelected|选择变化监听|TabLayout| |tabUnselected|选择变化监听|TabLayout| |pageSelected|选择变化监听|ViewPager| |progressChanged|进度变化监听|SeekBar| |radioChanged|选择变化监听|RadioButton| 3种注解: |注解|功能| |:------:|:------:| |BindLayout|绑定布局,并解析布局文件| |BindView|绑定控件| |BindClick|绑定事件| |Immersive|沉浸式| --------------------------------------------------------- ## 比较 ||注解控件|注解方法|注解布局|数据绑定|任意绑定|事件传递|学习成本| |:------:|:------:|:------:|:------:|:------:|:------:|:------:|:------:| |BreadKnife|支持|支持|支持|支持|支持|支持|低| |Databinding|不支持|不支持|不支持|支持|不支持|支持|高| |ButterKnife|支持|支持|不支持|不支持|不支持|不支持|低| |XUtil|支持|支持|不支持|不支持|不支持|不支持|中| --------------------------------------------------------- ## 使用说明 1. 在使用BreadKnife提供的功能之前,必须调用BreadKnife.bind方法,该方法会返回UnBinder的一个实现类。 2. 在绑定和引入类中,如果你需要绑定多个数据,或者引入多个类,请使用“|”符号隔开。 3. "$"符号必须是成对使用的,使用"$"引起来的变量表示是需要变换的。 4本项目基于[Briefness](https://gitee.com/lambsz_admin/Briefness) 改造。 --------------------------------------------------------- ## 快速引入项目 [发布和使用gradle本地仓库说明](docs/发布和使用gradle本地仓库说明.md) 更详细的使用方式,请用网页打开链接:[中文详细和全面的文档说明](website/index_CN.html) --------------------------------------------------------- ## 混淆 ```Java -keep class * implements com.lzw.breadknife.Unbinder{*;} -keep @com.lzw.breadknife.BindLayout class * -keep public interface com.lzw.breadknife.Unbinder{public *;} -keep class **.BreadKnifeInjector { *; } -keep class **.ViewInjector { *; } ```
--------------------------------------------------------- ## 已知问题 > 问题1:代码可以编译生成,但是报错:【错误: 找不到符号XXXUnBinder】,希望大佬们可以帮忙完善一下。 > 问题2:breadknife-plugin无法生成R2文件,希望大佬们可以帮忙完善一下。 --------------------------------------------------------- ## 感谢浏览 请不要吝啬你的小星星,如果你有任何疑问,请加入QQ群,我将竭诚为你解答。
![](docs/qq_group.png)