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

本地模块依赖及POM发布问题:需将模块B嵌入模块A的aar

把模块B打包进模块A的aar解决方案

方法一:调整Gradle依赖配置,合并模块B到A的aar里

在模块A的build.gradle(Groovy版)或者build.gradle.kts(Kotlin版)里做两处修改:

  1. 替换原有依赖写法:
    把
    implementation project(':B')
    
    改成
    implementation project(path: ':B', configuration: 'default')
    
    Kotlin版对应修改为:
    implementation(project(":B", "default"))
    
  2. 添加打包配置避免冲突:
    在android代码块中加入以下配置,确保重复的资源、类能正常合并:
    android {
        // 保留原有其他配置
        packagingOptions {
            mergeDuplicates true
            exclude 'META-INF/*.kotlin_module' // 可选操作,减少重复Kotlin模块文件引发的冲突
        }
    }
    

方法二:直接合并模块B的代码到A中

如果模块B不需要被其他模块复用,直接把B的全部源码、资源文件移动到模块A的对应目录下:

  • 比如将B的src/main/java内的代码迁移至A的src/main/java目录,资源文件迁移至A的src/main/res目录
  • 随后删除模块A中对:B的依赖声明,编译A时就会把所有代码统一打包成aar

方法三:用Shadow插件打包纯代码模块(仅限Java/Kotlin模块)

若模块B是纯Java/Kotlin编写、不含Android资源的模块,可以借助Shadow插件将其合并进A的aar:

  1. 先在项目根目录的build.gradle中添加插件依赖:
    buildscript {
        repositories {
            mavenCentral()
        }
        dependencies {
            classpath 'com.github.johnrengelman.shadow:shadow-plugin:8.1.1'
        }
    }
    
  2. 再到模块A的build.gradle中配置插件:
    apply plugin: 'com.github.johnrengelman.shadow'
    
    shadowJar {
        // 引入模块B的编译产物
        from project(':B').sourceSets.main.output
        // 将合并后的文件输出到A的编译目录,确保打包aar时能包含
        destinationDir file("$buildDir/intermediates/aar_main_jar")
    }
    
    // 让编译任务依赖shadowJar,确保B的代码先被合并
    tasks.withType(JavaCompile) {
        dependsOn shadowJar
    }
    

注意:方法一和方法三可能会遇到重复类、资源的冲突问题,需要提前检查两个模块的文件命名;方法二最为直接,适合不需要单独维护模块B的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 00:20:01