首页 > 解决方案 > Packagingoptions 如何与 Android App Bundle 配合使用

问题描述

.aab为我的应用程序生成文件时遇到问题。在我的应用程序中,我包含了.aar一个我创建的库文件,用于在多个应用程序之间共享一些基本功能。当我尝试为我的应用程序生成 Android App Bundle 时,它​​失败并出现以下错误。

 A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
   > File 'root/AndroidManifest.xml' uses reserved file or directory name 'AndroidManifest.xml'.

然而,这.apk一代工作得很好。

谷歌搜索了一下后,我找到了一个解决方案,建议将以下块添加到我的应用程序build.gradle文件中。

    packagingOptions {
        exclude 'AndroidManifest.xml'
    }

该解决方案有效,但我不明白为什么会这样。据我了解,exclude 'AndroidManifest.xml'将排除 AndroidManifest 文件包含在.aab文件中。如果这是真的,那么为什么应用程序在没有 AndroidManifest 文件的情况下仍然可以正常工作?

我知道这个问题是由于我使用的库引起的,因为如果我从我的应用程序中删除该库,我能够.aab成功生成而无需添加exclude 'AndroidManifest.xml'我的应用程序的 gradle 文件。

所以我尝试将exclude 'AndroidManifest.xml'块从我的应用程序移动到我的库,重新生成.aar文件并将这个新.aar文件添加到我的应用程序中。这样做之后,当我尝试生成.aab文件时,它也可以正常工作。所以看起来我在哪里添加exclude 'AndroidManifest.xml'(在库或应用程序中)并不重要。两者都产生相同的结果。这让我很困惑,并提示我很多问题。

  1. 我在我的库(.aar)中做错了什么导致.aab文件生成失败File 'root/AndroidManifest.xml' uses reserved file or directory name 'AndroidManifest.xml'.
  2. 为什么添加可以exclude 'AndroidManifest.xml'解决问题?不应该排除AndroidManifest文件会导致应用程序崩溃,因为它没有AndroidManifest?
  3. 为什么添加exclude 'AndroidManifest.xml'在应用程序或库中具有相同的效果?

我认为我的困惑可能源于对 Android App Bundles 如何工作的一些误解。但如果我能得到上述问题的答案,我将不胜感激。

谢谢。

标签: androidandroid-libraryandroid-app-bundle

解决方案


推荐阅读