从 Eclipse 到 Android Studio:为什么在不构建 Release 时使用 proguard.cfg?

From Eclipse to Android Studio: Why is proguard.cfg used when NOT building Release?

所以,我一直在尝试将多项目(即 eclipse 项目)应用程序的开发迁移到 Android Studio (v1.1)。

通过“文件”>“导入项目”导入非常简单,而且顺利进行。

然而,当我尝试 Make/Rebuild 项目时,我遇到了很多惊喜。第一个与 Proguard 无关,与源文件编码有关(最初在 Windows-1252),但我很快找到了使用此 Windows-1252 > Reload > UTF-8 > Convert 答案的解决方案。

然后,"error: cannot find symbol class" 换一个 com.comp.mod.X class 我的。然后我通过转到包含 class 并添加到其 proguard.cfg[=47 的模块(Android Studio 模块,即以前的 Eclipse 项目)来解决它=] 以下:

-keep public class com.comp.mod.X

这给我留下了 "error: cannot find symbol variable" 用于上述 class 中定义的 const BB。我通过向相同的 proguard.cfg 添加以下内容来解决此问题:

-keepclassmembers class com.comp.mod.X {
    public static final boolean BB;
}

我只剩下一个 "error: cannot find symbol method getPreferenceX()"。我通过添加到相同的 -keepclassmembers 方法来解决这个问题,因此上面现在看起来是:

-keepclassmembers class com.comp.mod.X {
    public static final boolean BB;
    public static java.lang.String getPreferenceX();
}

我以为我已经完成了,但令我沮丧的是,当我尝试重建项目时,我从项目中的其他模块收到了许多额外的错误,所有类型都为 "error: cannot find symbol class/variable/method" 并与某些相关proguard.cfg.

我本可以继续为每个模块修改 proguard.cfg 文件,但此时我开始怀疑我做的事情根本上是错误的,因为那些 proguard.cfg 文件在蚀。所以,

  1. 为什么突然间这些不再适用于 Android Studio?
  2. 如果 ProGuard runs only when you build your application in release mode,为什么基于 Android Studio 的构建会因为 Proguard 的混淆而抱怨 "cannot find symbol"?

我错过了什么?

注意:没有尝试过"Generate Signed APK"。我所做的只是 "Rebuild Project".

目前(截至 2015 年 4 月 24 日),minifyEnabled 对于所有构建类型的默认值 false 对于 多模块 项目,其中一些模块(包括应用程序)依赖于 其他模块。这是由于 bug #52962 导致构建类型 传播到库——它们总是构建为 RELEASE。

非常欢迎提出解决此错误的建议或有关其修复的通知。