在Android Studio中如何为各product flavor配置不同的Manifest文件
Android多product flavor独立配置Manifest文件解决方案
适配说明
Android Gradle Plugin 7.0及以上版本调整了Manifest文件的默认校验规则,默认强制要求main sourceSet下存在AndroidManifest.xml,旧版直接在flavor对应目录放置Manifest、删除main目录Manifest的操作不再默认生效,需手动配置sourceSet修改Manifest搜索逻辑。
配置方法
方案1:完全移除main目录Manifest,各flavor使用独立Manifest
在app模块build.gradle的android代码块中添加如下sourceSet配置,原有其他配置(如flavorDimensions、productFlavors等)保持不变:
android { // 原有配置保持不变 flavorDimensions "default" productFlavors{ publicVersion{ dimension "default" } privateVersion{ dimension "default" } } // 新增Manifest路径配置 sourceSets { main.manifest.srcFile 'src/main/AndroidManifest.xml' publicVersion.manifest.srcFile 'src/publicVersion/AndroidManifest.xml' privateVersion.manifest.srcFile 'src/privateVersion/AndroidManifest.xml' } }
配置完成后执行以下操作生效:
- 点击Android Studio右上角
Sync Project with Gradle Files同步项目 - 依次执行菜单栏
Build -> Clean Project、Build -> Rebuild Project清除构建缓存
若同步后仍提示缺少Manifest文件,关闭Android Studio,删除项目根目录下的
.gradle、.idea文件夹和app模块下的build文件夹,再重新打开项目触发同步即可解决缓存导致的配置不生效问题。
方案2:保留极简公共Manifest,自动合并差异化配置
保留main目录下的AndroidManifest.xml,仅写入所有flavor通用的配置(如应用基础权限、application节点公共属性),各flavor的Manifest仅写入差异化配置,AGP会自动合并两份Manifest的内容,该方案适配性更高,不易出现编译异常。
效果校验
打开任意flavor的AndroidManifest.xml,点击编辑器右上角的Merged Manifest标签,确认最终合并后的Manifest内容符合对应flavor的预期,无报错即可正常运行。
内容的提问来源于stack exchange,提问作者user15603244
相关产品推荐
相关产品推荐

