2015-06-11 108 views
1

我知道規則是我們應該從ProGuard混淆中排除(例如不混淆)庫,如果我們希望它正常工作。這就是所有教程停止的地方。爲什麼我們必須從ProGuard混淆中排除庫?

在引擎蓋下,這是什麼原因?是否因爲它沒有與我們的項目相同的包名?我知道這是強制性的,因爲當我忘記從ProGuard模糊處理中排除這些庫時,我遇到了恐怖故事。

這個規則適用於我們自己的圖書館項目嗎?他們也有不同的軟件包名稱,但是公共項目不需要被混淆,我們自己的庫不得不被混淆。

顯然,我有一個完整的ProGuard知識,並且不能製作質量迷惑計劃,因爲我上面提出的問題並沒有給我明確和可以理解的答案。

+1

你從哪裏聽說你應該從proguard中排除整個圖書館?那是不正確的。 –

+0

好吧,我們不會混淆它們,這就是我所排除的含義。我得出的結論是,在與Facebook,支持庫,gson和其他幾十個其他第三方庫問題後。 – sandalone

回答

3

庫項目可以模糊和最小化。沒有必要從混淆或縮小中完全排除庫。

一些圖書館確實需要特殊的規則來確保它們正常工作,並將其擴展到自己的圖書館。這些問題不是源於他們是圖書館的事實,這些問題與圖書館的工作有關。

GSON,例如要求您加入這一行:

-keepattributes Signature 

他們sample proguard file方便地提供了這樣的解釋:

# Gson uses generic type information stored in a class file when working with fields. 
# Proguard removes such information by default, so configure it to keep all of it. 

出於類似的原因,你需要告訴ProGuard忽略你的模型GSON將進行序列化或反序列化。由於GSON使用反射工作,因此您需要確保成員字段未被混淆,否則GSON將不知道要查找哪些字段。

雖然我似乎記得過去有過Facebook的問題,但他們的documentation currently explicitly states你不需要對Proguad做任何特別的事情。