最近公司在搞组件化,先占个坑
Arouter 1.5.1 targetversion 28
组件化注意事项:
一、组件模式和集成模式的转换
AndroidStudio中的Module主要有两种属性,分别为:
1、application属性,可以独立运行的应用程序,就是一个app
apply plugin: ‘com.android.application’
2、library属性,不可以单独运行,一般是依赖的库文件
apply plugin: ‘com.android.library’
以module-g21举例,在根目录gradle.properties里设置isModuleRun=true,控制module里的设置项,单module可以作为独立应用打包生成apk,方便日常debug,具体操作可以看module-g21里的事例
二、组件之间AndroidManifest合并问题
创建多个manifest文件,单独使用和集成使用时切换
同样以module-g21举例,使用module根目录与debug文件下双manifest文件,通过不同场景没使用不同manifest文件,debug下要包含权限、application等设定,作为子module时则不设置,使用主module里的设置
三、全局Context的获取及组件数据初始化
创一个Common 组件,这个组件中主要封装了项目中需要的基础功能,并且每一个业务组件都要依赖Common组件,在Common组件中我们封装了项目中用到的各种Base类,这些基类中就有BaseApplication 类。
BaseApplication 主要用于各个业务组件和app壳工程中声明的 Application 类继承用的,只要各个业务组件和app壳工程中声明的Application类继承了 BaseApplication,当应用启动时 BaseApplication 就会被动实例化,这样从 BaseApplication 获取的 Context 就会生效,也就从根本上解决了我们不能直接从各个组件获取全局 Context 的问题。
四、library依赖问题
Common组件中根据组件名排除或者根据包名使用exclude排除重复库
单独module里也可以使用exclude排除独立运行时单独添加的库
五、组件之间调用和通信
通过各个模块的gradle配置,来改变各自需要的设置项,引进ARouter,用于组件间跳转,用于管理路由跳转的类为ARouterManager,设置module与activity等值,统一管理
六、组件之间资源名冲突
需要拆分和日后开发时注意,各组件添加独有的前缀
遇见的问题:
1、Multiple dex files define Lcom/alibaba/android/arouter/routes/ARoutertest;
第一个“/”后面的路径名称不要重复,每个module使用单独统一的路径名称,第二个“/”后的可以重复