2014-08-30 2 views
2

Я создаю приложение, использующее библиотеку POI Apache. Когда я отлаживать приложение (скомпилировать его без запуска Proguard) все работает прекрасно, однако после экспорта APK, когда я запустить приложение и открыть файл Excel, я получаю следующее исключение:Настройки ProGuard для Apache POI

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>; 
} 

Какова правильная конфигурация для Apache POI в Proguard? Я использую POI, чтобы читать только старый (Excel 97) формат, поэтому мне не нужны все остальные банки.

+0

http://stackoverflow.com/questions/25469560/android-proguard-issues-for-release/ 25470047 # 25470047 выполните те же предупреждения keep/ign для org.apache.poi. –

+0

Это работает, когда я не использую обфускацию, однако я хочу, чтобы обфускация – mittelmania

+0

Учитывая, что Apache POI является открытым исходным кодом, и поэтому код доступен всем для всех, почему вы хотели бы запутать скомпилированные классы POI? – Gagravarr

ответ

3

я в конечном итоге добавив следующую строку:

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

Это, кажется, решить эту проблему