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

Android多构建变体项目如何跨模块访问复用已有模块

Android多构建变体复用已有模块落地指南

直接复制代码目录的维护成本极高,以下两种方案均可以实现修改一次wallet模块代码,同时在wallet和companion两个构建变体中生效,适配你当前main为公共源集、verify为独立源集的项目结构。


方案一:源集路径映射(改动最小,适配当前结构)

Android Gradle插件原生支持给单个构建变体配置多个代码/资源加载路径,不需要调整现有文件目录,只需要修改app模块下的build.gradle配置即可:

  • 先确认你已经在配置中声明了所有构建变体:
android {
    // 省略compileSdk、defaultConfig等基础配置
    productFlavors {
        verify {}
        wallet {}
        companion {}
    }
}
  • 新增sourceSets配置,让companion变体编译时自动加载wallet源集下的所有文件:
android {
    // 上述productFlavors配置保留
    sourceSets {
        companion {
            // 追加wallet的Kotlin/Java代码目录
            java.srcDirs('src/wallet/java', 'src/companion/java')
            kotlin.srcDirs('src/wallet/kotlin', 'src/companion/kotlin')
            // 追加wallet的资源目录
            res.srcDirs('src/wallet/res', 'src/companion/res')
            // 若有assets、jniLibs、aidl等其他目录需要复用,按相同规则追加即可
            // AndroidManifest建议优先使用companion目录下的文件,系统会自动做清单合并
            manifest.srcFile 'src/companion/AndroidManifest.xml'
        }
    }
}

配置优先级说明:如果companion和wallet目录下存在同包名同类名的代码、同名资源,构建时会优先使用companion目录下的文件,你可以直接在companion目录下编写需要差异化的逻辑覆盖默认实现,不需要改动wallet的原有代码。


方案二:独立公共模块抽离(适合长期迭代场景)

如果后续还会有更多构建变体需要复用钱包相关逻辑,可以把通用能力抽成独立本地依赖模块:

  • 新建名为feature-wallet的Android Library模块,将src/wallet目录下无差异化的通用代码、资源全部迁移到该模块中
  • 配置变体依赖,仅给需要钱包能力的变体添加模块依赖:
dependencies {
    // 原有main公共依赖、verify变体依赖保持不变
    walletImplementation project(':feature-wallet')
    companionImplementation project(':feature-wallet')
}
  • wallet和companion两个源集目录下,仅保留各自独有的差异化逻辑即可,后续修改feature-wallet中的代码,所有依赖该模块的变体会自动同步生效。

选型参考

  • 如果companion和wallet的逻辑重合度在80%以上,仅存在少量差异化点,优先选择方案一,不需要迁移现有代码,配置完成即可生效,维护成本最低
  • 如果后续钱包能力会被3个及以上变体复用,且不同变体的差异化逻辑占比会持续提升,选择方案二,模块边界更清晰,耦合度更低

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 12:19:51