2014-03-05 101 views
0

以下定義有什麼問題?Proguard保留所有實現某個接口的內部類

-keep class com.foo.bar。** implements android.content.ServiceConnection { *; }

我需要保持onServiceConnected或斷開的方法:

com.foo.bar.SomeClass $ SomeInnerClass $ SomeInnerInnerClass實現ServiceConnection {// 方法,我需要保持 }

Proguard總是將它們剝離出來。

到目前爲止我發現的唯一解決方案是保留整個com.foo.bar包。

注意:我無法保留com.foo.bar.SomeClass,因爲名稱可能會更改。我得到一個包含已經被保護的代碼的JAR文件。所以SomeClass實際上被稱爲「dw」,而SomeInnerClass實際上被稱爲「a」。但我顯然不能依賴這一點。

謝謝。

回答

1

您的配置看起來正確,但ProGuard已經自動保留了在ServiceConnection等運行時接口中實現方法的方法。您不需要明確指定它們。您可以查看bin/proguard/mapping.txt來查看類和方法的舊名稱/新名稱。您可以使用Android工具dexdump來檢查classes.dex文件,以仔細檢查類是否存在,它們是否實現了接口以及方法是否存在。

0

我有一種特殊情況。我編寫了一個單獨的jar文件,只保留一個自定義的非系統接口實現並混淆其他方法內容。我嘗試了很多,並找到一種方式或多或少地滿足我。

-keepclassmembernames class aa.bb.Impl { 
    public <methods>; 
} 
相關問題