2013-03-01 99 views
27

我正在嘗試爲我的Android項目設置proguard。我的應用程序項目中只有很少的代碼,但引用了一個包含絕大多數代碼和任何其他外部jar的庫項目。話雖如此,我不知道如何設置proguard考慮到這一點。現在我的proguard配置文件就是來自the ProGuard site的Android示例。我一直在四處搜尋,但還沒有找到很多關於在圖書館項目中使用proguard的文檔,只是罐子。我對proguard很陌生,所以任何推動正確的方向都會很棒。謝謝。使用Android庫項目設置ProGuard

回答

15

編輯

由於@BornToCode指出,不同的答案(最初發布here)更好地解釋了項目如何庫由Proguard的處理。另外,這個引用的問題比我在原始回覆中鏈接的問題更有興趣和更全面的聲譽。 報價:

圖書館本身的項目不運行ProGuard的,所以他們不使用 任何配置。

應用程序項目混淆了整個代碼庫,包括任何 引用的庫,因此它們需要對 應用程序代碼和庫代碼進行適當的配置。


老回答(沒有錯,只是可能不是最好的方法)

圖書館項目更多的是一個項目,它在Eclipse罐子連接的便捷方式。在構建項目時,編譯器可見的庫項目的唯一組件是jar文件。

如果你想混淆這罐子,看看這篇文章:

How to obfuscate an Android library (.jar file) using Proguard in Eclipse

+0

嗨,看來這個答案是[這]不同(http://stackoverflow.com/questions/10982344/is-proguard-cfg-needed-for-library-projects#10992604 )。你能解釋一下嗎? – BornToCode 2013-11-19 01:49:36

+0

@BornToCode你是絕對正確的。相關答案顯然比我的答案更有信譽。我在這裏添加了一個鏈接到這個和我的答案中的一個引用。 – Phil 2013-11-19 04:05:13

4

這對我來說很有意義指定庫proguard的設置(如該庫文件不應該混淆)在圖書館項目。我發現我還需要在我的應用程序中包含來自我的庫模塊的proguard配置。要做到這一點,我添加了以下到defaultConfig節在我的圖書館的build.gradle

apply plugin: 'com.android.library' 

android { 
    defaultConfig { 
     consumerProguardFiles 'proguard-rules.pro' 
    } 
} 

,然後在我的庫模塊配置的proguard-rules.pro文件,以保持重要的序列化類的名稱。

參見consumerProguardFiles gradle reference