Adil Hussain
Adil Hussain

Reputation: 32221

Does "-keep class ..." rule include public and inner classes?

If I have a proguard rule as follows...

-keep class com.mycompany.myapp.** { *; }

... Then are the following two rules obsolete and unnecessary...

-keep public class com.mycompany.myapp.** { *; }
-keep class com.mycompany.myapp.SomeClass$* { *; }

?

i.e. does the former rule supersede and include the latter two?

Upvotes: 0

Views: 160

Answers (1)

Display Name
Display Name

Reputation: 952

You are correct in that

-keep class com.mycompany.myapp.** { *; }

Overrides the other two rules. Here's an example:

Before Proguard:

package com.mycompany.myapp;
public class Main {
    public static void main(String[] args) { new Main().init(); }
    private void init(){
        PackageInnerClass pic1 = new Main.PackageInnerClass();
        PublicInnerClass pic2 = new Main.PublicInnerClass();
        PrivateInnerClass pic3 = new Main.PrivateInnerClass();
    }
    class PackageInnerClass { void method1() { System.out.println("Method 1"); } }
    public class PublicInnerClass { void method2() { System.out.println("Method 2"); } }
    private class PrivateInnerClass { void method3() { System.out.println("Method 3"); } }
}

After Proguard (with your rule): enter image description here

The only difference is that the classes are moved to their own .class files. But functionally they're the same.

Upvotes: 1

Related Questions