从 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 文件在蚀。所以,
- 为什么突然间这些不再适用于 Android Studio?
- 如果 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。
非常欢迎提出解决此错误的建议或有关其修复的通知。
所以,我一直在尝试将多项目(即 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 文件在蚀。所以,
- 为什么突然间这些不再适用于 Android Studio?
- 如果 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。
非常欢迎提出解决此错误的建议或有关其修复的通知。