组件化打包的时候,子模块是 Libary库模块中libs包含aar的时候遇到的问题

开门见山 1、

我有一个基础组件,是个基础子模块,库模块

上面图一是这个库模块对于libs的引用方式。 我的原想法是,把libs 放到子基础模块中,其他模块可以通过依赖它,间接使用libs中的文件。 但是就出现了问题;

具体问题情况: 1、编译的时候可以,就是Androidstudio直接运行,是可以正确编译的,但是如果通过gradle 打包apk,就会报错 。

即:Direct local .aar file dependencies are not supported when building an AAR. 我依赖了很多aar,我拿其中一个aar的报错举例

注意 出现上面问题的细节点 1、只有aar这么以来会出现问题 2、libs 中包含aar,如果放在Library的模块中被 applicaton的模块或其他Library引用会出现这个问题

问题解释:

该错误的核心是:在构建一个 AAR 类型的模块(即你的项目模块本身是要打包成 AAR 供其他项目引用)时,不支持直接依赖本地的 .aar 文件(例如放在 libs 目录下的本地 AAR)。 这是因为 AAR 作为 Android 库的分发格式,需要保证依赖的「可传递性」------ 如果你的 AAR 直接依赖本地 AAR,其他项目引用你的 AAR 时,会缺失这个本地 AAR 依赖(本地文件无法随你的 AAR 一起分发),导致依赖断裂。Gradle 为了避免这种问题,直接禁止了构建 AAR 时使用本地 AAR 直接依赖

换句话说就是不能这么写,aar它不支持本地依赖

解决方式: 方式一

1、子组件 Libray库中如上图,子组件中存在libs目录,内含aar文件,可以改成compileOnly方式,只参与编译,不会输出文件,如上图

方式二

2、对于如果libs中aar不是很多的情况下,可以采用上图方式,单独起一个module library的子组件,组件下,只需要 1、放这个aar文件,2,如上图写build.gradle文件。file 名字要和aar的名字一致。default 是默认的,你也可以改,但是要一致

有几个aar 就生成几个module组件。所以,我说对于不是很多的aar情况下,就可以用子组件的方式,起module来实现aar的依赖

这样,其他模块包括上层app 模块就可以implementation的方式依赖aar了。

最后,记得在setting.gradle中记得添加include 编译

相关推荐
逐光老顽童2 天前
Java 与 Kotlin 混合开发避坑指南:30 个真实案例实录
android·kotlin
plainGeekDev2 天前
null 判断 → Kotlin 可空类型
android·java·kotlin
plainGeekDev2 天前
getter/setter → Kotlin 属性
android·java·kotlin
Junerver2 天前
我写了一个 Compose Multiplatform 组件库,你可能会用到
kotlin·android jetpack
Ehtan_Zheng3 天前
Kotlin const val vs val:字节码、性能与隐藏陷阱详解
android·kotlin
zhangphil3 天前
大日志文件截取,从指定日志文件中提取两个标记字符串之间的全部内容,Kotlin
kotlin
朝星4 天前
Android开发[14]:网络优化之OkHttp
android·okhttp·kotlin
AI浩4 天前
模型剪枝与稀疏推理:结构化、非结构化、2:4 稀疏与大模型压缩(分层式精讲)
android·kotlin·剪枝
QING6185 天前
Kotlin 日常开发常用语法糖整理 —— 速记
android·kotlin·android jetpack
popcorn_min5 天前
共享单车需求预测:时间特征工程 + 随机森林,R² 达到 0.931
随机森林·r语言·kotlin