Android 多模块项目本地aar文件打包异常

1,087 阅读2分钟

项目简述

目前穿山甲聚合广告66xx版本暂不支持maven命令集成,需手动集成aar文件.

但我的项目是一个多modlue的项目,不同modlue之间都需要引用穿山甲本地的aar文件.

为了每个modlue之间都能有引用到穿山甲sdk,我最开始是将穿山甲全部的sdk单独抽离成一个广告modlue,此时运行和打包debug包都是正常的,但是想打包正式release包上架的时候就会报错

报错信息

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 :
core:ads project caused this error: 
core\ads\libs\circleimageview-2.2.0.aar,
code\ying-teng\core\ads\libs\LayoutManagerGroup.aar, 
core\ads\libs\open_ad_sdk.aar, 
core\ads\libs\tools-release.aar, 
core\ads\libs\adn\Baidu_MobAds_SDK_v9.36.aar, 
core\ads\libs\adn\GDTSDK.unionNormal.4.580.1450.aar, 
core\ads\libs\adn\klevinSDK_2.11.0.3.aar, 
core\ads\libs\adn\kssdk-ad-3.3.66.aar, 
core\ads\libs\adn\windAd-4.17.1.aar, 
core\ads\libs\adn\unity-ads-4.3.0.aar

报错解析:

app-modlue里面存在aar文件就可以,但是构建AAR时不支持直接本地 •aar 文件依赖项(也就是modlue里面不能放.aar)

解决方法

  1. 在项目的根目录下创建一个文件夹,注意不是modlue

image.png

  1. 将本地 .aar 放入创建的文件夹目录中

image.png

  1. 在本地 aar 目录下创建一个名为 build.gradle.kts的文件

image.png

image.png

  1. 在 build.gradle.kts 中添加以下代码,并将open_ad_sdk.aar 替换为您的 aar 名称。单击Sync Now立即同步
configurations.maybeCreate("default")
artifacts.add("default",file("open_ad_sdk.aar"))

configurations.maybeCreate("debug")
artifacts.add("debug",file("open_ad_sdk.aar"))

configurations.maybeCreate("release")
artifacts.add("release",file("open_ad_sdk.aar"))

5. 将本地 aar 目录包含在您的主项目setting.gradle.kts 中。单击Sync Now立即同步

include(":my-local-sdk")

6. 在需要引用的Module build.gradle中引入本地aar文件夹

implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.aar"))))
implementation(project(":my-local-sdk"))

拓展

问题: 如果有多个.aar文件是否可以直接在my-local-sdk文件夹里面添加

答: 不能,多个aar文件的时候需要创建多个同一级别的my-local-sdk文件,例如:my-local-sdk1,my-local-sdk2,my-local-sdk3...等等

文章参考引用: