android - Proguard 忽略库的配置文件

标签 android android-studio module proguard android-library

我这几天都面临着一个非常奇怪的问题......

我有一个带有两个模块的 Gradle 应用程序,一个主模块和一个库模块。

  • 在这两个模块中,我都声明了一个正确的 proguard-rules.pro 文件路径
  • 在两个 .gradle 文件中我都设置了 minifyEnabled true

这是第一个问题:即使库中的 minifyEnabled 为 false,它也会被混淆。它根本没有效果,似乎取决于主模块的设置。我使用 proguard 已经有一段时间了,我从来没有遇到过这样的行为。

此外,图书馆的 proguard-rules.pro 似乎完全被忽略了。我在那里声明什么都没关系,它没有被使用,结果总是相同的(总是反编译以查看结果)。它被默认设置混淆了。

我使用了一个无效的 proguard 文件名来查看文件是否被触摸过,并且确实存在错误名称的错误,并且它还提示 proguard 文件中的语法错误......

我不知道这是否与 Android Studio 的更新有关,因为它还建议我使用“minifyEnabled”而不是“runProguard”。

如何管理 proguard 也可以使用库的 proguard-rules.pro?

编辑:

我制作了一个示例项目来澄清我的问题

enter image description here

我的库的 proguard 配置

enter image description here

我的图书馆的 gradle:

enter image description here

最后是我总能得到的结果。我在 proguard 配置中排除/包含什么并不重要

enter image description here

如您所见,proguard 规则在主模块上运行良好。它做它应该做的。但它总是将我的图书馆完全混淆为 a.a....

它还完全删除了图书馆的 Activity ,这根本不应该发生

最佳答案

您通常不应在库项目中启用 ProGuard。 ProGuard 在应用程序项目中将应用程序和库一起处理,这是最有效的方法。

在库项目中,您可以在 build.gradle 中指定任何特定于库的 ProGuard 配置,例如:

defaultConfig {
    consumerProguardFiles 'proguard-rules.txt'
}

然后这个文件在库aar中被打包成proguard.txt,并自动应用到应用项目中。

如果您确实在库项目中启用 ProGuard(可能是因为您想分发库),那么您还必须添加正确的配置来处理库。 Android Gradle 构建似乎不会自动执行此操作。你可以:

  1. android-sdk/tools/proguard/examples/library.pro 复制到您的库项目中的 proguard-project.txt
  2. 从文件。 Gradle 构建过程会自动提供这些选项。
  3. 从库项目的 build.gradle 中引用配置。

为库项目和应用程序项目独立启用/禁用 ProGuard 对我来说很好。

关于android - Proguard 忽略库的配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26983248/

相关文章:

python - Pandas datetools 模块错误

Android 在两个进程之间共享 SurfaceTexture

android - Flutter构建APK在Android Studio上不起作用

java - 无法将 ProgressDrawable 置于进度条的背景上

android - 错误类型 3 错误 : Activity class {} does not exist

android - 无法在 Android Studio 中添加 Android Assets 。选项去哪儿了?

python - 模块命名约定(避免冲突)

Python-导入错误: No module named 'vector'

java - 检查电子邮件是否在数据库中,否则将用户名和密码存储在数据库中

android - 为什么 queryIntentActivities() 方法中指定的标志设置为零?