Android组件化的过程和文档记录
- 单独开发,单独调试,动态修改gradle配置【done】
- 页面跳转,使用第三方ARouter【done】
- 组件的AndroidManifest.xml,单独调试和发布阶段使用同一个配置,动态删除单独调试的主入口和应用图标。增加应用层调试模块,组件不再单独提供调试功能【done】
- 代码隔离,项目架构向下依赖【done】
- 应用层,依赖复合组件或基础组件,尽量不依赖基础库
- 组件层,基础组件尽量不相互依赖,需要有依赖时,沉淀到基础层;复合组件依赖基础组件,不要依赖同层的复合组件
- 基础层,provider依赖代理库和基础库,代理库依赖基础库
- 资源冲突问题,开发过程中规避此问题,手动添加模块前缀【done】
- 打包AAR,要将依赖都打入包中【todo】
- implementation 模块内使用,其他模块无法访问
- api 参与编译和打包,都可以访问
- compileOnly 只在编译时有效,不会参与打包
- runtimeOnly 只参与打包,编译时不会参与,适合做代码隔离
目标:将多个module的aar或者jar,打包到一个aar。
- android-fat-aar,二三年前更新过,作者不再维护,脚本无法正常运行。
- merge-module,基于fat-aar修改,作者最近半年有更新,项目需求也是对外输出sdk。
- 优点,可以打包依赖AAR中所有资源,满足业务需求。
- 缺点,只支持android gradle 2.2.3,gradle wrap 3.5,不满足高版本gradle需求。
- 测试代码在develop_fat分支
- fat-aar,作者半年前更新过
- 优点,支持android gradle 3.0.1的版本,gradle wrap 4.4
- 缺点,子AAR的资源ID打进去了,但是打包到apk后,子AAR的资源ID变了,运行时找不到
- fataar-gradle-plugin,作者一个月前更新过,Mobbeel公司开源的
- 优点,支持3.1和3.2的gradle版本,可以打包aar和资源id,满足业务需求
- 缺点,无法打包Manifest文件,需要增加patch修复问题
- 测试代码在develop_fataar_plugin分支
- all-in-one
- 简单粗暴办法,将所有子aar拷贝到一个项目中,使用默认的aar打包方式,还是只能生成当前module的aar,不会包含子aar。
- 不能解决将所有aar打包到一个aar的问题
- 综述,建议使用fataar-gradle-plugin进行修改,毕竟是支持高版本的gradle, 满足编译速度和业务需求。