Proguard/R8 排除资产文件夹的规则

Proguard/R8 rule to exclude asset folder

我的项目由主模块组成,然后是其他模块依赖项。 一种这样的依赖是 "commons"。 在 "commons" 中有一个名为 "flags" 的资产文件夹。

如果我们事先知道这个文件夹将永远不会被使用,有没有办法编写混淆规则来排除这个特定的 "flags" 文件夹?

在我的项目中,主模块没有使用专门针对此文件夹的 "commons" 模块中的任何代码,但它仍包含在最终包中。

R8 和 Proguard 都不能删除资产,因为这些资产甚至不会作为输入传递给这些工具。此外,即使它们是输入的一部分,查找是否使用资产也是 non-trivial。出于同样的原因,R8 和 Proguard 不会删除 Java 资源(它们可能只会更改其 path/names)。

您的问题的解决方案可能是在应用程序 build.gradle 文件中使用 DSL。即,如果您添加:

android {
  aaptOptions {
    ignoreAssetsPattern "<dir>flags"
  }
}

最终 APK 将不包含 flags 目录下的任何文件。请记住,此选项不是 variant-specific,所有应用程序变体(例如调试、发布)都不会包含这些资产。

希望对您有所帮助。