2012-04-24 41 views
2

我需要保留所有繼承com.opensymphony.xwork2.ActionSupport並實現自定義接口的類。如何保持一個擴展和實現與Proguard接口的類

當我嘗試這個

-keepnames public class * extends com.opensymphony.xwork2.ActionSupport implements com.company.project.utils.Constantes { 
*; 
} 

我得到以下錯誤:

錯誤期待開擴 '{' 在 '工具'

回答

3

如果沒記錯,你可以指定這些類擴展了實現接口的另一個類或類,但不是兩者。 documentation並沒有使這個特別清楚,但暗示在那裏。

周圍有此一對夫婦的方式,假設它是不夠的,你只指定一個或另一個:

  • 創建一個空的「標記」界面,並有你想保留的類延長這一點。
  • 爲每個要保留的類添加一個靜態(如果願意,可以是private static final)標記字段,並在-keep選項中指定該字段。
  • 咬緊牙關,只列出你想保留的所有課程的名稱。

編輯

另一種選擇是創建這樣一個類:

public abstract class Foo extends com.opensymphony.xwork2.ActionSupport implements com.company.project.utils.Constantes { 
    // ... 
} 

然後,有你想保留繼承了該類的類。然後您只需在-keep選項中指定* extends Foo

+0

謝謝,但這個限制有點糟糕,它使混淆真的不切實際。 – Genjuro 2012-04-24 11:05:49

+1

想到另一種可能的解決方案,我更新了答案。坦率地說,你們要求這些類都擴展一個特定的類並實現一個特定的接口是非常罕見的。 – vaughandroid 2012-04-24 11:36:47

+0

事情是,我想保留所有的Action類,它們都擴展了ActionSupport並且實現了Constantes。 我會一直愛能夠keep'em只是specifiying -keepnames公共類*寬com.opensymphony.xwork2.ActionSupport 但proguard的需要完整的簽名,文檔意味着,你可以保持一類擴展「或」實現,我認爲他們的意思是和XOR在那裏。 – Genjuro 2012-04-24 11:40:22

相關問題