2016-05-13 1 views
0

Если у меня есть правило Proguard следующим образом ...Правило «-keep class ...» включает общедоступные и внутренние классы?

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

... Тогда следующие два правила устарели и ненужными ...

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

?

Т.е. прежнее правило заменяет и включает в себя последние два?

ответ

1

Вы правы в том,

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

Overrides два других правил. Вот пример:

Перед 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"); } } 
} 

После Proguard (с вашим правилом): enter image description here

Единственное отличие состоит в том, что классы будут перемещены в свои собственные файлы .class. Но функционально они одинаковы.

 Смежные вопросы

  • Нет связанных вопросов^_^