2014-08-30 249 views
2

我正在構建使用Apache POI庫的應用程序。當調試應用程序(編譯它不運行Proguard的)一切是偉大的工作,但是出口的APK之後,當我運行該應用程序並打開一個Excel文件,我得到以下異常:Apache POI的ProGuard設置

RuntimeException - Caused by: java.lang.ExceptionInInitializerError at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:301)

這裏我的proguard設置文件:

-injars  bin/classes 
-injars  libs/android-support-v13.jar 
-outjars  bin/classes-processed.jar 
-libraryjars /usr/bin/adt/sdk/platforms/android-19/android.jar 
-libraryjars libs/poi-3.10.1.jar 

-dontpreverify 
-repackageclasses '' 
-allowaccessmodification 
-optimizations !code/simplification/arithmetic 
-keepattributes *Annotation* 

-dontwarn org.apache.poi.** 
-dontwarn com.google.** 
-dontwarn android.support.** 

-keep public class * extends android.app.Activity 
-keep public class * extends android.support.v4.app.FragmentActivity 
-keep public class * extends android.support.v4.app.Fragment 
-keep public class * extends android.app.Application 
-keep public class * extends android.app.Service 
-keep public class * extends android.content.BroadcastReceiver 

-keep class com.android.vending.billing.** 

-keep public class * extends android.view.View { 
    public <init>(android.content.Context); 
    public <init>(android.content.Context, android.util.AttributeSet); 
    public <init>(android.content.Context, android.util.AttributeSet, int); 
    public void set*(...); 
} 

-keepclasseswithmembers class * { 
    public <init>(android.content.Context, android.util.AttributeSet); 
} 

-keepclasseswithmembers class * { 
    public <init>(android.content.Context, android.util.AttributeSet, int); 
} 

-keepclassmembers class * implements android.os.Parcelable { 
    static android.os.Parcelable$Creator CREATOR; 
} 

-keepclassmembers class **.R$* { 
    public static <fields>; 
} 

在Proguard中,Apache POI的正確配置是什麼?我使用POI只讀舊的(Excel 97)格式,所以我不需要所有其他的罐子。

+0

http://stackoverflow.com/questions/25469560/android-proguard-issues-for-release/ 25470047#25470047爲org.apache.poi做同樣的keep/ign警告。 – 2014-08-30 14:41:11

+0

它適用於我不使用模糊處理但是我想混淆 – mittelmania 2014-08-30 14:51:25

+0

鑑於Apache POI是開源的,因此代碼對所有人都是免費提供的,爲什麼您要混淆編譯後的POI類? – Gagravarr 2014-08-31 14:48:37

回答

3

我最終加入以下行:

-keep public class org.apache.poi.** {*;} 

這似乎解決問題