1、组件化需要一个控制文件管理各个项目的配置包括sdk版本、依赖包等等
该文件应该位于project的根目录下
2、project要使用控制文件,必须要build.gradle中将控制文件引入
3、各个模块的build.gradle引入1步创建的控制文件
4、动态切换app与library模式
根据控制文件中的参数(该示例为isModule)可动态切换模式
5、分离AndroidMainfest文件
debug中的AndroidMainfest文件为常规配置,包含启动图标、文件等等
模块根目录下的AndroidMainfest文件,不包含启动图标等等,只有基础四大组件声明
6、模块间资源命名冲突
当组件为library时,组件间如果资源名相同会出现冲突,我们只需要保证资源文件不存在同名即可,并且尽量保证模块前缀统一。
7、组件化与butterknife
在使用组件化与butterknife时,会提示元素值必须是常量表达式,因为在主app中,这些id都是常量,但是在组件中,这些id就不是常量了。
官方的解释是从ADT14开始Library中的R文件才从静态常量变为非常量.因为如果在多个Library中可能出现id冲突的问题.在ADT14以前则采用的是将所有的资源文件和相关的代码重新随着主项目一起编译,导致编译速度过慢.因此,从ADT14开始就变成了非常量的id了。
1、项目根目录下添加如下代码:
2、子目录添加如下代码:
3、子目录记得添加依赖:
4、然后在组件中使用butterknife的时候将R替换成R2即可。
---------------------------------------------over-----------------------------------------------
最近在使用kotlin写项目时发现几个坑记录一下:
1、运行app报错 There is no route match the path in group
根据网上的说法都验证了一遍,路径、引入文件都没有问题。
最后发现是使用kotlin时引入语法有些不同
//java项目中
javaCompileOptions {
annotationProcessorOptions {
arguments = [AROUTER_MODULE_NAME: project.getName()]
}
}
//kotlin项目中,使用以下方法
//kotlin特殊
apply plugin: 'kotlin-kapt'
kapt{
arguments {
arg("AROUTER_MODULE_NAME", project.getName())
}
}
2、InstantRun support error, com.android.tools.fd.runtime.Paths
compile 'com.alibaba:arouter-api:x.x.x'
//这里需要改成kapt
kapt 'com.alibaba:arouter-compiler:x.x.x'
...
}