第二天Android系列之组件化Calces

官网

https://github.com/Tangpj/calces-gradle-plugin

什么是组件化

就是将一个App分成多个模块,每个模块都是一个组件(Module),开发过程中我们可以让这些组件相互依赖,或者单独调试部分组件等,但是最终发布的时候就是将这些组件合并成统一的Apk。

为什么要组件化

随着产品的迭代,业务越来越复杂,随之带来的是项目结构复杂度极度增加,此时就会有如下几个问题:

1、业务变化太快,单一的工程业务模块耦合度太高,牵一发动全身
2、对工程作任何修改都需要编译整个工程
3、功能测试和系统测试每次都需要进行
4、团队协作开发存在很多冲突,不得不花费时间和精力进行沟通,影响效率
5、不能灵活的对业务模块进行配置和组装.

使用Calces第三方工具组件化项目

什么是Calces

Android构建工具包,这个工具的主旨是使用脚本自动处理机械化的重复劳动,让开发者专注更有价值的工作。 目前提供自动组件化控制与屏幕适配插件。

组件化构建Gradle插件 插件包的名字叫: component,其中提供了两个组件化辅助插件,分别叫calces.appconfig和calces.modules。 主要的功能是: 提供Gradle配置App依赖的组件、配置组件是否能单独运行、实现多个依赖不同模块的App同时构建等。

官方链接: https://github.com/Tangpj/calces-gradle-plugin

使用方式

1,项目的build.gradle配置plugins依赖

buildscript {
   ...
}
plugins {
   id "calces.appconfig" version "3.3.0-alpha01"
}

构建完成的提示信息:
在这里插入图片描述

2,项目build.gradle配置AppConfig
AppConfig

debugEnable

布尔值 是否开个debug模式,只有当debugEnbale为true时,modules的isRunAlone才能生效。即modoules只能在debug模式中独立启动

apps

String列表 app列表,控制当debug模式为false时的app数量与基础配置

modules

String列表 组件列表,配置需要实现自动组件化控制的组件列表

App(apps里面的配置项)
name

String类型 app的名字,需要和项目路径对应,如果不填写默认为该配置的名字(如配置名为app的话,name则为:name)。导入规则和setting.gradle中的include规则保持一致

modules

String列表 需要依赖的组件列表,通过修改该属性实现依赖不同的组件
dependMethod, String类型 依赖的方法,默认为implementation,一般不需要配置该字段,除非有特殊需求

applicationId

String类型 动态填入applicationId。非特殊情况,建议为空

applicationName

String类型 配置启动Application(对应manifest中的application name属性)
mainActivity, String类型 配置启动Activity,为空则默认为AndroidManifest中的Activity。非特殊情况,建议为空

Modules(modules里的配置项)

name

String类型 与app中的name一致

isRunAlone

布尔值 该组件能否独立启动

applicationId

String类型 独立启动时的applicationId

applicationName

String类型 配置启动Application(对应manifest中的application name属性)

mainActivity

String类型 独立启动的Activity

实际案例

appConfig {

	//调试开关,控制所有app能不能独立运行
    debugEnable true

    apps {
    //注意事项:
    //只设定需要加载的moudle即可,如果设置了启动activity也会和
    //他的清单文件中mainactivity重复.
        app {
            modules ':news',':shop'
        }
    }

	//所有组件
    modules {
    	//注意事项:
    	//如果设定了applicationId 则要删除相关
    	//如果只有modules 则name :'news' 属性不能少
    	//module中的applicationId ,否则就算重复赋值了.
        news {
        	name ':news'
            applicationId "com.fenghongzhang.news"
            mainActivity ".MainActivity"
            isRunAlone true
        }
        shop {
        	name ':name'
            applicationId "com.fenghongzhang.shop"
            mainActivity ".MainActivity"
            isRunAlone true
        }
    }
}

3, 在modules(子模块)引入模块自动化构建插件 (包括app)

apply plugin: 'calces.modules'
把原来的apply plugin: 'com.android.application' 删掉

4, 注意事项:
当app也设定为calces.modules时.
debugEnable false 没有问题.
调试的模式debugEnable true.
会因为没有启动app报错.
那么需要把app的组件改成.

apply plugin: 'com.android.application'

5,提醒:
如果配置没有问题,代码还报错.清空一下项目.

常见问题总结

1.各个组件布局文件名字不能重复.
2.不同的moudle一级不能重复,建议用当前的moudle名称.
3.子模块中gradle中applicationId最好注释掉.
4.清单文件执行的是calces自动生成的,需要手动添加,多个moudle里面的东西不能重复.
5.子模块的清单文件根据项目grdle自动生成的,尤其是启动类.
6.启动moudle的applicaiton需要在项目grdle中进行配置applicationName “.App”.
7.如果启动moudle名称不叫app,需要在项目grdle中手动设置name ":appXX"之类的名字.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

馮贰爺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值