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

如何在自制的AAR文件中包含依赖项?

如何将依赖项打包进AAR文件

默认情况下,Android的AAR文件不会包含开发时依赖的第三方库或模块,只会在对应的POM文件中声明依赖关系。如果需要把依赖直接打包进AAR(也就是构建「Fat AAR」),可以用以下两种方式实现:

方法一:手动编写Gradle任务合并依赖(无需第三方插件)

适用于不想引入额外插件,希望完全自定义打包逻辑的场景。在你的Library模块的build.gradle(Groovy DSL)中添加以下配置:

android {
    // 保留你原有的编译、签名等配置
    defaultConfig {
        // ...
    }
    buildTypes {
        // ...
    }

    // 为每个变体构建Fat AAR任务
    libraryVariants.all { variant ->
        variant.outputs.each { output ->
            // 创建自定义任务,命名规则为assemble[变体名]FatAar,比如assembleReleaseFatAar
            def fatAarTask = tasks.create(
                name: "assemble${variant.name.capitalize()}FatAar",
                type: Jar
            ) {
                // 先把原AAR的所有内容加进来
                from zipTree(output.outputFile)
                
                // 遍历编译依赖,合并所有Jar包
                configurations.compileClasspath.each { file ->
                    if (file.name.endsWith('.jar')) {
                        from zipTree(file)
                    }
                }
                
                // 处理本地AAR依赖,提取其中的classes.jar合并进来
                configurations.compileClasspath.each { file ->
                    if (file.name.endsWith('.aar')) {
                        from zipTree(file).matching {
                            include 'classes.jar'
                        }
                    }
                }
                
                // 设置输出文件名和目录
                archiveFileName.set("${variant.baseName}-fat.aar")
                destinationDirectory.set(file("$buildDir/outputs/aar/fat"))
            }
            
            // 让Fat AAR任务依赖原有的assemble任务,确保先完成常规构建
            fatAarTask.dependsOn variant.assembleProvider.get()
        }
    }
}

配置完成后,运行对应的Gradle任务(比如./gradlew assembleReleaseFatAar),就能在build/outputs/aar/fat/目录下拿到包含依赖的Fat AAR。

方法二:使用第三方Fat AAR插件

如果觉得手动编写任务太繁琐,可以用成熟的第三方插件简化流程,比如fat-aar-android:

  1. 在项目根目录的build.gradle中添加插件依赖:
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.kezong:fat-aar:1.3.8'
    }
}
  1. 在Library模块的build.gradle中应用插件,并将需要打包进AAR的依赖用embed替代implementation:
apply plugin: 'com.kezong.fat-aar'

dependencies {
    // 用embed标记需要打包进AAR的远程依赖
    embed 'com.squareup.okhttp3:okhttp:4.10.0'
    // 本地模块依赖也可以用embed
    embed project(path: ':your-local-library-module')
    
    // 不需要打包的依赖依然用implementation声明
    implementation 'androidx.core:core-ktx:1.10.1'
}

运行常规的assembleRelease或assembleDebug任务,生成的AAR就会包含所有用embed声明的依赖。

注意事项

  • 避免依赖冲突:如果Fat AAR包含的依赖和使用方项目的依赖版本不一致,很可能导致编译失败或运行时崩溃。建议只打包自己维护的本地模块,或版本稳定、兼容性强的基础依赖。
  • 不要打包系统级依赖:比如AndroidX、Jetpack组件这类通用库,通常由使用方自行引入,强行打包会增加AAR体积,还容易引发冲突。
  • 验证打包结果:可以用解压工具打开生成的AAR,检查classes.jar或libs目录下是否包含了目标依赖的内容,确保打包成功。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 11:08:18