Android 组件化场景下多module依赖优雅实践方案,android应用开发实训总结

本文探讨了在Android应用开发中,如何在组件化场景下优雅地处理多module依赖。通过定制依赖规则,实现了既能利用静态包减少编译时间,又能灵活切换为项目依赖进行集成测试。通过改进的依赖描述方式,简化了大规模模块间的依赖管理,提高了开发效率。
摘要由CSDN通过智能技术生成

//APP:

implementation project(‘A’)

implementation project(‘Foo’)

//A:

implementation project(‘B’)

implementation project(‘Bar’)

因为依赖传递性,APP其实依赖了A,Foo,B,Bar。其实就是一颗树中,除去根节点的节点集合。而对于一个非根节点,它被依赖的形式只有两种:

  • 静态包,不需要重新编译,节约编译时间

  • module,需要再次编译,可以运用最新改动

我们可以定义这样一个键值对信息:

project.ext.depRules = [

“B”: “p”,

“A”: “a”

]

"p"代表使用project,"a"代表使用静态包。

并将这颗树的内容表达出来:我们先忽略掉Foo和Bar

project.ext.deps = [

“A” : [

“B”: [

“p”: project(’:B’),

“a”: ‘leobert:B:1.0.0’

]

],

“APP”: [

“A”: [

“p”: project(’:A’),

“a”: ‘leobert:A:1.0.0’

]

]

].with(true) {

A.each { e ->

APP.put(e.key, e.value)

}

}

以A为例,我们可以通过代码实现动态添加依赖:

project.afterEvaluate { p ->

println(“handle deps for:” + p)

deps.A.each { e ->

def rule = depRules.get(e.key)

println(“find deps of A: rule is” + rule + " ,dep is:" + e.value.get(rule).toString())

project.dependencies.add(“compileOnly”, e.value.get(rule))

}

}

同理,对于APP:

project.afterEvaluate { p->

println(“handle deps for:” + p)

deps.APP.each { e ->

def rule = depRules.get(e.key)

println(“find deps of App:rule is” + rule + " ,dep is:" + e.value.get(rule).toString())

project.dependencies.add(“implementation”, e.value.get(rule))

}

}

查看输出:

C
onfigure project :A

handle deps for:project ‘:A’

find deps of A: rule isp ,dep is:project ‘:B’

Configure project :app

handle deps for:project ‘:app’

find deps of App:rule isa ,dep

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值