Android组件化开发实践(七):开发常见问题及处理方案

作者 : 开心源码 本文共1398个字,预计阅读时间需要4分钟 发布时间: 2022-05-12 共214人阅读

我们在单一工程里开发时代码运行良好,但是在进行组件化开发时,经常会出现少量莫名其妙的问题。

1. ButterKnife无法使用

组件化之后,在library中使用ButterKnife,会发现引用R.id的地方都会飘红报错:

查看错误起因都是:Attribute value must be constant。这是由于在library中生成的R文件,这些属性值都不是常量,而@BindView注解这里是需要传入常量值的,我们找到R.id类看看:

从图中可以看到,这些id都是 public static int 类型的,所以这些地方都会报错,ButterKnife提供了插件来处理这个问题。

  • 在项目的build.gradle里添加配置:
dependencies {    classpath 'com.android.tools.build:gradle:3.0.1'    classpath 'com.jakewharton:butterknife-gradle-plugin:8.4.0'}

注意gradle使用的版本号为3.0以上,butterknife-gradle-plugin的版本号为8.4.0,特别注意不要使用最新的版本,8.4.0刚恰好,否则总是编译报错。

  • 在module的build.gradle里公告插件:
apply plugin: 'com.jakewharton.butterknife'
  • 在module的build.gradle里添加依赖:
compile 'com.jakewharton:butterknife:8.4.0'annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
  • 使用R2而不是R


我们看看R2文件里的id,发现里面都是public static final int类型常量值了,这些都是是插件为我们生成。

  • click事件

同样,click事件里也必需采用R2.id来替换R.id,但是onClick()方法里不能使用switch case语句,必需使用if else来代替,在方法体内部是不能使用R2.id的,R2类只限于在外部注解中使用。

2. 组件生命周期自动注册加载

在组件生命周期管理这篇文章中,我详情了组件都有一个自己的相似Application类,但是会引入一个问题:在壳工程集成各种业务组件时,会存在硬编码的问题,耦合严重,违反了组件化的初衷。为理解决该问题,我们可以采用APT技术,以及通过自己设置gradle插件,在打包编译期间通过动态插入字节码的方式,实现组件生命周期类的自动注册加载。具体实现方式可参考:Android组件化开发实践(八):组件生命周期如何实现自动注册管理。

3. 不同组件间数据如何交互

TODO…

持续升级中…

系列文章
Android组件化开发实践(一):为什么要进行组件化开发?
Android组件化开发实践(二):组件化架构设计
Android组件化开发实践(三):组件开发规范
Android组件化开发实践(四):组件间通信问题
Android组件化开发实践(五):组件生命周期管理
Android组件化开发实践(六):老项目实施组件化
Android组件化开发实践(七):开发常见问题及处理方案
Android组件化开发实践(八):组件生命周期如何实现自动注册管理
Android组件化开发实践(九):自己设置Gradle插件

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Android组件化开发实践(七):开发常见问题及处理方案

发表回复