I am trying to prevent proguard from obfuscating interface (or abstract class) methods parameters.
Lets say I have this interface in my lib :
package com.mypackage;
public interface MyLibListener {
void onSomething(boolean success, String message);
}
And this proguard file :
-keepparameternames
-keep interface com.mypackage.MyLibListener {
*;
}
Then I assemble release and I get :
package com.mypackage;
public interface MyLibListener {
void onSomething(boolean var1, String var2);
}
Same thing with abstract classes or using @Keep
annotations. Obfuscation option keepparameternames
seems to work only for regular classes. Any idea? Thanks!
(related SO : How to not obfuscate interface methods & it's parameters using Progaurd in android? and Proguard keep interface method variable names)
Add following ProGuard options to your configuration.
If your class file hava method parameters metadata (compiled using Java8
-parameters
or etc...)`, ProGuard will keep the metadata.to keep all interface methods:
to keep all public and protected methods, which could be used by reflection:
while I don't understand, why one would want to keep
abstract
classes, which cannot be instanced. it is rather, that one excludes all that is notabstract
with rules which start with-keep !abstract
.Your proguard file may lack some
-keepattributes
, especially a-keepattributes Signature
.Check this example proguard configuration for a library from the proguard documentation to look for ideas.