Android模块化开发与ButterKinfe组件化开发排坑

Android模块化开发与ButterKinfe组件化开发排坑

一、Android模块化:组件化与插件化
由于项目发展到一定程度,随着人员的增多,代码会越来越臃肿,这个时候就必须进行模块化的拆分。
模块化是一种指导理念,其核心思想就是分而治之、降低耦合。而在Android工程中实现模块化的途径有两种(两大流派):一个是组件化,另一个是插件化。组件化和插件化对比图如下图(图引用至Android彻底组件化方案实践)。
在这里插入图片描述
组件化的第一个目标是降低app与组件的依赖关系,缺少任何一个组件,app都可以存在并且正常运行。
组件化的第二个目标就是组件可以单独运行。每个组件可以在补足一些基本功能之后独立存活并正常运行。
事实上,组件化和插件化都可以用右图来表示,每个组件都可以看成一个单独的整体,可以按需的和其他组件(包括主项目)整合在一起,从而完成一个app。
对于组件化而言,在编译期可以动态的添加和修改组件,但是运行时就没法这么做。而对于插件化,无论实在编译期还是在运行时都可以动态的添加和修改组件
在这里插入图片描述

二、ButterKinfe简单介绍
ButterKinfe是一个成员变量和方法的依赖注入框架,与Dagger2类似,利用了依赖注入,在Android开发中常用作控件的依赖注入。关于依赖注入的知识可以参照:Dagger2——适用于Android和Java的快速依赖注入器
既然ButterKinfe是一个依赖注入框架,那么其最为主要的就是注解的使用,对于ButterKinfe的使用可以参照简书:ButterKinfe8使用说明。该篇博客对ButterKnife8的使用进行了较为详细的描述,此处不多做复述。
总结一下ButterKinfe的注解,如下图所示。
在这里插入图片描述
在这里插入图片描述

三、ButterKinfe组件化开发中的坑
一般的app都是单组件开发,因此按照ButterKinfe的Github官方文档使用ButterKinfe是完全没有问题的。
但是当对项目进行组件化开发的时候,就会出现R.java的问题。(关于这点知识可以参照:Android的R.java和ButterKinfe独特的R2.java)。
我参照的简书博客:解决组件化开发butterknife在library中使用的坑中,博主写到使用依赖的时候在全局build.gradle中要使用8.4.0版本,但是经过实际测试,在ButterKinfe插件和其他插件不产生冲突的情况下是可以使用最新版本的,如果ButterKinfe插件和其他插件产生了冲突,那么可以试试8.4.0版本,但是需要注意的是8.4.0版本最高只支持com.android.tools.build:gradle:3.0.1。
在这里插入图片描述
ButterKinfe在library activity中使用的坑:

  1. R2替代R findViewId。
    在这里插入图片描述
  2. 在click方法中同样使用R2,但是找到Id的时候使用R
    在这里插入图片描述
  3. 特别注意library中switch-case的使用,在library中不能使用switch-case找id,解决方法是利用if-else替代

参考资料:Android彻底组件化方案实践
ButterKinfe8使用说明
解决组件化开发butterknife在library中使用的坑
ButterKinfe的Github官方文档

猜你喜欢

转载自blog.csdn.net/weixin_38196407/article/details/87810765
今日推荐