Android Manifest中tools:replace不生效,多Flavor下Activity方向未变更
以下是几个排查和解决的方向:
确认tools命名空间已声明
必须在你的Flavor的AndroidManifest.xml根节点添加tools命名空间,否则所有tools前缀的属性都不会生效:<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="你的包名">检查Flavor目录结构是否正确
确保第二个Flavor的AndroidManifest.xml放在正确的目录下:src/[你的第二个Flavor名称]/AndroidManifest.xml,只有这样构建工具才会在编译对应Flavor时合并这个Manifest文件。排查代码中动态设置屏幕方向的逻辑
如果你的MyActivity代码里有类似以下代码,会直接覆盖Manifest的配置:setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);检查onCreate、onResume等生命周期方法,移除或根据Flavor动态调整这段代码。
查看合并后的Manifest结果
在Android Studio中打开主Manifest文件,切换到Merged Manifest标签,搜索MyActivity的配置,查看最终生效的android:screenOrientation值,确认是被主Flavor覆盖还是第二个Flavor的配置未被合并进来。验证tools:replace的正确性
确保tools:replace属性值拼写正确,你的配置里tools:replace="android:screenOrientation"的写法没问题,若有多个属性需要替换,用逗号分隔即可,比如tools:replace="android:screenOrientation,android:theme"。
内容的提问来源于stack exchange,提问作者Ping Chung Long

