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

相关推荐
Kapaseker1 天前
别再只用 Loading、Success、Error 表示所有页面状态了
android·kotlin
雨白2 天前
深入理解 Kotlin 协程 (九):互通有无,解构 Channel 缓冲策略与底层无锁机制
android·kotlin
Coffeeee2 天前
AGP9.0的主要变更项,给Gradle来一次大变样
android·前端·gradle
蜡台3 天前
Android WebView 设计指南
android·java·kotlin
Kapaseker3 天前
深入理解 Compose 副作用
kotlin
雨白4 天前
深入理解 Kotlin 协程 (八):拾遗补阙,探秘官方框架的调度细节与取消闭环
android·kotlin
GitLqr4 天前
别被“Flutter 传感器延迟 150ms”带偏了:这可能只是你的实现方式错了
flutter·架构·kotlin
我命由我123454 天前
Android 在构建过程中,发现有两个依赖库都包含了相同路径的资源文件
android·java·开发语言·java-ee·kotlin·android-studio·android runtime
Coffeeee4 天前
谷歌的一个优化建议,让我重新学了一遍Android里面如何正确处理位图
android·google·kotlin
减瓦5 天前
Gradle 版本演进全景:构建工具的进化密码
java·gradle