最终编译的清单在我的清单文件中没有screenOrientation。

问题描述 投票:0回答:1

我的最后 AndroidManifest.xml 合并后有一个 screenOrientation 我自己的清单上没有的。合并责备文件有这个。

957-->[:adsmodule] pathtoadsmodule/build/intermediates/library_manifest/googleDebug/AndroidManifest.xml:70:13-36 958 android:screenOrientation="portrait"

所以这就是它的来源,但这个文件本身并没有。screenOrientation 中,其实它有这个。

    <!-- removed screen orientation -->
    <activity
        android:name="some activity"
        android:configChanges="keyboard|orientation"
        android:exported="true"
        android:theme="@android:style/Theme.Translucent.NoTitleBar" >
    </activity>

而在我的最后 AndroidManifest.xml 我看到了这一点。

    <!-- removed screen orientation -->
    <activity
        android:name="some activity"
        android:configChanges="keyboard|orientation"
        android:exported="true"
        android:screenOrientation="portrait"
        android:theme="@android:style/Theme.Translucent.NoTitleBar" >
    </activity>

连我的评论 <!-- removed screen orientation --> 是有的,但它却有 screenOrientation 所以我就是不明白发生了什么。

如果我搜索 build 名录 adsmodule我找不到任何带字的东西。portrait 在其中。那么它是在哪里被插入的呢?

我已经清理了,并且多次清除缓存和失效,所以我认为不是这个问题。

android android-manifest
1个回答
0
投票

为了从一个优先级较低的manifest中删除一个不受你控制的属性,你可以在你的manifest中使用一个节点标记,如 tools:node="remove"。这将覆盖合并的启发式方法。

在您的清单中声明以下内容。

<activity
    android:name="some activity">
      <meta-data android:screenOrientation="portrait"
  tools:node="remove"/>
</activity>

这将从合并的清单中删除活动 "some activity "中的screenOrientation项。

在这里了解更多。https:/developer.android.comstudiobuildmanifest-merge#merge_rule_markers。


0
投票

清单合并工具将所有的 XML 遵循一些合并的启发式方法,并遵守您用特殊的 XML 属性。本页介绍了清单合并的工作原理以及如何应用合并首选项来解决合并冲突。

合并工具根据每个清单文件的优先级依次合并所有清单文件,从而将所有清单文件合并为一个文件。例如,如果您有三个清单文件,最低优先级的清单会被合并到下一个最高优先级的清单中,然后再将其合并到最高优先级的清单中。

enter image description here

我邀请您阅读更多关于 合并冲突启发式方法 从官方文件中更好地了解您的案件的实际情况。

© www.soinside.com 2019 - 2024. All rights reserved.