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

相关推荐
明川15 小时前
Android Gradle - ASM + AsmClassVisitorFactory插桩使用
android·前端·gradle
starrycode8881 天前
【每日一个知识点】Kotlin基础语法核心学习笔记
笔记·学习·kotlin
alexhilton1 天前
学会在Jetpack Compose中加载Lottie动画资源
android·kotlin·android jetpack
用户69371750013842 天前
29.Kotlin 类型系统:智能转换:类型检查 (is) 与类型转换 (as)
android·后端·kotlin
用户69371750013842 天前
30. Kotlin 扩展:为“老类”添“新衣”:扩展函数与扩展属性
android·后端·kotlin
ForteScarlet2 天前
如何解决 Kotlin/Native 在 Windows 下 main 函数的 args 乱码?
开发语言·windows·kotlin
starrycode8882 天前
【每日一个知识点】Kotlin开发基础知识
ui·kotlin
愤怒的代码2 天前
深入理解 IdleHandler:从启动优化到内存管理
android·架构·kotlin
Kapaseker2 天前
一万四千字重温 Android 四大组件
android·kotlin
我爱烤冷面2 天前
kotlin项目实现Java doc的方案:使用Dokka
java·开发语言·kotlin·dokka