1、moduleA 依赖 moduleB,将moduleA打包成aar时,未包含 moduleB的resources资源;
方法一:将moduleB的资源,手动拷贝一份到moduleA中;
方法二:使用 fat-aar 插件;
2、fat-aar插件使用的问题:
AGP和Gradle的版本要匹配:
该插件提供了将library以及它依赖的library一起打包成一个完整aar的解决方案,支持AGP 3.0及以上。(目前测试的版本范围是AGP 3.0 - 7.1.0,Gradle 4.9 - 7.3)
- AGP 7.1.0
- Gradle 7.3
classpath 'com.github.kezong:fat-aar:1.3.8'
id 'com.kezong.fat-aar'
embed project(path: ':common')
3、Direct local .aar file dependencies are not supported when building an AAR.
在构建 AAR 时直接依赖了本地的 .aar 文件,而 Android Gradle Plugin 不允许这样做,因为这样会导致最终的 AAR 文件不完整(缺少依赖的类和资源)。
Error while evaluating property 'hasLocalAarDeps' of task ':measure:bundleDebugAar'
> Direct local .aar file dependencies are not supported when building an AAR.
> The resulting AAR would be broken because the classes and Android resources from any local .aar file dependencies would not be packaged in the resulting AAR.
> Previous versions of the Android Gradle Plugin produce broken AARs in this case too (despite not throwing this error).
> The following direct local .aar file dependencies of the :measure project caused this error:
> D:\work\space_work\heart_failure_aar\measure\libs\ICDeviceManager.aar,
> D:\work\space_work\heart_failure_aar\measure\libs\lepu-blepro-1.0.8.aar
解决方案:
方法 1:将本地 .aar 依赖改为 Maven 依赖
如果这些 .aar 文件有对应的 Maven 仓库(如 JCenter、MavenCentral 或私有仓库),可以改为通过 implementation 引入依赖,而不是直接引用 .aar 文件。
方法 2:将 .aar 文件发布到本地 Maven 仓库
如果无法使用远程仓库,可以将 .aar 文件发布到本地 Maven 仓库,然后通过 implementation 引入。
方法3:(自动导入)
AndroidStudio 低于 4.0.0时,将库从libs/目录中删除,然后使用File -> New -> New Module -> Import .JAR/.AAR Package 导入它,最后在库模块的build.gradle文件中引用它:
dependencies {
implementation project(“:imported_aar_module”)
}
方法四:(手动导入)(推荐)
如果您正在使用新版本的Android Studio(4.0.0+),则 Import .JAR/.AAR Package 选项不可用。相反,您必须手动执行它。
整体结构如图:
1、手动创建一个新目录(即:module名),新目录中新建build.gradle文件,放入以下内容中:
configurations.maybeCreate("default")
artifacts.add("default", file('ICDeviceManager.aar'))
2、将 .aar文件放入新目录中,与 build.gradle 文件放在同一级目录下;
3、将新创建的 Gradle 项目添加到 settings.gradle 文件中:
include ':ICDeviceManager'
4、在你的需要用到这些aar的地方,引入这个module:
implementation project(path: ':ICDeviceManager')