Android打aar包问题总结

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、新的解决方案:

3.1、支持 Gradle 8.0

其他开发者(aasitnikov)单独fork了一个仓库来进行维护,支持 AGP8.0+:

aasitnikov 维护的: fat-aar-android

buildscript {
    repositories {
        maven {
            setUrl("https://jitpack.io")
            content {
                includeGroup("com.github.aasitnikov")
            }
        }
    }
    dependencies {
        classpath("com.github.aasitnikov:fat-aar-android:1.4.4")
    }
}


apply plugin: 'com.kezong.fat-aar'

// aar dependency
embed project(path: ':lib-aar', configuration: 'default')

3.2、安卓官方 AGP8.1.2

安卓官方版fat-aar:使用Fused Library将多个Android库发布为一个库

4、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')
<think>嗯,用户问的是如何在Android项目中导入AAR。首先,我需要确认用户对Android开发的基本概念是否了解。AARAndroid Archive,类似于JAR,但含额外的资源如布局、资源文件等。用户可能已经知道这些,但为了确保,我应该在回答中简要提到AAR的作用,这样新手也能理解。 接下来,用户可能需要具体的步骤。通常,导入AAR的方法有两种:本地导入和远程仓库。本地的话,用户需要将AAR文件放到libs目录,然后在build.gradle中添加依赖。这里需要注意是否正确配置了flatDir仓库,以及依赖的语法是否正确。我应该详细说明每一步,避免用户遗漏关键点,比如文件存放位置或依赖声明的正确格式。 另外,用户可能遇到的常见问题,比如无法找到库,或者资源冲突。这时候需要提醒用户检查文件路径、依赖配置是否正确,以及是否有重复的库。同步项目后是否出现错误也是需要关注的。 还有,远程仓库的情况虽然用户没问,但可能有些用户不知道可以通过Maven仓库引入,可以简单提一下,但主要聚焦在本地导入。可能用户手头有本地的AAR文件,所以重点放在本地步骤。 另外,需要注意Gradle版本是否兼容,以及是否需要重新同步项目。最后,建议用户在导入后验证是否成功,比如引用库中的类或资源,确认没有错误。总结时要简明扼要,确保用户按照步骤操作能顺利导入,并解决可能出现的问题。</think>在Android开发中导入AAR的步骤如下(结构清晰,分步说明): 一、准备AAR文件 1. 将需要导入的`.aar`文件放入项目目录: `项目名/app/libs/your_library.aar` (若无libs目录需手动创建) 二、配置项目级build.gradle 1. 打开`项目名/build.gradle` 2. 在`allprojects/repositories`中添加: ```groovy flatDir { dirs 'libs' } ``` 完整示例: ```groovy allprojects { repositories { google() jcenter() // 添加本地库路径 flatDir { dirs 'libs', project(':app').file('libs') } } } ``` 三、配置模块级build.gradle 1. 打开`app/build.gradle` 2. 在`dependencies`块中添加: ```groovy implementation(name: 'your_library', ext: 'aar') ``` 或完整格式: ```groovy implementation files('libs/your_library.aar') ``` 四、同步项目 1. 点击Android Studio顶部工具栏的`Sync Project with Gradle Files`按钮 2. 等待同步完成(观察Build输出窗口是否报错) 五、验证导入 1. 尝试在代码中引用AAR中的类或资源 2. 如果编译通过且运行时无异常,说明导入成功 常见问题处理: 1. 如果提示找不到库: - 检查文件路径是否正确 - 确认`build.gradle`配置是否同步 2. 资源冲突: - 检查是否导入了不同版本的相同库 3. 建议使用正式版本号命名: `your_library-v1.0.0.aar` 注意:对于远程仓库的AAR(如Maven Central),可以直接使用: $$implementation 'com.example:library:1.0.0'$$ 但此方式需要对应仓库已配置在`repositories`中
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唐诺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值