从多模块项目构建库
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
模块依赖于少数其他模块,例如domain
、base-android
、data
等等,似乎所有这些模块都不包含在aar
文件中.
起初我以为将这些模块的 implementation
更改为 api
会解决问题,但事实并非如此。
我的问题是:在构建 aar
库时我是否遗漏了什么?我认为如果在一个项目的模块中包含某些东西时效果很好,那么在创建 aar
文件后它也应该像这样工作,但似乎不是。
【问题讨论】:
【参考方案1】:您收到 ClassNotFoundException,因为您的模块的 aar 不包含您的其他子模块的代码或 aar 文件。要解决此问题,您可以查看此 gradle 插件,该插件将自动将所有子模块的 arr 包含到您的主模块中。查看胖 AAR,这是链接:https://github.com/kezong/fat-aar-android
【讨论】:
以上是关于从多模块项目构建库的主要内容,如果未能解决你的问题,请参考以下文章