Android 组件化场景下多module依赖优雅实践方案,android面试问题

本文探讨了在Android组件化场景下,如何优雅地处理多module依赖问题。通过分析依赖传递的本质,提出了使用compileOnly与implementation的结合,以及动态管理依赖的方法,解决了静态包依赖和模块化编译的冲突,实现了鱼和熊掌兼得的目标。通过改进依赖描述方式,简化了依赖树的管理,提高了开发效率。
摘要由CSDN通过智能技术生成

leobert

B

1.0.0

aar

org.jetbrains.kotlin

kotlin-stdlib

1.4.21

compile

androidx.core

core-ktx

1.3.2

compile

使用compileOnly方式的并没有被收录到pom文件中,而api和implementation 方式,在pom文件中,都表现为 采用compile的方案应用依赖。

ps:api和implementation在编码期的不同,不是我们讨论的重点,略。

回到我们开始的问题,将library发布时,按照约定,会将library本身的依赖收录到pom文件中。相应的,使用方使用 仓库中的依赖项时,gradle会拉取其对应的pom文件,并添加依赖。

所以,如果我们直接使用一个编译好的静态包,而丢弃了他对应的pom文件时,可能会丢失依赖,出现打包失败或者运行异常。这意味着我们需要人为维护依赖传递

我们记住这些内容,并先放到一边。

下沉后,library会有多个层级

=============================================================================

例如图中:APP => A => B, 即APP依赖A,A依赖B,而A和B都是library

我们知道,对于B,并不会有什么说法,只会出现在A和APP

如果不使用静态包,那么A会声明:

api project(’:B’)

//或者

implementation project(’:B’)

我们先看一下,这样生成的library-A的pom文件

<?xml version="1.0" encoding="UTF-8"?>

<project xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd” xmlns=“http://maven.apache.org/POM/4.0.0”

xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”>

4.0.0

leobert

A

1.0.0

aar

Demo

B

unspecified

compile

会得到groupID是项目名,artifactId是module名,version是未知的一个依赖项。假如我将A编译为静态包并发布到仓库,并运用了pom中的依赖描述,一定会得到无法找到:Demo-B-unspecified.pom 的问题。

当然,这个问题可以通过在APP中重新声明 B的依赖 来解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值