2011-05-01 35 views
7

我成功地爲我的Android應用程序使用了proguard。如何強制Proguard保留我的.xml資源文件?

但是,有一個應用程序,我遇到了麻煩。

此應用程序使用包含存儲在包中的.xml文件的java庫。

InputStream istream = Library.class.getResourceAsStream("resource.xml"); 

當禁用proguard時,該庫很有用。但是,運行proguard,似乎xml文件只是完全剝離。

相關proguard.cfg

-optimizationpasses 5 
-dontusemixedcaseclassnames 
-dontskipnonpubliclibraryclasses 
-dontpreverify 
#-dontobfuscate 
#-repackageclasses '' //THIS IS DISABLED 
-keepattributes *Annotation* 
-keepattributes Signature 
-verbose 
-dontwarn roboguice.activity.RoboMapActivity 
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 

如何強制保留此xml文件的任何想法?

回答

7

首先,事實證明,使用ant和我的build.xml腳本根本不處理.xml資源文件。您需要手動將複製操作添加到build.xml,以便將資源文件複製到輸出目錄。

不過,解決了這個問題,proguard弄糟了我的工作。解決辦法是:

-keeppackagenames the.package.where.the.file.is.kept 

這使得確保.xml文件可以通過調用Library.class.getResource被發現。

1

您應該將文件存儲在相應的/res/xml,/res/assets/res/raw文件夾中,並通過相應的資源管理系統或資產管理器訪問它們。您可以閱讀更多關於在Android Developer's Guide中提供資源的信息。

+0

這一切都很好,但這是一個java庫中的xml文件,而不是一個android。我在我的android應用程序中使用它,並沒有proguard它工作正常。我當然明白,在普通的android應用程序中,你不會以這種方式使用它。 – Peterdk 2011-05-01 15:29:34

+0

問題是,它看起來不像ProGuard的錯。 ProGuard不會從JAR剝離資源,它只能在縮小過程中刪除類。這些問題更可能來自Android構建文件。可以修改它們以適應您的需求,但這不是一件容易的事。即使成功,每次SDK更新時都可能需要重做。 – Malcolm 2011-05-01 18:55:19

+0

但是,當proguard被禁用時,資源在我的應用程序內工作。當啓動proguard時,他們不會。所以,proguard正在做一些導致麻煩的事情。 – Peterdk 2011-05-02 16:56:26

相關問題