1
package com.hello

public class Outer extends Activity{
  int a;
  int b;
  array c;
  Boolean bol;

  public void onCreate() {
    a=1;
    b=2;
    c=new int[10];
    bol=true;
  }

  class Inner implements Runnable {

    public void run() {
      if (bol)
        for (int e=0;e<10;e++) c[e]=a+b;
    }   
  }
}

我如何告诉 Progruad 保留内部类的名称和内部类中使用的变量,即使它们是在 onCreate 方法中定义的?

我不想一一列出每个变量。

4

1 回答 1

0

保持内部类:

# specific class (in brackets for example we keep all)* 
-keep class OuterFQNClassName$InnerClassName { *; }   
# all inner classes of outer class 
 -keep class OuterFQNClassName$** { *; }
# all inner classes 
 -keepattributes InnerClasses

保留具有所需公共/受保护/私有/默认访问级别修饰符的字段):

# for specific class 
-keepclassmembers class FQNClassName {
    protected <fields>;    
}

# for all classes 
-keepclassmembers class * {
    protected <fields>; 
}

# other approach for default acl
# be careful as method could have also native modifiers :) 
-keepclassmembers class * {
  !public !protected !private *;
}

*在内部类和外部类的名称之间使用“$”分隔符的命名约定

请研究proguard docs:

https://www.guardsquare.com/en/proguard/manual/attributes

于 2017-10-31T20:25:13.097 回答