You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将相互依赖的多个AAR打包为单个Maven库并解决引用报错?

解决方案

我来帮你搞定这个问题,这是Android库发布到Maven时很常见的依赖传递和资源打包问题,给你几个可行的方案,你可以根据自己的需求选择:

方案1:将AAR1和AAR2一同上传至Maven仓库

问题的核心是:当你在新项目里引用LibraryA时,transitive=true会尝试拉取它声明的依赖(也就是AAR1和AAR2),但这两个模块并没有上传到Maven仓库,自然会找不到。另外资源找不到的问题,也是因为这两个AAR没被正确拉取,它们的资源无法合并到新项目中。

解决步骤:

  • 给AAR1和AAR2各自配置Maven发布,和LibraryA上传到同一个仓库。
  • 在每个模块(AAR1、AAR2、LibraryA)的build.gradle中添加maven-publish插件,并配置发布信息:
plugins {
    id 'com.android.library'
    id 'maven-publish'
}

android {
    // 你的Android库配置,比如compileSdk、defaultConfig等
    defaultConfig {
        // 记得给每个模块设置groupId、version
        group = 'com.example'
        version = '1.0.0'
    }
}

publishing {
    publications {
        release(MavenPublication) {
            from components.release
            // 每个模块的artifactId要唯一,比如AAR1的artifactId设为"AAR1",AAR2设为"AAR2"
            artifactId = 'AAR1'
        }
    }
    repositories {
        maven {
            url = uri("你的Maven仓库地址,比如本地路径或者远程仓库")
            // 如果是私有仓库,添加凭证
            credentials {
                username = "你的用户名"
                password = "你的密码"
            }
        }
    }
}
  • 配置完成后,依次执行每个模块的publishReleasePublicationToMavenRepository任务,把三个模块都传到Maven。
  • 之后新项目引用LibraryA时,只需要正常声明依赖(transitive=true是默认值,甚至可以不用写):
implementation 'com.example.LibraryA:1.0.0@aar'

这样gradle会自动拉取AAR1和AAR2,资源也会正常合并。

方案2:将AAR1和AAR2合并到LibraryA中(单一AAR输出)

如果不想单独维护AAR1和AAR2的Maven发布,可以把它们的代码、资源全部合并到LibraryA的AAR里,做成一个独立的库。这里可以用第三方插件fat-aar来实现:

步骤:

  1. 在项目根目录的build.gradle中添加插件依赖:
buildscript {
    dependencies {
        classpath 'com.kezong:fat-aar:1.3.8'
    }
}
  1. 在LibraryA的build.gradle中应用插件,并修改依赖声明为embed:
plugins {
    id 'com.android.library'
    id 'com.kezong.fat-aar'
}

android {
    // 你的LibraryA配置
}

dependencies {
    // 用embed替代compile/implementation,把AAR1和AAR2合并到LibraryA中
    embed project(':AAR1')
    embed project(':AAR2')
}
  1. 打包LibraryA并上传到Maven,此时生成的AAR已经包含了AAR1和AAR2的所有代码和资源,新项目引用时不需要额外依赖这两个模块,自然不会出现找不到的问题。

额外排查点(如果选方案1仍出现资源问题)

如果上传了AAR1/AAR2后还是找不到资源,可以检查:

  • 确认AAR1和AAR2的build.gradle中,sourceSets配置正确,res目录被正确识别:
android {
    sourceSets {
        main {
            res.srcDirs = ['src/main/res']
        }
    }
}
  • 确认新项目的build.gradle中添加了正确的Maven仓库地址,能访问到AAR1和AAR2。
  • 清理gradle缓存(执行./gradlew clean build --refresh-dependencies),避免缓存导致的问题。

内容的提问来源于stack exchange,提问作者Cheng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:53:07