如何保持覆盖\实现另一个方法的类方法名称被混淆?

时间:2013-07-16 11:54:49

标签: java android proguard

如果我有Class B实现Interface A并且Proguard不知道该接口的存在,我如何保留实现接口A的抽象方法的方法的名称?

请注意我想保留方法名称,但我确实希望对其内容进行模糊处理。

更新 这就是我所拥有的(请注意评论):

public class MyService extends Service {

   // an anonymous class that implements ServiceConnection 
   private ServiceConnection myConnection = new ServiceConnection()
   {
      // don't change the following method's name
      @Override
      public void onServiceConnected(ComponentName className, IBinder service)
      {
          // I want this section to be obfuscated
      }

}

我想要针对这类情况的一般解决方案 - 我不想在ProGuard配置中声明接口名称。

2 个答案:

答案 0 :(得分:6)

  • 保留所有公共类名称并保留(防止混淆) 他们的公共和受保护的方法。
  • 在非公开课堂上,保持(防止混淆)所有公开和 保护方法。这将使可能实现或扩展其他方法的方法不被混淆。
  • 不要保留局部变量属性(make 确定“LocalVariableTable”和“LocalVariableTypeTable”不是 在“-keepattributes”选项中说明。

所以你的.pro文件应该是这样的 -

#Keeping all public class names and keep (prevent obfuscation) of their public and protected methods
-keep public class * {
    public protected <methods>;
}

# Keep (prevent obfuscation) all public and protected methods in non-public classes.
# Notice that the non-public class names will still get obfuscated
-keepclassmembers !public class * {
    public protected <methods>;
}

# Don't keep the local variables attributes (LocalVariableTable and LocalVariableTypeTable are dropped).
-keepattributes Exceptions,Signature,Deprecated,SourceFile,SourceDir,LineNumberTable,Synthetic,EnclosingMethod,RuntimeVisibleAnnotations,RuntimeInvisibleAnnotations,RuntimeVisibleParameterAnnotations,RuntimeInvisibleParameterAnnotations,AnnotationDefault,InnerClasses,*Annotation*

答案 1 :(得分:0)

我写了一篇关于Progaurding Android应用程序的博客。请查看以下链接

http://techspreadwithshraddha.wordpress.com/2013/03/26/android-progaurd/

ProGuard可以按照您的描述进行操作。如果您不希望它重命名类和方法,请尝试以下方法:

-keep,allowshrinking,allowoptimization class * { <methods>; }

希望这有帮助