我的项目由主模块组成,然后是其他模块依赖项。一种这样的依赖是“公地”。假设在“commons”中有一个名为“flags”的资产文件夹。
如果我们事先知道这个文件夹永远不会被使用,有没有办法编写一个 proguard 规则来排除这个特定的“flags”文件夹?
在我的项目中,主模块不使用“commons”模块中专门针对此文件夹的任何代码,但它仍包含在最终包中。
我的项目由主模块组成,然后是其他模块依赖项。一种这样的依赖是“公地”。假设在“commons”中有一个名为“flags”的资产文件夹。
如果我们事先知道这个文件夹永远不会被使用,有没有办法编写一个 proguard 规则来排除这个特定的“flags”文件夹?
在我的项目中,主模块不使用“commons”模块中专门针对此文件夹的任何代码,但它仍包含在最终包中。
R8 和 Proguard 都不能删除资产,因为这些资产甚至没有作为输入传递给这些工具。此外,即使它们是输入的一部分,查找资产是否被使用也并非易事。出于同样的原因,R8 和 Proguard 不会删除 Java 资源(它们可能只会更改其路径/名称)。
您的问题的解决方案可能是在应用程序build.gradle
文件中使用 DSL。即,如果您添加:
android {
aaptOptions {
ignoreAssetsPattern "<dir>flags"
}
}
最终的 APK 不会包含目录下的任何文件flags
。请记住,此选项不是特定于变体的,所有应用程序变体(例如调试、发布)都不会包含这些资产。
希望有帮助。