组件化打包的时候,子模块是 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 编译

相关推荐
雨白5 小时前
初识协程: 为什么需要它以及如何启动第一个协程
android·kotlin
heeheeai6 小时前
Kotlinx Serialization 指南
kotlin·序列化
用户0912 小时前
MVI架构如何改变Android开发模式
android·面试·kotlin
小孔龙12 小时前
K2 编译器 - Symbol(符号系统)
kotlin·编译器
phoneixsky1 天前
Kotlin的各种上下文Receiver,到底怎么个事
kotlin
heeheeai1 天前
okhttp使用指南
okhttp·kotlin·教程
Monkey-旭1 天前
Android 注解完全指南:从基础概念到自定义实战
android·java·kotlin·注解·annotation
alexhilton2 天前
如何构建Android应用:深入探讨原则而非规则
android·kotlin·android jetpack
芦半山2 天前
快速应用「幽灵调用」的正式修复
android·gradle
TeleostNaCl2 天前
SMBJ 简单使用指南 实现在 Java/Android 程序中访问 SMB 服务器
android·java·运维·服务器·经验分享·kotlin