From Eclipse to Android Studio: Why is proguard.cf

2019-02-26 15:55发布

So, I have been trying to migrate the development of a multi-project (eclipse projects that is) app to Android Studio (v1.1).

Importing via File > Import Project was really easy and went without incident.

However, when I tried Make/Rebuild project I encountered numerous surprises. The first, not Proguard-related, had to do with source file encoding (originally in Windows-1252), but I quickly found a solution using this Windows-1252 > Reload > UTF-8 > Convert answer.

Then, "error: cannot find symbol class" for a com.comp.mod.X class of mine. I then solved it by going to the module (Android Studio module that is, previously an Eclipse project) that contains that class and added to its proguard.cfg the following:

-keep public class com.comp.mod.X

Which left me with an "error: cannot find symbol variable" for a const BB defined in the aforementioned class. I solved this by adding to the same proguard.cfg the following:

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

That left me with only one "error: cannot find symbol method getPreferenceX()". I solve this by adding to the same -keepclassmembers that method, so that the above now looks:

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

I thought I was done, but to my dismay, when I attempted to rebuild the project, I received numerous additional errors from other modules in the project, all of the type to "error: cannot find symbol class/variable/method" and related to some proguard.cfg.

I could have continued butchering the proguard.cfg files for each and every module but at this point I am beginning to suspect that I am doing something fundamentally wrong, because those proguard.cfg files work perfectly under Eclipse. So,

  1. Why all of a sudden these are no longer good for Android Studio?
  2. If ProGuard runs only when you build your application in release mode, why is the Android Studio based build complaining about "cannot find symbol" due to Proguard's obfuscation?

What am I missing?

Note: I have not attempted "Generate Signed APK". All I do is "Rebuild Project".

1条回答
▲ chillily
2楼-- · 2019-02-26 16:35

Currently (as of 2015-04-24), minifyEnabled's default value of false for all build types is incorrect for multi-module projects, in which some modules (app included) are dependent on other modules. This is due to bug #52962 that causes build types to not propagate to libraries -- they are always built as RELEASE.

Suggestions to work around this bug or notifications of its fix are most welcome.

查看更多
登录 后发表回答