2013-09-29 29 views
1

我有兩個接口Proguard的藏在心裏擴展另一個接口

public interface Base { 
    void methA(); 
    void methB(); 
    void methC(); 
} 

public interface Sub extends Base { 
    @MyAnnotation("a") 
    void methA(); 
    @MyAnnotation("b") 
    void methB(); 
    @MyAnnotation("c") 
    void methC(); 
    @MyAnnotation("d") 
    void methD(); 
    @MyAnnotation("e") 
    void methE(); 
} 

的ProGuard後,我有這樣的兩個接口接口重寫的方法

public interface a{ 
    void a(); 
    void b(); 
    void c(); 
} 

public interface b extends a{ 
    @MyAnnotation("d") 
    void d(); 
    @MyAnnotation("e") 
    void e(); 
} 

但對於第二個我需要

public interface b extends a{ 
    @MyAnnotation("a") 
    void a(); 
    @MyAnnotation("b") 
    void b(); 
    @MyAnnotation("c") 
    void c(); 
    @MyAnnotation("d") 
    void d(); 
    @MyAnnotation("e") 
    void e(); 
} 

這意味着,我需要thier註解重寫方法。我不在乎方法名稱,我只需要註釋。

我無法設置的註解abc在基本接口,因爲我有2個,對於@MyAnnotation

所以設置其他值(也許以後更多)子接口,有沒有辦法告訴proguard將重複的方法名稱保留在子接口中?

回答

1

我找到了解決方案! :)

-keepclassmembers,allowobfuscation,allowoptimization interface * extends path.to.my.interface.Base{*;}

這或多或少禁用該延伸Base接口的任何接口萎縮。

0

Proguard有一個專用標誌來禁用優化。通用表示法是:

-dontoptimize 

它將,但是,關閉所有的優化,這可能是你的具體情況不理想。 Actualy您可以選擇通過顯式聲明的優化過濾器禁用的優化:

-dontoptimize optimization_filter_name 

我不是100%確定哪一個可以幫助在這裏,但我懷疑class/merging/vertical過濾器負責接口重複方法去除。你可以找到優化列表here並嘗試哪一個幫助。

+0

我有 '-optimizations!code/simplification/arithmetic,!field/*,!class/merging/*'它已經應該禁用合併了嗎?以感嘆號「!」開頭的優化被排除在與過濾器中後續優化名稱匹配的進一步嘗試之外。 – Dodge

+0

甚至當我評論我的'-optimizations'行並添加'-dontoptimize'時,方法被刪除:( – Dodge

+0

hmmm,這意味着實際原因不是優化。嘗試禁用'-dontshrink'縮小 – Jk1

相關問題