Android组件化开发实践(七):开发常见问题及处理方案
来源:云飞扬1     阅读:1398
微上宝科技
发布于 2018-11-07 23:26
查看主页

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

1. ButterKnife无法使用

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

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

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

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刚恰好,否则总是编译报错。

apply plugin: 'com.jakewharton.butterknife'
compile 'com.jakewharton:butterknife:8.4.0'annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'


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

同样,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插件

免责声明:本文为用户发表,不代表网站立场,仅供参考,不构成引导等用途。 系统环境 服务器应用
相关推荐
tableau中聚合和总和的区别
学Android知识学了就忘?一气之下,我将知识点写进文档分享出来!
创业公司小团队为什么要使用Docker
如何优雅的用和了解线程池
玩转Linux命令行之娱乐篇——圣诞快乐!
首页
搜索
订单
购物车
我的