收到此错误“模块‘base’和‘moduleA’包含具有不同内容的条目‘res/drawable/xyz.xml’。”

Chi*_*ike 2 android android-app-bundle dynamic-delivery dynamic-feature-module

moduleA 是一个具有依赖关系的动态功能模块,它是一个 aar lib。

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation project(':app')
    implementation(name:'lib', ext:'aar')
}
Run Code Online (Sandbox Code Playgroud)

它构建成功并安装在模拟器上,但每当我想创建应用程序包时,都会收到以下错误:

Modules 'base' and 'moduleA' contain entry 'res/drawable/xyz.xml' with different content.
Run Code Online (Sandbox Code Playgroud)

如果我应该在应用程序模块中重命名 xyz.xml,则会收到错误:

../moduleA/build/intermediates/metadata_feature_manifest/fullDebug/processFullDebugManifest/metadata-feature/AndroidManifest.xml:61:13-63:50: AAPT: error: resource drawable/xyz (aka my.app.main.drawable/xyz) not found.
Run Code Online (Sandbox Code Playgroud)

这是Plaid 的模块化文章中强调的问题之一。

为了解决这个问题,我必须在应用程序模块中创建一个空的 xyz.xml,但是在创建应用程序包时,我收到错误:

Modules 'base' and 'moduleA' contain entry 'res/drawable/xyz.xml' with different content.
Run Code Online (Sandbox Code Playgroud)

问题是什么以及如何解决?

key*_*fer 6

删除后,base/.../xyz.xml您将无法从基本模块(应用程序)访问它。
如果您重命名base/.../xyz.xml为,base/.../zzz.xml则还必须更改对其的引用。

如果您根本不访问 base/.../xyz.xml基本模块,则可以删除该文件。然后,您必须确保所有导入都指向而不是base.R.drawable.xyz指向feature.R.drawable.xyz

如果两个文件实际上可能相同,请删除feature/.../xyz.xml并确保仅导入base.R.drawable.xyz.

如果两个文件必须不同,请重命名其中一个并确保导入正确。

  • 如果两个第三方库使用相同的资源名称怎么办?就我而言,基础模块中的库 A(由基础模块引用和需要)和动态功能模块中的 AAR 库具有同名的资源。显然,重命名不是一个选项,因为它们是库。将 AAR 移至基本模块也是不可能的,因为它的大小是我们将其放入单独的按需模块的主要原因。有问题的资源是一些动画:“模块‘base’和‘dynamicfeature’包含具有不同内容的条目‘res/anim/shake.xml’。” (2认同)