从多模块项目构建库

Posted

技术标签:

【中文标题】从多模块项目构建库【英文标题】:Building aar library from multimodule project 【发布时间】:2020-10-02 13:58:53 【问题描述】:

我有一个多模块 android 项目,其中有一个名为 app 的模块,它是 Android 应用程序,其中包含 features,其中每个 feature 是单独的模块。

我想将其中一个功能模块提取为aar 库。

我从在项目中创建一个 demo 应用程序开始,该应用程序将我的功能模块作为依赖项:

implementation project(':player')

我调整了应用程序的代码以使其正常工作,并且在项目内的我的演示应用程序中它按预期工作。

我的下一步是构建aar 文件并将其包含在单独的项目中。我是通过使用任务做到的:

Gradle -> player -> 任务 -> 构建 -> 构建

在新项目中导入创建的aar 文件后,我收到很多java.lang.ClassNotFoundException 异常,因为player 模块所依赖的模块中的类不在生成的.jar 文件中。

我没有提到,但是player 模块依赖于少数其他模块,例如domainbase-androiddata 等等,似乎所有这些模块都不包含在aar 文件中.

起初我以为将这些模块的 implementation 更改为 api 会解决问题,但事实并非如此。

我的问题是:在构建 aar 库时我是否遗漏了什么?我认为如果在一个项目的模块中包含某些东西时效果很好,那么在创建 aar 文件后它也应该像这样工作,但似乎不是。

【问题讨论】:

【参考方案1】:

您收到 ClassNotFoundException,因为您的模块的 aar 不包含您的其他子模块的代码或 aar 文件。要解决此问题,您可以查看此 gradle 插件,该插件将自动将所有子模块的 arr 包含到您的主模块中。查看胖 AAR,这是链接:https://github.com/kezong/fat-aar-android

【讨论】:

以上是关于从多模块项目构建库的主要内容,如果未能解决你的问题,请参考以下文章

iOS 测试目标构建中断,没有为正确的架构构建库

xcode maven插件无法构建库

从多项目点网核心解决方案构建 Docker 映像

使用单个命令从多模块项目运行所有 UI/单元测试

Build Libraries for Distribution” 变成“Yes” Swift

使用未定义的引用构建库归档