2014-09-03 50 views
17

可以說我有..保持內部接口方法的名字中的ProGuard

public class SomeClass { 


    public interface someInterface { 

     public void firstMethod(String variable); 


     public void secondMethod(String variable); 


     public void thirdMethod(); 

    } 
} 

而我呢.​​.

-keep,includedescriptorclasses public class com.somepackage.SomeClass { 
    <fields>; 
    <methods>; 
} 

-keep public interface com.somepackage.someInterface {*;} 

我結束了

public interface someInterface { 

     public void a(String variable); 


     public void a(String variable); 


     public void a(); 

    } 

如何確保這個接口的方法名不會被混淆,同時仍然會模糊其他類的方法?

+0

如果一個類裏面,不應該ProGuard的參數包括您的外部類爲一體的全名的一部分接口? – 2014-09-04 16:50:53

回答

24

ProGuard使用Java字節碼的命名約定,如類文件名和堆棧跟蹤中所示。因此:

-keep public interface com.somepackage.SomeClass$someInterface {*;} 
+2

不適合我。 – Fra 2016-09-19 03:26:33

+3

我失去了一個小時,因爲我使用了上面沒有用的語法。原因是我定義了沒有公共訪問器的接口(它已經過時了,因爲所有接口都是公共的)。在這種情況下,您需要使用:-keep接口com.somepackage.SomeClass $ someInterface {*;}。我認爲ProGuard應該「聰明」,足以自動處理他的案件。 – 2017-01-30 21:18:22

0

我嘗試以下,似乎工作:

-keep interface com.somepackage.SomeClass$someInterface