2017-05-24 84 views
2

我想用ProGuard縮小,優化和混淆我的應用程序。一切工作正常,除了GSON註釋。我有這樣的事情在我的應用程序:使用ProGuard時,是否可以在GSON註釋中混淆字符串?

@Expose 
@SerializedName("testbla") 
private String test; 

當使用ProGuard它變成像這樣的IM:

@com.google.a.a.a 
@c(a="testbla") 
private String a; 

因此有某種困惑,但「testbla」仍是可讀。 我在文檔中讀到了字符串常量不會被ProGuard混淆(例如https://www.guardsquare.com/en/proguard/faq#encrypt)。不過,如果有任何選擇,我想混淆這些字符串。那麼有什麼可能,請讓我知道!

感謝您的幫助!

+0

我想這沒有任何意義。 Gson如何知道如何映射JSON屬性和POJO字段呢? ProGuard做得很對。如果你真的想混淆它們,你必須重新實現你自己的'ReflectiveTypeAdapterFactory'。 –

+0

我對Android沒有把握,但在「普通香草」Java中,您還可以創建自定義類加載器,以便對ProGuard處理的類應用一些解密。在Java中實現它很容易,可能也是Android。 –

回答

2

ProGuard不會混淆字符串。

Gson註釋確保您的映射類可以正常工作很重要。

如果您刪除了註釋並使用了proguard,那麼當您的應用程序需要將您的JSON轉換爲POJO時,就會發生錯誤。因爲代碼將嘗試查找屬性「a」而不是「測試」(因爲您的代碼被混淆)。因此,Gson註釋很重要。

還有其他選項可以混淆您的代碼,如DexGuard,但它不是免費的。

退房的差異: Link