3

使用 dynamic-feature-modules 可以定义AndroidManifest.xml模块是否应该预先安装:

<dist:module
    ...
    dist:onDemand="false"
    dist:title="@string/title_shop">
    ....
</dist:module>

或不:

<dist:module
    ...
    dist:onDemand="true"
    dist:title="@string/title_shop">
    ....
</dist:module>

我的项目中有两种构建风格。该模块应该预装在一种风格中,而不是另一种风格中。

这个想法是AndroidManifest.xmlmain源集中有这个默认值:

<dist:module
    ...
    dist:onDemand="true"
    dist:title="@string/title_shop">
    ....
</dist:module>

对于应该预先安装模块的构建风格 - 我创建了一个AndroidManifest.xml文件,将该dist:onDemand属性覆盖为false

<dist:module
    ...
    tools:replace="dist:onDemand"
    dist:onDemand="false"
    ...
</dist:module>

不幸的是,这不起作用。清单合并失败并出现以下错误:

合并错误:错误:工具:在第 11 行为属性 dist:onDemand 指定了替换,但没有指定新值商店清单,第 10 行错误:验证失败,正在退出商店清单。

有谁知道这里有什么问题?

4

3 回答 3

1

这个答案对我有用。这个想法是有两个 AndroidManifest.xml 的副本,它们是相同的,除了

<dist:module
    ...
    tools:node="replace"
    dist:onDemand="false">
    ...
</dist:module>

替换了整个元素

于 2019-09-05T09:09:56.437 回答
0

扩展celaeno 的答案

如果我试图让debugrelease(或任何你的两种构建类型是)AndroidManifests 是完整和精确的副本,除了对 dist:onDemand行的更改。这没用。Gradle 对我大喊失踪src/main/AndroidManifest.xml。所以我实际上创建了三个文件:

  1. 主要的
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:dist="http://schemas.android.com/apk/distribution"
    package="com.example.somefeature">

    <application ...>
        <activity
            android:name=...
        </activity>
    </application>
 <!-- NO dist:module block -->
</manifest>
  1. 调试

    <dist:module
        dist:instant="false"
        dist:title="@string/somefeature">
        <dist:delivery>
            <dist:install-time />
        </dist:delivery>
        <dist:fusing dist:include="true" />
    </dist:module>
    

  2. 发布

    <dist:module
        dist:instant="false"
        dist:title="@string/somefeature">
        <dist:delivery>
            <dist:on-demand />
        </dist:delivery>
        <dist:fusing dist:include="true" />
    </dist:module>
    

于 2019-11-26T18:16:02.373 回答
0

清单合并工具通过遵循一些合并启发法来合并每个文件中的所有 XML 元素。如果合并工具发现两个清单包含具有不同值的相同属性,则发生合并冲突。

文档: https ://developer.android.com/studio/build/manifest-merge

于 2019-07-09T12:56:48.430 回答