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

Android构建:如何添加额外AndroidManifest.xml并与现有清单合并?

Android多Manifest文件合并解决方案

问题描述

项目目录结构如下:

app/
├─ src/
│  ├─ flavor_1/
│  │  ├─ AndroidManifest.xml
│  ├─ flavor_2/
│  │  ├─ AndroidManifest.xml
│  ├─ flavor_3/
│  │  ├─ AndroidManifest.xml
│  ├─ main/
│  │  ├─ AndroidManifest.xml
│  ├─ shared_feature/
│  │  ├─ main/
│  │  │  ├─ AndroidManifest.xml // 需要加入合并流程
│  │  │  ├─ java/
│  │  │  ├─ res/

目前main与各flavor专属的AndroidManifest.xml可正常合并,但需要将shared_feature/main/AndroidManifest.xml也加入合并,且不能忽略原flavor的Manifest文件。

错误方案分析

常见的manifest.srcFile写法会直接覆盖flavor的Manifest路径,导致原flavor的Manifest被忽略:

android {
    sourceSets {
        flavor_1 {
            java.srcDirs += 'src/shared_feature/main/java'
            res.srcDirs += 'src/shared_feature//main/res'
            manifest.srcFile = 'src/shared_feature//main/AndroidManifest.xml' // 此处会覆盖原flavor的Manifest
        }
    }
}

正确解决方案

使用manifest.srcDirs添加目录而非替换文件,Gradle会自动合并该目录下的Manifest与原flavor、main的Manifest:

逐个配置flavor

android {
    sourceSets {
        flavor_1 {
            java.srcDirs += 'src/shared_feature/main/java'
            res.srcDirs += 'src/shared_feature/main/res'
            manifest.srcDirs += 'src/shared_feature/main' // 添加shared_feature的Manifest目录
        }
        flavor_2 {
            java.srcDirs += 'src/shared_feature/main/java'
            res.srcDirs += 'src/shared_feature/main/res'
            manifest.srcDirs += 'src/shared_feature/main'
        }
        flavor_3 {
            java.srcDirs += 'src/shared_feature/main/java'
            res.srcDirs += 'src/shared_feature/main/res'
            manifest.srcDirs += 'src/shared_feature/main'
        }
    }
}

批量配置所有flavor(推荐)

通过遍历所有product flavor,减少重复代码:

android {
    // 先定义你的product flavors
    productFlavors {
        flavor_1 {}
        flavor_2 {}
        flavor_3 {}
    }

    sourceSets {
        productFlavors.all { flavor ->
            flavor.java.srcDirs += 'src/shared_feature/main/java'
            flavor.res.srcDirs += 'src/shared_feature/main/res'
            flavor.manifest.srcDirs += 'src/shared_feature/main'
        }
    }
}

合并优先级说明

Manifest的合并优先级从高到低为:flavor专属Manifest > shared_feature的Manifest > main的Manifest,即高优先级的配置会覆盖低优先级的重复配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 07:12:56